1. ORM, JPA, Hibernate란?
이 셋을 묶어서 설명하는 것이 가장 효율적일 것 같다.
- ORM(Object Relational Mapping) : 객체와 관계형 데이터베이스(RDB)를 매핑시켜주는 프레임워크
- JPA(Java Persistent API) : Java 진영의 ORM 기술 표준
- Hibernate : JPA를 구현한 ORM 프레임워크들 중 하나
※ JPA는 표준이기 때문에 다른 구현 기술(H2, Oracle, MySQL 등)로 손쉽게 변경할 수 있다.
2. JPA의 장단점
1) 장점
(1) 높은 생산성, 편한 유지보수
- 객체와 관계형 데이터베이스의 패러다임 불일치 문제를 해결
※ 상속관계(객체-상속, 테이블-슈퍼/서브 타입), 연관관계(객체-참조, 테이블-외래키), 객체 동일성 비교 등
- JPA가 Query 작업을 해주기 때문에, 개발자는 별도의 SQL 작성을 하지 않아도 됨
- 테이블 컬럼이 변경되어도 JPA에서 알아서 관리해주기 때문에 개발에만 집중할 수 있음
- DB 엔진을 바꿔도 간단한 설정으로 JPA가 해당 엔진의 문법(방언)으로 해석할 수 있음
- IDE의 도움으로 문법 오류를 줄일 수 있음(QueryDSL)
(2) 1차 캐시와 동일성 보장
- 영속성 컨텍스트는 엔티티를 저장하고 관리하는 곳으로, 기본적으로 트랜잭션과 동일한 생명 주기를 갖는다. 조회하려는 엔티티가 영속성 컨텍스트에 저장되어 있다면 DB를 조회하지 않고 영속성 컨텍스트에서 가져오기 때문에 성능상으로도 유리하다.
- 같은 영속성 컨텍스트에서는 식별자가 같은 엔티티 인스턴스의 동일성을 보장한다. 영속성 컨텍스트가 다르다면 식별자가 같은 엔티티여도 동일성 비교에 실패하기 때문에 동등성 비교를 해야 한다.
- DB에 반영되는 내용은 영속성 컨텍스트(1차 캐시)의 변경 내역이다.
※ 1차 캐시 : 영속성 컨텍스트에 존재하는 캐시다. 1차 캐시의 키와 값에는 각각 식별자 값과 엔티티 인스턴스가 저장된다.
※ 트랜잭션 : 두 commit 지점의 사이
https://kimcoder.tistory.com/242
(3) 쉬운 JOIN 작업
- 지연 로딩 기법과 즉시 로딩 기법을 쉽게 번갈아 사용할 수 있음
※ 지연 로딩 : 객체가 실제 사용될 때 로딩
※ 즉시 로딩 : JOIN으로 한번에 연관된 객체까지 미리 조회
- 지연 로딩을 사용하면 성능 걱정 없이 무한한 참조(객체 그래프 탐색)가 가능하다.
member.getOrder().getItem().getCategory()...
2) 단점
- 복잡한 데이터베이스에서는 사용이 더 어려울 수 있음
3. 프로젝트 생성
아래 사이트에서 Spring Project를 쉽게 생성할 수 있다.
필자는 다음과 같이 설정했다.
(dependencies)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
resources/application.properties에 h2-console 사용을 위한 속성들을 추가한다.
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
"http://localhost:8080/h2-console" 접속 후 다음과 같은 화면이 나왔을 때, [Connect]를 눌러 데이터베이스 페이지가 잘 나오면 설정이 성공적으로 적용된 것이다.
'Spring 사전 준비 > JPA Hibernate' 카테고리의 다른 글
[JPA] 고급 매핑 기술 (0) | 2022.07.28 |
---|---|
[JPA] 일대일 매핑과 다대다 매핑 (0) | 2022.07.26 |
[JPA] 단방향 매핑과 양방향 매핑 (0) | 2021.08.18 |
[JPA] EntityManager / persistence.xml (0) | 2021.08.16 |
[JPA] Entity Annotations (0) | 2021.08.16 |
댓글