일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- properties
- configmap
- jpa
- spring boot
- diskpressure
- Heap
- OOM
- java
- JVM
- 오블완
- Probe
- readiness probe
- evicted
- liveness probe
- Java Virtual Machine
- Kubernetes
- pod
- application properties
- Xmx
- logback
- 티스토리챌린지
- xms
- ORM
- k8s
- property
- startup probe
- Today
- Total
여우발개발
2장. JPA 시작 본문
2장은 본격적으로 JPA 탐구를 시작하기 전 환경 설정과 간단히 돌아가는 어플리케이션을 만들 수 있도록 구성되어 있다.
나는 시작부터 spring-boot에서 jpa를 시작해서 추가적으로 셋팅하는 법을 같이 기입했다.
2.1 이클립스 설치와 프로젝트 불러오기
intellij 유저라 pass
2.2 H2 데이터베이스 설치
책에서는 H2 DB가 설치도 필요없고 가벼워서 추천했지만…
다운로드도 해야하고 실제 DB는 H2가 아닌 mysql이나 기타 등등을 사용할 것이기에
요새는 local 환경에 docker만 잘 셋팅되어 있다면 mysql 띄우기는 쉬워보여서 그쪽으로 진행했다. → 보러가기 : https://devfoxbox.tistory.com/8
2.3 라이브러리와 프로젝트 구조
책에서는 maven을 사용하도록 알려준다. 요새는 gradle을 썼는데 maven 안쓴지 오래됐다.
gradle이나 maven이나 xml인지 Groovy인지 차이라 크게 차이 없이 셋팅했다.
책에서는 spring-boot를 사용하지 않아서 hibernate 라이브러리를 직접 받았지만 나는 spring-boot를 사용하기 때문에 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 를 추가해주었다.
// build.gradle
dependencies {
// spring
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// db
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.mysql:mysql-connector-j'
// lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
// test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
2.4 객체 매핑 시작
책에는 javax 패키지를 사용하고 있는데, java 9 이상부터는 jakarta로 변경해야 한다.
와 이거 확인해보면서 알았는데 JPA는 이제 더이상 Java Persistence API가 아니다!
Jakarta Persistence API야…!
https://mvnrepository.com/artifact/jakarta.persistence/jakarta.persistence-api
- JPA가 제공하는 매핑 어노테이션
- @Entity
- 어노테이션이 사용된 class를 JPA가 Entity class로써 인식할 수 있게 함
- @Table
- Entity class에 매핑할 table 정보 제공
- @Id
- Entity class의 필드에 table의 Primary Key를 매핑
- @Column
- class의 필드에 table의 column을 매핑
- 생략 시 필드명을 사용해서 컬럼명으로 매핑함
- 주의! 대소문자를 구분하는 DB라면 @Column(”{대소문자 정확한 컬럼명}”)으로 명시적으로 매핑해야함.
- @Entity
위의 어노테이션은 아주 간단하게만 사용할 수 있는 어노테이션들이고, 심화버전은 4장에서 알려준다.
2.5 persistence.xml 설정
spring boot 사용 시 자동 설정 및 설정파일에서 설정할 수 있다.
(해당 내용은 책에 나와있지 않다)
- JDBC 드라이버 설정 : spring.datasource.driver-class-namerce.password
- DB 접속 url : spring.datasource.url
- DB 접속 id : spring.datasource.username
- DB 접속 password : spring.datasou
- DB 방언(Dialect) : spring.jpa.properties.hibernate.dialect
# 스프링 프로젝트 설정파일
spring:
datasource:
driver-class-name: "com.mysql.cj.jdbc.Driver"
# local
url: "jdbc:mysql://localhost:3306/nchina_product"
username: "root"
password: "rootpassword"
jpa:
properties:
hibernate.dialect: "org.hibernate.dialect.MySQL8Dialect" # 사용 DB와 버전에 따라 달라짐
2.5.1 데이터베이스 방언
- JPA는 특정 DB에 종속적이지 않은 기술이다
- 하지만 실제 DB마다 제공하는 SQL 문법과 함수가 다른 경우가 있다.
- → 이를 Dialect 라고 한다.
- 대부분의 JPA 구현체들은 DB 방언을 해결하기 위해서 방언 class를 제공한다.
- 개발자는 JPA 표준 문법을 사용하면 된다
- 구현체가 알아서 방언을 처리한다.
- 참고로 DB 방언을 설정하는 방법은 JPA에 표준화 되어있지 않다.
- 버전 별, DB 별로 다르므로 사용 시에 찾아보도록 하자.
<aside> 💡
참고 - 디버깅에 유용해보이는 하이버네이트 전용 속성
spring:
jpa:
properties:
hibernate:
show_sql: true
format_sql: true
use_sql_comments: true
- spring.jpa.properties.binernate.show_sql : 하이버네이트가 실행한 SQL 출력
- spring.jpa.properties.binernate.format_sql : 하이버네이트가 실행한 SQL 출력 시 보기 쉽게 정렬
- spring.jpa.properties.binernate.use_sql_comments : 쿼리 출력 시 주석도 함께 출력 </aside>
2.6 애플리케이션 개발
책에서는 크게 3부분의 코드로 알려주고 있다.
- EntityManager 설정
- transaction 관리
- 비즈니스 로직
spring-boot-starter-data-jpa를 사용하면
- EntityManager 설정
- 1개의 Datasource를 사용할 경우 persistence-unit 자동설정
- transaction
- 보통 annotation 사용해서 관리
하지만 내부적으로 어떻게 동작하는지 좋으니 알아두도록 하자.
다른 장에서 더 자세하게 설명하기 때문에 여기서는 정리하지 않겠다.
'기술 도서 리뷰 > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
1장. JPA 소개 (0) | 2025.02.02 |
---|