티스토리 뷰
지금까지 DB를 이용해서 한 프로젝트는 총 세 번이었다. 세 번의 프로젝트를 하면서 '객체지향이 그렇게 좋다고 노래를 부르면서 왜 객체지향적인 장점을 나는 느낄 수 없는걸까? 객체는 단순히 테이블의 데이터를 전달하는 것 아닌가?'하는 생각이 들었다. ('하나의 객체 안에 멤버변수로 또 다른 객체가 있다면 데이터베이스에서는 어떻게 처리를 해줘야 하나?' 등.) 세 번의 프로젝트 중 두 번은 직접 JDBC API를 사용했고, 한 번은 myBatis를 사용했다. 좀 더 객체지향적으로 애플리케이션을 설계해보고 싶은 욕심을 느꼈고, 마침 그때 <스프링 부트와 AWS로 혼자 구현하는 웹 서비스>를 보고 나와 같은 고민을 한 개발자들이 있고(역시...!) JPA라는 ORM 프레임워크를 알게 되었다. 그래서 JPA를 공부하기 전에 내가 왜 JPA를 배우려고 하는지, SQL Mapper와 ORM은 어떤 차이가 있는지 정리해보려고 한다.
SQL Mapper(내 경우, myBatis를 사용해봤으므로 myBatis) 장점
- JDBC API를 직접 사용했을 때보다 코드가 간결해진다.
- ORM과 비교를 하자면 복잡한 쿼리를 수월하게 작성할 수 있다.
- SQL과 코드가 분리되어 SQL 관리 및 유지보수가 편하다.
SQL Mapper(내 경우, myBatis를 사용해봤으므로 myBatis) 단점
- DB변경시 수정해야 한다.
- 데이터베이스에서 변경사항 발생시 객체와 SQL을 함께 수정해야 한다.
ORM 장점
- DB 종류와 관계없이 사용할 수 있어서 DB를 변경해야할 경우 편리하다.
- 반복작업이 줄어서 생산성이 올라간다.
- 유지보수에 편리하다. (프로젝트할 때, 컬럼 하나 바뀌면 DAO랑 SQL, DTO 등등 변경해야 할 게 많아서 불편했다.)
ORM 단점- 어렵다. (매핑을 잘 해야 한다.)- SQL을 직접 작성하는 것보다 성능이 떨어질 수 있다. (계속 발전중이긴 함) - 통계쿼리와 같은 복잡한 쿼리는 힘들다. (실시간 처리용 쿼리에 더 최적화되어 있다.)
Hibernate? JPA?
JPA에 대해 찾아보면 Hibernate도 나오는데 난 이 두 개가 헷갈렸다. <자바 ORM 표준 JPA 프로그래밍>(김영한 저)를 보면, EJB의 엔티티 빈(ORM기술)이 너무 복잡하고 기술 성숙도도 떨어지는 등의 문제가 있어서 Hibernate라는 오픈소스 ORM 프레임워크가 등장했고, 결국 EJB에서 Hibernate를 기반으로 만든 새로운 ORM 기술 표준이 JPA라고 설명되어있다. (JPA의 구현체가 Hibernate)(책사서 보는 걸 추천합니다.)
ko.wikipedia.org/wiki/자바_퍼시스턴스_API
'공부흔적 > JPA' 카테고리의 다른 글
TypeORM과 JPA에서의 Soft Delete (1) | 2024.11.21 |
---|---|
JPA 간단 정리 (0) | 2023.01.03 |
Gradle 프로젝트 JPA Oracle 연결하기 (0) | 2021.04.25 |
JPA가 제공하는 데이터베이스 기본 키 생성 전략 (0) | 2021.04.07 |
영속성 컨텍스트 초기화(clear)와 종료(close), 비영속과 준영속 (0) | 2021.04.06 |