* JPA란?
JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. JPA는 애플리케이션과 JDBC 사이에서 동작한다.
* ORM이란?
ORM(Object-Relational Mapping)은 객체와 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다.
* MyBatis vs JPA
특징 | MyBatis | JPA |
방식 | SQL 기반 매핑 | 객체 중심 매핑 (ORM) |
쿼리 작성 방식 | 직접 SQL 작성 (XML 또는 Annotation) | JPQL, Criteria API, Native SQL |
성능 | SQL 튜닝 가능 (최적화 용이) | 캐싱, 지연 로딩 지원 (대량 데이터 처리 유리) |
복잡한 쿼리 | 복잡한 JOIN, 서브쿼리 최적화 가능 | 복잡한 쿼리는 처리 어려움 (Native Query 사용 가능) |
개발 생산성 | SQL 직접 작성해야 해서 코드 증가 | 객체 중심이라 코드 간결 |
트랜잭션 | 별도 관리 필요 | 영속성 컨텍스트와 함께 자동 관리 |
캐싱 | 별도로 설정해야 함 | 1차 캐시, 2차 캐시 기본 제공 |
학습 난이도 | SQL을 잘 알면 쉽게 사용 가능 | 개념 학습 필요 (Entity, 영속성 컨텍스트 등) |
유지보수 | SQL이 많아 유지보수 부담 가능 | 코드 변경 시 DB 변경 부담 적음 |
* JPA vs Spring Data JPA
구분 | JPA(Java Persistence API) | Spring Data JPA |
개념 | Java 표준 ORM API | JPA를 더 쉽게 사용할 수 있도록 Spring이 제공하는 확장 라이브러리 |
구현체 | Hibernate, EclipseLink 등 사용 | JPA + 추가 기능 (Repository 인터페이스) |
SQL 작성 방식 | JPQL, Criteria API, Native SQL | 기본적인 SQL은 자동 생성 (쿼리 메서드, @Query 지원) |
CRUD 지원 | 직접 EntityManager 사용 | JpaRepository를 통해 자동 지원 |
트랜잭션 관리 | @Transactional 직접 설정 필요 | 기본적으로 Spring이 관리 |
코드량 | EntityManager를 직접 다뤄야 해서 코드가 많음 | JpaRepository 덕분에 코드가 줄어듦 |
커스터마이징 | JPA 기능을 직접 컨트롤 가능 | 커스텀 쿼리 지원 (@Query, QueryDSL) |
✅ JPA가 적합한 경우
✔ 직접 EntityManager를 사용하여 SQL 최적화가 필요한 경우
✔ ORM 동작을 세밀하게 컨트롤해야 하는 경우
✔ Spring을 사용하지 않는 프로젝트
✅ Spring Data JPA가 적합한 경우
✔ 빠른 개발이 필요한 경우 (Spring Boot와 함께 사용)
✔ 반복적인 CRUD 코드를 줄이고 싶은 경우
✔ @Query, QueryDSL을 활용하여 복잡한 쿼리를 쉽게 관리하고 싶은 경우
* JPA를 사용하는 이유
- 생산성 : JPA를 사용하면 자바 컬렉션에 객체를 저장하듯이 JPA에게 저장할 객체를 전달하면 된다. 그리고 지루하고 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성하지 않아도 된다. 따라서 JPA를 사용하면 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역전시킬 수 있다.
- 유지보수 : 개발자가 작성해야 하는 SQL과 JDBC API 코드를 JPA가 대신 처리해주므로 유지보수해야 하는 코드 수가 줄어든다.
- 패러다임의 불일치 해결 : JPA는 상속, 연관관계, 객체 그래프 탐색, 비교하기와 같은 패러다임의 불일치 문제를 해결해준다.
- 데이터 추상화와 벤더 독립성 : JPA는 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 한다. 만약 데이터베이스를 변경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 된다. 예를 들어 JPA를 사용하면 로컬 개발 환경은 H2 데이터베이스를 사용하고 개발이나 상용 환경은 오라클이나 MySQL 데이터베이스를 사용할 수 있다.
'Java > JPA' 카테고리의 다른 글
[JPA] Entity Manager (0) | 2025.02.12 |
---|