※ JPA (Java Persistent API)
- JPA란 자바 ORM 기술에 대한 API 표준 명세
- JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 사용하기 위해서는 JPA를 구현한
Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해야함
- 여러 ORM 전문가가 참여한 EJB 3.0 스펙 작업에서 기존 EJB ORM 이던 Entity Bean을 JPA라고 변경
1. [ ORM(Object Relation Mapping)이란? ]
ORM이란 객체(Object)와 DB의 테이블을 Mapping 시켜 RDB 테이블을 객체지향적으로 사용하게 해주는 기술이다. RDB 테이블은 객체지향적 특성(상속, 다형성,레퍼런스) 등이 없어서 Java와 같은 객체지향적 언어로 접근하는 것이 쉽지 않다. 이러한 상황에서 ORM을 사용하면 보다 객체지향적으로 RDB를 사용할 수 있다. Java에서 사용하는 대표적인 ORM으로는 JPA와 그의 구현체 Hiberante가 있다.
JPA(Java Persistent API)가 등장하기 이전에는 MyBatis라는 Object Mapping 기술을 이용하였는데, MyBatis는 Java 클래스 코드와 직접 작성한 SQL 코드를 Mapping 시켜주어야 했다. 반면 JPA와 같은 ORM 기술은 객체가 DB에 연결되기 때문에, SQL을 직접 작성하지 않고 표준 인터페이스 기반으로 처리한다는 점에서 차이가 있다. Google Trend 조사에 따르면 전 세계적으로 MyBatis보다 Hibernate를 많이 사용하는 추세이다. 하지만 우리나라에서는 아직까지도 MyBatis를 사용하는 곳이 상당히 많다.
2. [ ORM(Object Relation Mapping) 장단점 ]
2.1. 장점
1. 직관적이고 로직에 집중할 수 있음
- 객체 지향적 코드작성을 가능하게 해줌으로 인해 직관적이고 높은 가독성을 보장해줍니다. 또한 내부 로직 작성에 좀 더 집중할 수 있습니다.
2. 유지보수의 편리함
- 객체와 테이블의 매핑 관계가 명확하고 SQL쿼리를 별도로 작성하지 않고 DB를 관리할 수 있기 때문에 유지보수가 편리합니다.
3. 높은 재사용성
- 매핑시킨 객체들은 언제든지 목적에 따라 재사용 할 수 있습니다.
4. DB에 종속적이지 않음
- 단순히 구현 방법 뿐만 아니라 자료형 타입 등에도 종속적이지 않습니다.
5. 생산성
- ORM에 익숙해지는데 시간이 좀 걸릴 수 있지만 한번 익숙해진다면 SQL쿼리를 직접 작성하는 것보다 훨씬 빠른 개발속도를 보장합니다.
2.2. 단점
1. 사상누각
- 설계를 신중하게 하지 않으면 최소 성능저하에서 심하면 일관성이 무너지는 결과를 초래할 수 있습니다.
2. 규모가 커질수록 힘을 쓰기 힘듬
- 프로젝트의 규모가 커질수록 직접 SQL문을 작성하는 것 보다 구현 난이도가 상승합니다.
3. 성능
- 직접 쿼리를 생성하는 것 보단 성능이 떨어집니다.
4. 문제 대처능력 저하
- ORM에 너무 의존하게 되면 직접 쿼리를 작성해야 하는 등의 문제가 발생했을때 대처할 수 없게 됩니다.
3. [ MyBatis VS Hibernate 비교 ]
- 우리나라의 시장은 대부분이 SI 또는 금융이기 때문에 비지니스가 매우 복잡하다. 또한 안정성과 속도를 중요시하기 때문에 직접 작성하는 Mybatis을 사용하는 것이 나을 수 있다.
- 하지만 MyBatis는 쿼리를 직접 작성해야 하기 때문에 Hibernate에 능숙해진다면 생산성을 상당히 높힐 수 있다.
- JPA를 사용하면 통계나 동적 쿼리 같은 복잡한 쿼리를 처리하는 것이 어려우므로 QueryDSL을 함께 이용한다.
- MyBatis와 Hibernate 모두 각각의 특징을 갖고 있기 때문에 상황에 맞는 적합한 ORM을 사용하는 것이 중요하다.
4.
5. [ MyBatis보다 JPA를 사용해야 하는 이유 ]
이제는 MyBatis가 아닌 JPA를 이용해야 하는 시대가 왔다고 생각한다. 왜냐하면 JPA를 사용하면 MyBatis에 비해 다음과 같은 장점들을 누릴 수 있기 때문이다.
- 엔티티에 맞는 테이블 생성 + DB 생성을 편리
- 객체 지향 중심의 개발
- 테스트 작성이 용이
- 기본적인 CRUD 자동화
- 복잡한 쿼리는 QueryDSL을 사용해 처리
출처: https://mangkyu.tistory.com/20 [MangKyu's Diary]
'CS' 카테고리의 다른 글
HTTPS (0) | 2022.05.21 |
---|---|
MVC란? (0) | 2022.04.03 |
데이터베이스, SQL이란? (0) | 2022.04.03 |
JVM이란? (0) | 2022.03.20 |
객체지향 프로그래밍이란? (0) | 2022.03.20 |