JPA와 MyBatis는 모두 자바에서 데이터베이스와 연동하기 위한 기술이지만, 접근 방식이 완전히 다릅니다.
간단히 말해:
🔸 JPA는 ORM 기반 (Object Relational Mapping = 객체로 연결을 해준다) 이고,
🔸 MyBatis는 SQL 매핑 기반입니다.
그리고, 동시에 사용할 수도 있습니다. 각각의 장점을 살려 복합적인 시스템을 만드는 경우도 많습니다.
✅ JPA vs MyBatis 비교표
항목 JPA MyBatis
| 접근 방식 | ORM (객체 ↔ 테이블 자동 매핑) | SQL 매퍼 (SQL 직접 작성) |
| SQL 작성 | 거의 안 함 (JPQL 또는 자동) | 직접 SQL 작성 |
| CRUD 처리 | 자동 메서드로 처리 가능 (save, findById) | 직접 SQL 작성해야 함 |
| 유지보수 | 변경에 유연 (DB 변경 시 코드만 수정) | SQL이 많아지면 유지보수 어려움 |
| 복잡한 쿼리 | 상대적으로 어려움 (JPQL, Native 필요) | 자유롭게 작성 가능 |
| 성능 튜닝 | 캐시, 지연 로딩 등 자동 최적화 기능 | 직접 컨트롤 가능 |
| 학습 난이도 | 상대적으로 높음 | 비교적 쉬움 |
| 대표 활용 | 도메인 중심 설계, CRUD 위주 앱 | 복잡한 조건, 통계, 보고서 쿼리 등 |
🛠 예시
🔹 JPA 스타일
// 저장
memberRepository.save(member);
// 조회
List<Member> list = memberRepository.findByName("홍길동");
🔹 MyBatis 스타일
<select id="findByName" resultType="Member">
SELECT * FROM member WHERE name = #{name}
</select>
✅ 언제 JPA를 쓰고, 언제 MyBatis를 쓰나요?
상황 추천 기술
| 단순 CRUD 중심 | JPA |
| 도메인 중심 설계 지향 | JPA |
| SQL 직접 제어 필요 | MyBatis |
| 복잡한 Join, 통계, 보고서 쿼리 | MyBatis |
| 빠른 개발, 유지보수 중시 | JPA |
| 성능 최적화, DB 기능 활용 중요 | MyBatis |
✅ JPA와 MyBatis 동시 사용 가능?
네, 가능합니다. 실무에서도 JPA + MyBatis 혼용하는 경우가 많습니다.
예시 시나리오:
- 기본적인 CRUD, 엔티티 중심 로직: JPA
- 복잡한 SQL, 대용량 조회, 성능 튜닝이 필요한 쿼리: MyBatis
실무 예:
🧱 Member, Board, Comment → JPA로 CRUD 처리
📊 통계, 월별 리포트, 복잡한 Join → MyBatis에서 처리
📌 참고: Spring Boot에서 JPA와 MyBatis를 동시에 설정해도 충돌 없이 사용 가능하며, 각각의 Repository/Mapper로 나눠 관리합니다.
✅ 결론
요약 설명
| 둘은 목적과 철학이 다름 | JPA는 객체 중심, MyBatis는 SQL 중심 |
| 프로젝트에 따라 적절히 선택 | 단순 CRUD는 JPA, 복잡 쿼리는 MyBatis |
| 함께 사용 가능 | 서로 보완적으로 사용하면 유리함 |
'탐구하기' 카테고리의 다른 글
| 인터셉터(Interceptor)와 필터(Filter) (1) | 2025.07.02 |
|---|---|
| @Controller와 @RestController의 차이점 (0) | 2025.07.01 |
| JPA란 무엇일까? (0) | 2025.07.01 |
| MyBatis란 무엇일까? (0) | 2025.06.30 |
| SpringBoot와 Spring, 이 둘의 차이점은 무엇일까? (1) | 2025.06.16 |