JPA 소개
배경 이야기
과거 자바 진형은 엔터프라이즈 자바 빈스(EJB)라는 기술 표준을 만들었는데, 그 안에 ORM기술도 포함되어 있었다. 그러나 너무 복잡하고 J2EE(자바 엔터프라이즈)애플리케이션 서버 위에서만 동작하는 단점이 있었다.
이런 단점을 상쇄시켜주는 하이버네이트(hibernate.org)라는 오픈소스 ORM 프레임워크가 등장했는데, EJB의 ORM과 비교하여 실용적이었다. 결국 EJB 3.0에서 하이버네이트를 기반으로 하는 새로운 ORM 표준이 등장했는데 이것이 JPA이다.
즉 JPA는 자바 ORM 기술의 인터페이스이다. JPA는 이런이런 조건을 만족해야 합니다. 이런 구현채가 있어야 합니다. 라고 명세를 적어 놓은 것이기 때문에, 실제로 사용하려면 JPA를 구현한 ORM 프레임워크를 선택해야 한다.
현재 JPA 2.1을 구현한 ORM 프레임워크는 하이버네이트 ,EclipseLink, DataNucleus가 있는데, 이 중 하이버네이트가 가장 대중적이다.
JPA를 사용해야 하는 이유?
생산성
빠르다. 자바 컬렉션에 객체를 저장한듯이 JPA에 데이터를 전달하면 내부 쿼리를 알아서 만들어서 DB에 호출을 날려준다. 따라서 지루하고 반복적인 CRUD SQL을 개발자가 작성할 필요가 없다.
유지보수
유지보수에 편리하다. SQL을 하나 수정할때마다 JDBC API 코드를 모두 변경해야 했었는데, 이제는 JPA가 알아서 다 해준다.
성능
JPA는 애플리케이션과 데이터베이스 계층 사이에서 존재하기 때문에 성능상 최적화를 할 수 있는 기회가 많다.
생각해본 점
- 현재 개발할 때 JPA를 사용하고 있는데, JPA에서 해결하기 어려운 이슈가 몇개 있었다. (ex 사용자 레이스 컨디션 문제) 지금은 JPA를 잘 몰라서 말하기 어려우나, 실제로 이런 문제를 JPA를 사용하면 말끔하게 해결할 수 있을까? Spring data jpa 환경에 스페시피케이션만 사용하여 대부분의 문제를 해결할 수 있을지 궁금하다.
- 실제로 성능이 더 나아질 수 있을까? 성능을 장점으로 들었는데, 별도의 튜닝 없이는 JPA를 사용하는 것이 성능상으로는 약간의 단점이 있는 것으로 알고 있다.
- 어쨌든 빠르게 개발하는데는 큰 장점인 듯.