DB
JPA 와 Mapper 파일 이 같이 쓰는 프로젝트
2025. 10. 1. 17:53

보통 JPA를 쓰면 Entity 와 Repository 만으로도 DB CRUD 를 할 수 있는데, 현업에서는 JPA + Mapper(MyBatis 같은 매퍼) 를 같이 쓰는 경우 종종 있다!!  왜그런지 이유는??

🔹 JPA만으로 부족한 부분

  1. 복잡한 SQL 제어 어려움
    • JPA는 객체 중심이라 동적 SQL, 복잡한 조인, 집계 쿼리 작성이 불편
    • JPQL/Criteria API로 가능하긴 하지만, 가독성이 떨어지고 SQL 최적화 제어가 어려움
  2. DB 특화 기능 한계
    • 오라클의 힌트, Tibero/Postgres의 특정 함수, Window 함수 등은 JPA 표준으로 다루기 어렵습니다.
    • NativeQuery로 가능하지만, 유지보수가 불편
  3. 대용량 배치 처리
    • JPA는 1차 캐시/영속성 컨텍스트를 사용하기 때문에 대량 데이터 처리 시 메모리 이슈가 발생
    • 반면 MyBatis 같은 매퍼는 JDBC에 가깝게 동작해서 대량 insert/update/delete에 더 적합

🔹 Mapper(JDBC 기반) 같이 쓰는 이유

  1. 복잡한 조회 최적화
    → 조회 전용, 보고서성 쿼리, 다중 조인/서브쿼리는 Mapper(SQL 직작성)이 훨씬 깔끔.
  2. 성능 제어 필요
    → SQL 튜닝, 인덱스 활용, DB Vendor 최적화 기능(힌트 등) 적용이 쉬움.
  3. 대량 작업 (Batch)
    → Mapper는 executorType=BATCH 로 한번에 처리 가능.
    → JPA의 saveAll() 보다 메모리 안정적이고 빠름.
  4. Legacy 호환
    → 기존 DB 스키마가 JPA 엔티티 매핑하기 까다롭다면 Mapper로 직접 매핑.
  5. SQL 명확성
    → JPA는 SQL이 추상화되어 보이지 않는데, Mapper는 작성한 SQL이 그대로 실행되므로 디버깅/운영자 공유가 용이.

🔹 결론

👉 트랜잭션/일반 CRUD → JPA
👉 복잡 조회, 대량 배치, 튜닝 필요 SQL → Mapper

즉, JPA는 객체지향적 개발 편의성을, Mapper는 DB 성능 최적화와 유연한 SQL 제어를 위해 서로 보완적으로 사용

'DB' 카테고리의 다른 글

DB 파티션이란?  (0) 2025.09.12
정규화 / 반정규화 란??  (0) 2025.06.04
JPA  (0) 2025.01.16
Mybatis  (0) 2024.12.02
Spring <-> Oracle 연동방법  (0) 2024.11.29