JPA와 MyBatis의 차이점

2025. 7. 1. 02:00·탐구하기

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
'탐구하기' 카테고리의 다른 글
  • 인터셉터(Interceptor)와 필터(Filter)
  • @Controller와 @RestController의 차이점
  • JPA란 무엇일까?
  • MyBatis란 무엇일까?
ayinyun
ayinyun
ayinyun 님의 블로그 입니다.
  • ayinyun
    ayinyun 님의 블로그
    ayinyun
  • 전체
    오늘
    어제
    • 분류 전체보기 (75)
      • SQL 개발 공부 (8)
      • JAVA 개발 공부 (4)
      • JavaScript(JS) (1)
      • React (1)
      • 탐구하기 (38)
      • KPT회고록 (14)
      • SpringBoot (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ayinyun
JPA와 MyBatis의 차이점
상단으로

티스토리툴바