본문 바로가기
JAVA/JPA

MyBatis를 사용하다 JPA를 사용하며 느낀 차이

by 뿌비 2026. 6. 14.
728x90
이번 개인 프로젝트를 진행하면서 기존에 사용하던 MyBatis 대신 JPA를 사용하게 됐다.
JPA는 SQL을 직접 작성하기보다 Repository를 통해 데이터를 조회하고 저장하는 방식이다.
또한 반복적으로 작성하던 CRUD 작업을 줄여준다는 특징이 있다.
이전에 MyBatis를 사용해 본 경험은 있었지만 JPA는 직접 사용해 본 적이 없었다.
개인 프로젝트를 진행하면서 새로운 방식도 경험해보고 싶었고, 반복적인 CRUD 기능이 많은 구조라 JPA가 더 적합하다고 판단했다.

MyBatis를 사용했을 때

MyBatis는 SQL을 직접 작성하는 방식이다.

원하는 쿼리를 직접 작성할 수 있기 때문에 어떤 SQL이 실행되는지 명확하게 알 수 있다는 장점이 있다.

반면 단순 조회나 CRUD 기능도 직접 SQL을 작성해야 한다.

예를 들어 데이터를 조회하려면 Mapper와 XML을 각각 작성해야 했다.

List<RegionVO> selectRegionList();
<select id="selectRegionList">
    SELECT *
    FROM region
</select>

프로젝트 규모가 커질수록 Mapper와 XML도 함께 늘어나고, 비슷한 코드가 반복되는 경우도 많았다.


JPA를 선택한 이유

JPA를 선택한 가장 큰 이유는 반복적인 CRUD 작업을 줄일 수 있다는 점이었다.

JPA에서는 Repository를 만들면 기본적인 CRUD 기능을 바로 사용할 수 있다.

public interface RegionRepository
        extends JpaRepository<Region, Long> {
}

예를 들어

// 모든 데이터 조회
findAll();

// 특정 ID(PK)에 해당하는 데이터 조회
findById();

// 새로운 데이터 저장 또는 기존 데이터 수정
save();

// 특정 ID(PK)에 해당하는 데이터 삭제
deleteById();

같은 기능을 별도의 SQL 작성 없이 사용할 수 있다.

처음에는 SQL이 직접 보이지 않는다는 점이 낯설었지만, 사용해 보니 단순 CRUD 기능은 훨씬 편하게 작성할 수 있었다.


Query Method

JPA를 사용하면서 가장 신기했던 부분은 Query Method였다.

Repository 메서드 이름만으로 조회 조건을 만들 수 있었다.

// 지역명으로 조회
findByRegionName("서울");

// 지역명에 특정 문자열이 포함된 데이터 조회
findByRegionNameContaining("서울");

// ID 기준 내림차순 조회
findAllByOrderByIdDesc();

 

처음에는 메서드 이름이 길어 보였지만, 단순 조회 기능은 SQL을 직접 작성하지 않아도 된다는 점이 편하게 느껴졌다.


느낀 점

MyBatis는 SQL을 직접 작성하기 때문에 원하는 쿼리를 정확하게 제어할 수 있다는 장점이 있었다.
반면 JPA는 반복적으로 작성하던 CRUD 코드를 많이 줄여준다는 점이 편했다.
아직 복잡한 쿼리나 성능 최적화가 필요한 상황까지 경험한 것은 아니지만, 현재 진행 중인 프로젝트 규모에서는 JPA만으로도 충분히 개발이 가능했다.
처음에는 SQL이 보이지 않아 낯설었지만, 사용하다 보니 왜 많은 프로젝트에서 JPA를 사용하는지 조금은 이해할 수 있었다.
이번 프로젝트를 진행하면서 JPA를 처음 사용해 봤고, 앞으로도 사용하면서 느낀 점들을 조금씩 정리해보려고 한다.
728x90

'JAVA > JPA' 카테고리의 다른 글

JPA를 이용해 지역 데이터를 저장한 과정  (0) 2026.06.14