반응형
JPA란?
- ORM
- JPA에 대해 알아보기 전에 먼저 ORM에 대해 알아보아야 한다.
- ORM(Object-Realational Mapping)은 객체 - 관계형DB간 매핑을 의미한다. 즉, 우리가 자바 코드로 작성하는 객체와 실제 데이터베이스에서 사용되는 테이블을 매핑한다는 의미이다.
- 후술하겠지만, ORM 기술을 사용하는 이유는 객체 모델과 데이터베이스 모델 간의 패러다임 불일치를 해결하기 위함이다.
- 기존에는 패러다임 불일치를 해결하기 위해 개발자가 직접 모든 SQL을 작성하는 수고가 필요했지만, ORM 기술을 사용하면 이러한 비용을 줄일 수 있다.
- JPA
- JPA는 자바 진영의 ORM 기술에 대한 API 표준 명세다. 다시 말해, ORM기술을 사용하기 위한 인터페이스를 모아둔 것이다.
- 즉, JPA를 사용하기 위해서는 JPA를 구현한 ORM 프레임워크를 사용한다. (현재 가장 많이 사용되는 ORM 프레임워크는 하이버네이트이다. 왜 하이버네이트가 가장 많이 사용되는지에 대한 이야기는 추후 다뤄볼 예정이다.)
- 우리가 살펴볼 JPA 프로그래밍 도서 역시 하이버네이트를 사용할 예정이다.
- 왜 JPA를 사용해야하는가?
- 생산성이 높아진다.
- JPA를 사용하지 않으면, 모든 개발을 SQL에 의존적으로 진행해야 한다. 다시 말해, DB를 사용하는 모든 과정은 직접 SQL을 작성해야하고 객체 모델링이 수정되면 작성한 SQL역시 수정해야한다.
- 예를 들어, 필드멤버 2개를 가진 객체를 사용하던 중 필드멤버가 한 개 더 추가된다면, 등록 / 수정 / 조회의 SQL구문 역시 수정해야 하는 것이다.
- 또한 연관된 객체를 조회하는 것 역시 어렵다. 연관된 객체의 테이블을 조회하고자 하는 테이블과 조인하는 SQL 구문을 새롭게 작성해야한다. 문제는, 이 과정에서 연관된 객체를 조회하는 경우와 그렇지 않은 경우를 나눠 메서드를 작성해야한다는 것이다. 특정 메서드를 사용하고 싶으면 DAO를 직접 찾아보며 원하는 기능을 수행하는 메서드가 있는지 확인해야한다.
- 그러나 JPA를 사용하면 이러한 일련의 과정을 JPA가 대신 해준다. 즉, 개발자가 직접 SQL작성하던 수고에서 벗어나 개발에 더욱 집중할 수 있으며, 데이터베이스에 종속된 개발이 아닌 객체가 중심이 되는 객체지향적 개발이 가능해진다.
- 유지보수가 간편해진다.
- 위의 이유와 마찬가지로, JPA를 사용하면 일일이 모든 코드를 수정할 필요가 없어진다. 다시 말해, 유지보수해야할 코드가 줄어든다는 것이다.
- 패러다임의 불일치를 해결해준다.
- 관계형 DB와 객체는 각자가 지향하는 방향점이 다르다. 관계형 DB는 각 데이터 하나 하나를 저장하는 것에 주안점을 두고있지만, 객체는 객체간의 관계, 객체 정보의 은닉 등에 주안점을 두고 있다. 이에 따라, 둘 간의 기능과 표현 방법이 달라진다. 이를 패러다임의 불일치라 한다.
- 가장 대표적인 예시로는 서로 다른 정보 간의 연관관계가 있다. 객체는 참조관계를 통해 연관관계를 표현하지만, DB는 FK를 사용해 이를 표현한다. 이외에도 상속, 객체 그래프 탐색에서 관계형 DB와 객체 간의 차이가 발생한다.
- JPA는 이러한 패러다임의 불일치를 해결해준다. 기존에는 개발자가 직접 패러다임 불일치가 발생할 수 있는 작업을 중간에 처리했다면, JPA를 사용하면 이러한 과정을 줄이고 이를 해결하기 위해 고민하는 시간도 줄일 수 있다.
- 성능이 개선된다.
- JDBC API를 직접 사용하는 방법은 하나의 데이터 엔티티를 여러 번 조회하면 여러 번의 SELECT문을 수행하지만, JPA는 이미 조회한 객체를 재활용한다.
- 재사용의 비밀은 영속성 컨텍스트와 관련있다. 이는 3장에서 자세히 다룬다.
- JDBC API를 직접 사용하는 방법은 하나의 데이터 엔티티를 여러 번 조회하면 여러 번의 SELECT문을 수행하지만, JPA는 이미 조회한 객체를 재활용한다.
- 데이터 접근의 추상화가 가능해진다.
- 같은 기능이라도 어느 DB를 사용하느냐에 따라 사용법이 다를 수 있다. 따라서 데이터베이스 종속적인 개발은 기존에 사용하던 DB를 다른 DB로 바꾸는데 어려움을 겪게 만든다.
- JPA를 사용하면, JPA에게 어느 DB를 사용하는지만 알려주면 해당 DB에 맞는 사용법을 JPA가 사용한다. 로컬에서는 H2 DB와 같은 InMemory DB를 사용해 일회성을 띄게 만들고, 배포환경에서는 MySQL을 사용해 데이터가 영속적으로 저장되게 할 때, JPA를 사용하면 하나의 코드로 두 DB를 모두 사용할 수 있다. JPA가 어느 DB를 사용한다고만 알고있다면 말이다.
반응형
'Programming > JPA 프로그래밍' 카테고리의 다른 글
07. 고급 매핑 (0) | 2023.11.13 |
---|---|
06. 다양한 연관관계 매핑 (1) | 2023.11.06 |
05. 연관관계 매핑 기초 (0) | 2023.10.12 |
03. 영속성 관리 (0) | 2023.08.18 |
0장. 들어가며 (0) | 2023.08.07 |
댓글