๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JPA

(5)
Entity Life Cycle reference ์Šคํƒ€ํŠธ ์Šคํ”„๋ง ๋ถ€ํŠธ - ๊ตฌ๋ฉ๊ฐ€๊ฒŒ ์ฝ”๋”ฉ๋‹จ New(๋น„์˜์†) Java์˜์—ญ์— ๊ฐ์ฒด๋งŒ ์กด์žฌํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™๋œ ์ ์ด ์—†๋Š” ์ƒํƒœ. ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €์˜ ๊ด€๋ฆฌํ•˜์— ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ˆ˜ํ•œ Java ๊ฐ์ฒด Managed(์˜์†) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ๋„ ๊ฐ™์€ ์ƒํƒœ๋กœ ์กด์žฌํ•˜๋Š” ์ƒํƒœ. ๊ฐ์ฒด๋Š” ์˜์† ์ปจํ…์ŠคํŠธ ๋‚ด์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ , id(PK)๊ฐ’์„ ํ†ตํ•ด์„œ ํ•„์š”ํ•œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๊บผ๋‚ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Removed(์‚ญ์ œ) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ƒ์—์„œ ์‚ญ์ œ๋œ ์ƒํƒœ. ๊ฐ์ฒด๋Š” ๋” ์ด์ƒ ์˜์† ์ปจํ…์ŠคํŠธ์— ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Detached(์ค€์˜์†) ์˜์† ์ปจํ…์ŠคํŠธ์—์„œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ƒํƒœ. ์ค€์˜์† ์ƒํƒœ์˜ ๊ฐ์ฒด๋Š” ๊ณ ์œ ํ•œ id(PK)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ์•„์ง ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋™๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€..
Entity, Entity Manager reference ์Šคํƒ€ํŠธ ์Šคํ”„๋ง ๋ถ€ํŠธ - ๊ตฌ๋ฉ๊ฐ€๊ฒŒ ์ฝ”๋”ฉ๋‹จ Entity Entity ์šฉ์–ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€์ƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ‘์ƒํ’ˆ’, ‘ํšŒ์‚ฌ’, ’์ง์›’ ๋“ฑ๊ณผ ๊ฐ™์ด ๋ช…์‚ฌ์ด๋ฉด์„œ ์—…๋ฌด์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์—”ํ‹ฐํ‹ฐ๋กœ ๊ทœ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์œ„ํ•ด์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์„ค๊ณ„ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ๋Š” ‘์ธ์Šคํ„ด์Šค’ ํ˜น์€ ‘๋ ˆ์ฝ”๋“œ’๋ผ๋Š” ์šฉ์–ด๋กœ ๋ถˆ๋ฆฐ๋‹ค. Entity Manager ์—ฌ๋Ÿฌ Entity๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด ์ž์‹ ์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋“ค์„ ‘์˜์† ์ปจํ…์ŠคํŠธ(persistence context)’๋‚ด์— ๋ณด๊ด€ํ•˜๊ณ  ๊ฐ์ฒด์˜ life cycle์„ ๊ด€๋ฆฌํ•œ๋‹ค.
Data source ์„ค์ •, JPA ๊ด€๋ จ ์„ค์ • reference ์Šคํƒ€ํŠธ ์Šคํ”„๋ง ๋ถ€ํŠธ - ๊ตฌ๋ฉ๊ฐ€๊ฒŒ ์ฝ”๋”ฉ๋‹จ ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ฐœ๋…๊ณผ ํ™œ์šฉ - ๋ฐฑ๊ธฐ์„  application.properties ๋˜๋Š” application.yml ํŒŒ์ผ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. DataSource ์„ค์ •ํ•˜๊ธฐ JPA๋‚˜ MySQL๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด Spring Boot๋Š” ์ž๋™์œผ๋กœ ์„ค์ •์„ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ DataSource ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/__dbname__?useSSL=false&serverTimezone=Asia/Seoul spring.datasource.user..
JPA Annotation reference ์Šคํƒ€ํŠธ ์Šคํ”„๋ง ๋ถ€ํŠธ - ๊ตฌ๋ฉ๊ฐ€๊ฒŒ ์ฝ”๋”ฉ๋‹จ www.datanucleus.org/products/accessplatform/jpa/annotations.html code ๊ธฐ๋ณธ์ ์œผ๋กœ lombok ์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. import ๋ฌธ๋„ ๊ฐ™์ด ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ฒจ๋ถ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. package org.zerock.domain; import java.sql.Timestamp; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import org.h..
JPA reference ์Šคํƒ€ํŠธ ์Šคํ”„๋ง ๋ถ€ํŠธ - ๊ตฌ๋ฉ๊ฐ€๊ฒŒ ์ฝ”๋”ฉ๋‹จ ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ฐœ๋…๊ณผ ํ™œ์šฉ - ๋ฐฑ๊ธฐ์„ ๋‹˜ JPA ์†Œ๊ฐœ ๊ฐ์ฒด์˜ ๊ตฌ์กฐ์™€ ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๊ฐ€ ์œ ์‚ฌํ•˜๋‹ค๋Š” ๊ฒƒ์—์„œ ์‹œ์ž‘ JDBC๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—…์— ํ•˜๋‚˜์˜ ์ถ”์ƒํ™”๋œ ๊ณ„์ธต ์ถ”๊ฐ€ ORM, JPA, Spring Data JPA์˜ ๊ด€๊ณ„ ORM(Object Relational Mapping) ๊ฐ€์žฅ ์ƒ์œ„ ๊ฐœ๋…์— ํ•ด๋‹นํ•œ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ RDBMS๊ตฌ์กฐ์— ์—ฐ๊ฒฐ์‹œ์ผœ ๊ฐœ๋ฐœํ•˜์ž๋Š” ์‚ฌ์ƒ์„ ๋‚ดํฌํ•˜๊ณ  ์žˆ๋‹ค. JPA(Java Persistence API) ORM์„ ์œ„ํ•œ ์ž๋ฐ” (EE) ํ‘œ์ค€์ด๋‹ค. Java์–ธ์–ด๋ฅผ ์ด์šฉํ•ด์„œ ORM์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ง€์ผœ์•ผ ํ•˜๋Š” ์ŠคํŽ™์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. Hibernate JPA์˜ ๊ตฌํ˜„์ฒด๋“ค ์ค‘์—์„œ ํ•˜๋‚˜์˜ ์ œํ’ˆ์ด๊ณ  spring boot์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ Hibe..