Persistence Framework
- JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장합니다.
- Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있습니다.
- JPA, Hibernate, Mybatis 등
SQL Mapper 와 ORM
Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있다고 하였습니다. 대표적인 예로 SQL Mapper 는 Mybatis, ORM 은 JPA 가 있습니다.
- ORM은 Object-relational mapping(객체 관계 매핑) 의 약자로 객체는 객체대로, RDB는 RDB대로 설계하여 데이터베이스 객체를 자바 객체로 매핑함으로써 객체간의 관계를 바탕으로 SQL을 자동으로 생성해줍니다.
- SQL Mapper는 ORM과 달리 SQL을 직접 작성하여 명시해주어야 합니다.
MyBatis 란 ?
MyBatis란 SQL Mapper를 사용하는 Persistence Framework 입니다. 개발자가 작성한 SQL 명령어와 자바 객체를 매핑해주는 기능을 제공하고, 기존에 사용하던 SQL 명령어를 재사용하여 코드의 중복과 무의미한 코드 작성을 생략할 수 있게합니다. 또한, SQL 문을 xml 파일에 작성하여 관리하기 쉽고, 변환이 자유롭고 가독성이 좋습니다.
MyBatis의 장점
- 간단하고 편리한 Persistence Framework으로 배우기가 쉽다.
- SQL 쿼리를 직접 작성하므로 최적화된 쿼리를 구현할 수 있습니다.
- 엔티티에 종속받지 않고 다양한 테이블을 조합할 수 있습니다.
- 복잡한 쿼리도 SQL 쿼리만 작성할 수 있다면 쉽게 해결 가능합니다.
MyBatis의 단점
- 스키마 변경시 SQL 쿼리를 직접 수정해주어야 합니다.
- 반복된 쿼리를 작성한다면 반복작업 발생합니다.
- 런타임시 오류를 확인할 수 있습니다.
- 쿼리를 직접 작성하기에 데이터베이스에 종속된 쿼리문이 발생할 수 있습니다.
- 데이터베이스 변경시 로직도 함께 수정되어야 합니다.
- 특정 DB에 종속적입니다.
JPA (Java Persistence API) 란 ?
JPA란 Java Persistence API의 약자로 Java ORM 기술에 대한 API 표준 명세입니다. JPA 는 명세이기 때문에 JPA 만으로는 어떤 구현 기술을 사용할 순 없습니다. Spring Data JPA는 JPA를 간편하게 사용하도록 만들어놓은 오픈 소스이고, 이를 구현한 구현체가 존재하는데 이 중 하나가 Hibernate 입니다.
🔍 ORM 이란
Object-relational mapping(객체 관계 매핑) 의 약자로 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계하고, ORM 프레임워크가 중간에서 매핑해주는 역할을 하여 SQL을 직접 작성할 필요가 없습니다. 대중적인 언어에는 대부분 ORM 기술이 존재한다고 합니다.
JPA 의 장점
- SQL 중심적인 개발에서 객체 중심으로 개발할 수 있습니다.
- 1차캐시, 쓰기지연, 변경감지, 지연로딩을 제공하여 성능상 이점을 얻을 수 있습니다.
- 코드 레벨로 관리 되므로 사용하기 용이하고 생산성이 높습니다.
- 컴파일 타임에 오류를 확인할 수 있습니다.
- 데이터베이스에 종속적이지 않으므로 특정 쿼리를 사용하지 않아 추상적으로 기술 구현이 가능합니다.
- 엔티티로 관리되므로 스키마 변경시 엔티티만 수정하게 되면 엔티티를 사용하는 관련 쿼리는 자동으로 변경된 내역이 반영됩니다. - 유지보수에 용이
- 개발 초기에는 쿼리에 대한 이해가 부족해도 코드 레벨로 어느 정도 커버가 가능합니다.
- 객체지향적으로 데이터를 관리할 수 있습니다.
- 부족한 부분은 다양한 쿼리 빌더와 호환하여 보안할 수 있습니다.
JPA 의 단점
- JPA 만 사용하여 복잡한 연산을 수행하기엔 어렵습니다.
- 단방향, 양방향, 연관관계 이해가 없다면 JPA를 적용시키기 어렵습니다.
- 초기에는 생산성이 높을 수 있으나 점차 사용하다 보면 성능상 이슈가 발생할 수 있습니.(N+1, FetchType, Proxy, 연관관계)
- 고도화 될수록 학습 곡선이 높아집니다.
참고
- https://incheol-jung.gitbook.io/docs/q-and-a/spring/jpa-vs-mybatis
- 인프런 <자바 ORM 표준 JPA 프로그래밍 - 기본편>
'Language > Java' 카테고리의 다른 글
[JPA] JPA의 영속성 컨텍스트란? (0) | 2022.06.25 |
---|---|
[Java] Java GC 쉽게 이해하기 (0) | 2021.10.15 |
객체 지향 설계의 5대 원칙 (SOLID) (0) | 2021.09.27 |
[Java] 자바가 확장한 객체 지향 (2) (0) | 2021.09.27 |
[Java] 자바가 확장한 객체 지향 (1) (0) | 2021.09.27 |
댓글