JPA란?
Java Persistence API로 자바 진영에서 ORM(Objecct Relational Mapping) 기술 표준으로 사용되는 인터페이스 모음이다. 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다. 인터페이스 모음이므로 구현체가 필요한데 대표적으로 사용되는 오픈소스로는 Hibernate가 있습니다.
ORM(Object Realational Mapping)
Java 의 Class 와 RDB(Relational Database)의 테이블을 매핑한다는 뜻으로, 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것으로 생각하면 됩니다.
장점
- SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용해 비즈니스 로직을 구성하는데만 집중 할 수 있습니다.
- Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높입니다.
- 객체지향적인 코드 작성이 가능하다. 오직 객체지향적 접근만 고려하면 되기때문에 생산성 증가합니다.
- 매핑하는 정보가 Class로 명시 되었기 때문에 ERD를 보는 의존도를 낮출 수 있고 유지보수 및 리팩토링에 유리합니다.
- 예를들어 기존 방식에서 MySQL 데이터베이스를 사용하다가 PostgreSQL로 변환한다고 가정해보면, 새로 쿼리를 짜야하는 경우가 생김. 이런 경우에 ORM을 사용한다면 쿼리를 수정할 필요가 없습니다.
단점
- 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우, 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있습니다.
- 복잡하고 무거운 Query는 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있습니다.
- 학습비용이 비쌉니다.