1. JPA (Java Persistence API)
Java ORM 기술에 대한 API 표준 명세로 JPA만 가지고는 해당 기술을 적용할 수 없으며
Hibernate, Spring Data JPA 등 대표적인 오픈 소스를 사용해야 합니다.
객체 관계 매핑, 객체와 RDB를 별개로 설계하고 ORM이 중간에서 매핑해주는 역할
즉, ORM은 SQL문이 아닌 RDB에 데이터 그 자체와 매핑하기 때문에 SQL을 직접 작성할 필요가 없다.
해당 객체와의 매핑에 필요한 SQL문을 알아서 만들어준다.
장점
1) 데이터베이스에 종속되지 않아 추후 데이터베이스 변경이나 코드 재활용이 가능하다.
2) 테이블 생성, 변경 등 엔티티 관리가 간편하다.
3) 컴파일 시, 오류를 확인할 수 있다.
4) 코드 레벨로 관리되므로 사용하기 용이하고 생산성이 높다.
단점
1) 복잡한 연산을 수행하기에는 다소 무리가 있다.
: 초기에는 생산성이 높을 수 있으나, 운영 시 성능상 이슈가 발생할 수 있음
2) 시스템이 고도화 될수록 학습 곡선이 높아질 수 있다.
2. MyBatis (Java Persistence Framework)
MyBatis는 SQL Builder 또는 SQL Mapper의 한 종류로 SQL, 저장 프로시저 매핑을 지원하는 Framework입니다.
즉 SQL문을 이용하여 데이터베이스에 접근, 데이터를 오브젝트(객체)화 시켜주며 record에 원시 타입과 Map 인터페이스,
그리고 자바 POJO를 설정해서 매핑하기 위해 xml과 Annotation을 사용할 수 있습니다.
장점
1) SQL 쿼리를 직접 작성하므로 쉽게 최적화된 쿼리를 구현할 수 있다.
: 복잡한 SELECT를 하기 위한 Join, 튜닝 등을 쉽게 적용 가능
2) 엔티티에 종속받지 않고 다양한 테이블을 조합할 수 있다.
3) 동적 쿼리 사용 시 JPA보다 간편하게 구현 가능하다.
단점
1) 스키마 변경 시 관련된 SQL 쿼리를 직접 수정해주어야 한다.
2) 런타임 시, 오류를 확인할 수 있다.
3) 쿼리를 작성하기 때문에 특정 데이터베이스에 종속적이다.
3. 결론
시스템 구현 시 프로젝트 규모가 작다면 둘 중 하나를 사용해도 무방하지만 프로젝트 규모가 크다면 JPA와 Mybatis를
둘 다 사용해야 안정적인 서비스를 제공할 수 있습니다.
: (INSERT, UPDATE, DELETE ) SpringData JPA 사용
: (SELECT) MyBatis 사용
레퍼런스
- https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html
- http://mybatis.org/spring/index.html
- https://medium.com/an-idea/spring-boot-spring-data-jpa-vs-mybatis-514d969648ee
최근댓글