MyBatis vs JPA

한강섭·2025년 4월 22일
1
post-thumbnail

🛠️ MyBatis

SQL 실행 결과를 자바 빈즈 또는 Map 객체에 매핑해주는 Persistence 솔루션입니다.
SQL을 소스 코드가 아닌 XML로 분리하고, 데이터소스와 트랜잭션 처리 기능도 제공합니다.

SQL문과 프로그래밍 코드를 분리하여 구현합니다.


✅ 장점

  1. 접근이 쉽고 코드가 간결하다.
  2. SQL문과 코드가 분리되어 있어 SQL 변경 시 자바 코드 수정 불필요
  3. 다양한 프로그래밍 언어로 구현 가능 (이식성 GOOD)
  4. 동적 SQL 생성이 가능 (if, choose, when, otherwise, foreach 지원)

⚠️ 단점

  1. 스키마 변경 시 SQL 쿼리를 직접 수정해야 함
  2. 반복된 쿼리 작성으로 반복 작업 발생
  3. DB에 종속된 쿼리문 발생 가능성
  4. DB 변경 시 로직도 함께 수정 필요

💡 MyBatis 예시 코드

<insert id="registerFile" parameterType="boardDto">
    insert into file_info (article_no, save_folder, original_file, save_file)
    values
    <foreach collection="fileInfos" item="fileinfo" separator=",">
        (#{articleNo}, #{fileinfo.saveFolder}, #{fileinfo.originalFile}, #{fileinfo.saveFile})
    </foreach>
</insert>

<sql id="search">
    <if test="word != null and word != ''">
        <if test="key == 'subject'">
            and subject like concat('%', #{word}, '%')
        </if>
        <if test="key != 'subject'">
            and ${key} = #{word}
        </if>
    </if>
</sql>

📌 반복문과 조건문을 사용하여 SQL 쿼리를 동적으로 관리할 수 있습니다.


🧩 JPA (ORM)

Java ORM 기술에 대한 API 표준 명세입니다.
ORM(Object-Relational Mapping): 클래스와 RDB 테이블을 매핑하는 기술로,
Java 개발자가 객체지향 관점에서 더 쉽게 DB 연동을 할 수 있도록 도와줍니다.

객체와 데이터베이스 간의 불일치를 해소해 주는 기술입니다.


✅ 장점

  1. SQL 쿼리를 작성할 필요가 없어 코드량이 줄어든다
  2. 코드 가독성이 높고 유지보수가 편하다
  3. 간편하게 수정 가능 (리팩토링 용이)
  4. 동일 쿼리 캐싱 기능으로 성능 향상

⚠️ 단점

  1. 매핑 설계를 잘못하면 성능 저하 발생
  2. 배우고 익히는데 시간이 걸린다 (학습 곡선 존재)
  3. 다수의 테이블 조인 시 복잡성 증가

💡 JPA 예시 코드

// Repository에 추가
List<Member> findByName(String name); // SELECT * FROM member WHERE name = ?

List<Member> findByAgeGreaterThan(int age); // age > ?

List<Member> findByNameContaining(String name); // name LIKE %name%

// 정렬
List<Member> members = memberRepository.findAll(Sort.by("age").descending());

// 페이징
Page<Member> page = memberRepository.findAll(PageRequest.of(0, 10));
List<Member> memberList = page.getContent();

✍️ 메서드 이름만 잘 짓는다면 SQL을 직접 작성하지 않아도 자동으로 처리됩니다.


❓ 그럼 무엇을 써야 할까?

🔸 MyBatis: 복잡한 쿼리와 SQL 제어가 필요한 경우

🔸 JPA: 간단한 매핑, 객체지향적인 접근, DB 마이그레이션이 필요한 경우

⚖️ 혼용도 가능하므로, 프로젝트 성격과 상황에 따라 유연하게 선택하는 것이 중요합니다.


📚 참고 자료

profile
기록하고 공유하는 개발자

0개의 댓글