[Spring] JPA와 MyBatis

다훈·2025년 3월 17일
post-thumbnail

ORM과 SQL Mapper

JPA와 MyBatis를 알기 전에, 왜 ORM과 SQL Mapper를 먼저 알아야 할까?

JPA와 MyBatis는 데이터베이스와 애플리케이션을 연결하는 대표적인 프레임워크입니다.
하지만, 이 둘의 근본적인 차이를 이해하려면 ORM과 SQL Mapper의 개념을 먼저 알아야 합니다.

ORM과 SQL Mapper는 무엇을 해결하려고 만들어졌을까?

자바 애플리케이션에서 데이터를 다루려면 객체(Object)와 관계형 데이터베이스(Table)의 불일치 문제를 해결해야 합니다.
이 문제를 해결하는 방식에는 두 가지가 있습니다.

  • ORM(Object-Relational Mapping) → JPA
  • SQL Mapper → MyBatis

ORM(Object-Relational Mapping)이란?

  • 객체와 관계형 데이터베이스를 매핑하는 기술입니다.
  • 객체지향 프로그래밍에서 데이터베이스 테이블을 객체로 매핑하여 직접적인 SQL 작성 없이 데이터를 조작할 수 있도록 합니다.
  • JPA, Hibernate 등이 대표적인 ORM 기술입니다.

ORM의 특징

  1. 자동 SQL 생성 → SQL을 직접 작성하지 않아도 데이터 저장, 조회 가능
  2. 객체 지향적 개발 → 엔티티(Entity)를 활용하여 데이터베이스와 매핑
  3. 데이터베이스 독립성 → 특정 데이터베이스에 종속되지 않음

SQL Mapper란?

  • SQL을 직접 작성하면서 객체와 데이터베이스 간 매핑을 자동화하는 기술입니다.
  • SQL을 XML 또는 애너테이션 기반으로 작성하여 데이터베이스와 객체를 연결합니다.
  • MyBatis는 대표적인 SQL Mapper 프레임워크입니다.

SQL Mapper의 특징

  1. SQL 직접 작성 → 개발자가 원하는 SQL을 사용할 수 있음
  2. 복잡한 쿼리 작성 가능 → JOIN, 서브쿼리 등도 자유롭게 제어 가능
  3. 자동 객체 매핑 → SQL 결과를 자바 객체로 자동 변환

ORM과 SQL Mapper의 차이점

SQL Mapper(MyBatis)SQL을 직접 작성하여 데이터를 제어합니다.
ORM(JPA)SQL을 자동으로 생성하여 데이터를 제어합니다.

즉, ORM과 SQL Mapper의 차이는 데이터베이스와 애플리케이션이 소통하는 방식에 있습니다.

  • SQL을 직접 관리해야 하면 SQL Mapper (MyBatis)
  • SQL을 자동으로 생성하고 싶다면 ORM (JPA)

JPA와 MyBatis

JPA(Java Persistence API)란?

  • 자바 표준 ORM 기술로, SQL을 직접 작성하지 않고도 데이터를 조작할 수 있도록 하는 프레임워크입니다.
  • 엔티티(Entity)와 테이블 간의 매핑을 자동화하여, 객체 중심의 개발을 가능하게 합니다.
  • Hibernate는 JPA의 대표적인 구현체입니다.

JPA의 특징

  1. 자동 SQL 생성
  2. 객체 중심의 데이터 조작 가능
  3. 1차 캐시, 지연 로딩(Lazy Loading) 지원

MyBatis란?

  • SQL Mapper 기반의 프레임워크로, SQL을 직접 작성하면서도 객체와 매핑을 지원하는 기술입니다.
  • XML 또는 애너테이션을 사용하여 SQL을 정의하고, 이를 자바 객체와 연결할 수 있습니다.
  • ORM이 아니며, SQL 중심의 개발 방식을 유지합니다.

MyBatis의 특징

  1. SQL을 자유롭게 작성 가능
  2. XML 또는 애너테이션을 활용한 매핑
  3. 객체와 SQL 결과를 자동 매핑

JPA와 MyBatis의 장단점

JPA의 장점

  1. SQL 자동 생성 → 코드량 감소, 유지보수 용이
  2. 객체 중심 개발 가능 → 객체 지향적인 설계 가능
  3. 1차 캐시 및 지연 로딩 지원 → 불필요한 쿼리 실행 방지

JPA의 단점

  1. 초기 설정이 복잡함 → Hibernate 설정, 영속성 컨텍스트 이해 필요
  2. SQL 직접 제어가 어려움 → 자동 생성된 SQL이 비효율적일 수도 있음
  3. Lazy Loading으로 인해 성능 이슈 발생 가능 → Fetch 전략을 신중하게 설정해야 함

MyBatis의 장점

  1. SQL을 자유롭게 조작 가능 → 복잡한 쿼리 작성이 용이
  2. 직관적인 데이터 처리 → SQL을 직접 작성하여 이해하기 쉬움
  3. 데이터베이스 튜닝이 용이 → 성능 최적화 가능

MyBatis의 단점

  1. SQL을 직접 작성해야 함 → 반복적인 SQL 코드가 많아질 수 있음
  2. 객체 지향적인 개발이 어려움 → 테이블 중심의 개발 방식
  3. JPA보다 유지보수가 어렵다 → SQL 수정 시 여러 XML 파일을 변경해야 할 수도 있음

MyBatis와 JPA의 차이점

비교 항목JPAMyBatis
개념ORM (자동 매핑)SQL Mapper (반자동 매핑)
SQL 작성자동 생성 (JPQL, Native Query 가능)개발자가 직접 작성 (XML, Annotation)
코드 복잡성SQL 자동 생성으로 코드가 간결함SQL을 직접 작성하므로 코드 양이 많음
성능초기 설정 부담 (Lazy Loading, Fetch 전략 고려 필요)SQL 최적화 가능 (튜닝이 용이)
학습 곡선학습 난이도가 높음비교적 쉬움
유지보수성엔티티 중심 개발로 유지보수 용이SQL 수정이 쉬우나 중복 코드가 많을 수 있음

JPA vs MyBatis, 언제 사용할까?

JPA가 유리한 경우

  • 객체 중심으로 설계하고 싶은 경우 (객체 지향적 개발)
  • 반복적인 SQL 작성을 줄이고 유지보수를 쉽게 하고 싶은 경우
  • 트랜잭션 및 영속성 컨텍스트를 활용한 최적화가 필요한 경우
  • 대규모 프로젝트에서 생산성을 높이고 싶은 경우

MyBatis가 유리한 경우

  • 복잡한 SQL을 직접 최적화해야 할 때
  • 다양한 데이터베이스를 사용하고 SQL 튜닝이 필요한 경우
  • 단순 CRUD가 아닌 복잡한 쿼리(Join, 서브쿼리 등)가 많은 경우
  • JPA 학습 비용을 부담하기 어려울 때

결론

  • JPASQL 자동화 및 객체 중심 개발을 지원하는 ORM 기술로, 반복적인 SQL 작성을 줄이고 유지보수를 쉽게 하고 싶은 경우 적합합니다.
  • MyBatisSQL을 직접 작성하면서도 객체 매핑을 가능하게 하는 SQL Mapper로, 복잡한 SQL이 필요한 경우 적합합니다.
  • 프로젝트의 특성, 성능 최적화 필요성, 유지보수성, 개발자의 숙련도 등을 고려하여 적절한 기술을 선택하는 것이 중요합니다.
profile
Devlog

0개의 댓글