JPA, MyBatis 비교

모두·2025년 3월 12일

오늘은 Java 기반 데이터 액세스 기술의 대표적인 ORM vs SQL Mapper에 대한 글을 작성해보려 한다.

JPA, MyBatis

  • Java Application에서 DB와 상호작용을 위한 프레임워크

MyBatis

  • SQL Mapper 프레임워크
  • SQL 쿼리를 XML이나 annotation 으로 정의하여 사용

MyBatis - 동적 SQL

자바코드로 처리하기 보다는 xml 코드로 처리하는게 빈번하다.

MyBatis - 트랜잭션

MyBatis 장단점

  • 장점

    • 직관적이고 명시적인 SQL 관리
    • 유연성(동적SQL)
  • 단점

    • 코드량 증가
      • 반복적인 SQL 코드, Mapper XML 등등
    • Object-Relational 불일치 문제
      • 객체 지향 설계(OOP)와 관계형 DB(RDB) 간의 불일치
    • SQL 지식 필요

JPA(Java Persistence API)

관계형 DB 를 객체지향설계를 할 수 있게 끔 class 로 만들면 되지 않을까? 해서 나오게 된 기술

  • Object Relational Mapping(ORM) 표준 API

    • Java EE(Enterprise Edition)의 표준
    • 구현체: Hibernate, EclipseLink
  • DB 테이블을 Java 객체로 Mapping 하여 OOP와 RDB 간의 간극을 줄임

  • annotation 기반 설정으로 Mapping을 정의( XML 불필요 )

  • 영속성 컨텍스트

    • 1차 캐시 역할을 하여 DB의 부하를 줄임
    • 지연 로딩(lazy loading)을 통해 필요한 시점에 데이터를 로딩하여 성능 최적화
  • JPQL(Java Persistence Query Language): Java 객체를 대상으로 쿼리를 작성

JPA(Java Persistence API)

  • 클래스만 보고도 DB 테이블이 대충 어떻게 생겼는지 예측 가능

@Entity 라는 어노테이션으로 Pserson 이라는 클래스는 DB 테이블임을 명시

JPA(Java Persistence API) - 동적 SQL

low query 를 사용하기도 하고

low query 를 안쓰면 queryDSL 을 사용해서 동적 SQL 생성 가능

JPA(Java Persistence API) - 트랜젝션

JPA(Java Persistence API) 장단점

  • 장점

    • 생산성 향상: 자동화된 CRUD, DB도 이젠 객체지향 설계!
    • 트랜잭션 관리의 자동화: @Transactional 사용
    • Entity 간의 관계를 쉽게 관리할 수 있어 1:N, N:1, N:N 관계를 지원함
    • 유연성: Java EE의 표준이므로 다양한 구현체 선택 가능
  • 단점

    • 복잡성 증가: 높은 Learning curve. SQL보다 어려운 JPA 쿼리 작성 방식
    • 성능 이슈
      • 의도하지 않는 지연 로딩으로 인해 성능이 느려질 수 있음
      • 대규모 DB 작업시에는 성능 저하가 발생
    • 완전히 해결 할 수 없는 Object-Relational 불일치 문제

0개의 댓글