-
*[TIL] JPA , Spring Data JPACodeStates_Backend/TIL (Today I Learned) 2022. 7. 24. 11:58
1. JPA (Java Persistence API , Jakarta Persistence API)
* Java 진영 ORM 표준 기술 스펙.
* '스펙'이므로 인터페이스로 스펙이 정의 되어있을 뿐임. 이를 구현한 여러 구현체들을 이용하게 됨.
* 대표적인 구현체로 Hibernate ORM, EclipseLink, DataNucleus 등이 있는데 Hibernate 이 가장 많이 쓰이고 우리가 배울 것임.
* Hibernate ORM도 사실 내부적으로는 JDBC API를 사용하고 있음.
* 아래 그림은 JPA의 위치이다.
JPA 위치 2. 영속성 컨텍스트 (Persistence Context)
* Persistence 라는 단어가 들어간 이유는, 영속성 컨텍스트를 사용하기 때문임.
* ORM 답게, 테이블과 매핑되는 엔티티 객체 정보를 영속성 컨텍스트에 보관하여 애플리케이션 내에 오래 보관하고 이를 이용해 테이블에 접근함.
* 아래 그림은 영속성 컨텍스트의 구조이다.
3. JPA API 설정
* 의존 라이브러리(build.gradle)
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // (1) compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' }
* property(application.yml)
spring: h2: console: enabled: true path: /h2 datasource: url: jdbc:h2:mem:test jpa: hibernate: ddl-auto: create # (1) 스키마 자동 생성 show-sql: true # (2) SQL 쿼리 출력
-> ddl-auto 속성 관련 추가 내용
더보기ddl-auto 옵션 종류
- create: 기존테이블 삭제 후 다시 생성 (DROP + CREATE)
- create-drop: create와 같으나 종료시점에 테이블 DROP
- update: 변경분만 반영(운영DB에서는 사용하면 안됨)
- validate: 엔티티와 테이블이 정상 매핑되었는지만 확인
- none: 사용하지 않음(사실상 없는 값이지만 관례상 none이라고 한다.)
주의할 점
- 운영 장비에서는 절대 crate, create-drop, update 사용하면 안된다.
- 개발 초기 단계는 create 또는 update
- 테스트 서버는 update 또는 validate
- 스테이징과 운영 서버는 validate 또는 none
하지만 로컬 환경을 제외한 나머지 서버에서는 최대한 직접 쿼리를 날려서 적용하는 것이 가장 좋다.
'CodeStates_Backend > TIL (Today I Learned)' 카테고리의 다른 글
[모의기술면접] Section4 (0) 2022.08.18 [TIL]메소드 참조; method reference (0) 2022.07.21 [TIL][모의기술면접#3] (0) 2022.07.20 [TIL]삽입 정렬 Insertion Sort (0) 2022.07.18 [TIL] Spring Rest Docs (0) 2022.07.16