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

Spring๐Ÿƒ

JPA ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ์—๋Ÿฌ ์žก๊ธฐ(1)

728x90

์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

 

1. JPA ์—ฐ๊ด€๊ด€๊ณ„ ์›๋ฆฌ

1) JPA ์ •๋ฆฌ( ORM, Hibernate, JPA )

+ https://cdaosldk.tistory.com/167

 

ORM์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ(JDBC, Querry Mapper)

์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•œ ๊ฒƒ : https://cdaosldk.tistory.com/69 1. DB ํƒ„์ƒ ํ›„ JAVA ์•ฑ๊ณผ ์—ฐ๋™์„ ์œ„ํ•ด JDBC ์ถœ์‹œ JDBC Driver Manager๋Š” ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ DB์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต JDBC Driver Manage

cdaosldk.tistory.com

JPA : ์ž๋ฐ” ์ง€์†์„ฑ(์˜์†์„ฑ) API, ์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌํžˆ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋Š”(DB) ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ

JPA ์ค‘ ๋Œ€ํ‘œ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ -> HIbernate

 

HIbernate ~ ๊ฐ์ฒด์ง€ํ–ฅ ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ

 

์˜์†์„ฑ : ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜์–ด๋„ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ, ์˜์†์„ฑ์„ ๊ฐ–์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์กด์žฌํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ ๋ฐ์ดํ„ฐ๋Š” ์†Œ๋ฉธํ•œ๋‹ค. -> ํŒŒ์ผ์ด๋‚˜ DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ์˜์†์„ฑ์„ ๋ถ€์—ฌํ•œ๋‹ค

 

*์˜์†์„ฑ์˜ 4๊ฐ€์ง€ ์ƒํƒœ : ๋น„์˜์†, ์˜์†, ์ค€์˜์†, ์‚ญ์ œ

๋น„์˜์†(new/transient) - ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ ธ์„œ ์•„์ง ์ €์žฅ๋˜์ง€ ์•Š์€ ์ƒํƒœ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ์ „ํ˜€ ๊ด€๊ณ„ ์—†์Œ

์˜์†(managed) - ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์–ด, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ

์ค€์˜์†(detached) -

์—”ํ‹ฐํ‹ฐ๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ฐ€ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ๋กœ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋” ์ด์ƒ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ

์‚ญ์ œ(removed) - ์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ญ์ œ

 

๊ฐ์ฒด์˜ ์˜์†์„ฑ ์ƒํƒœ๋Š” Entity Manager์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ „ํ™˜๋œ๋‹ค.

 

ORM : ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘ ๋„๊ตฌ

ORM ์‚ฌ์šฉ์ด์œ 

- OOP vs Relational Database

- ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํด๋ž˜์Šค, RDB๋Š” ํ…Œ์ด๋ธ”

- ORM์„ ์ด์šฉํ•ด SQL์„ ์ž๋™ ์ƒ์„ฑ, ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค

 

ORM ์žฅ์ 

- ๊ฐ์ฒด์ง€ํ–ฅ ์ ‘๊ทผ์œผ๋กœ ์ƒ์‚ฐ์„ฑ, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ์ฆ๊ฐ€

- ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ, ๋…๋ฆฝ์„ฑ ์ฆ๊ฐ€๋กœ ์œ ์ง€๋ณด์ˆ˜ ํŽธ๋ฆฌ

- DBMS์— ๋Œ€ํ•œ ์ข…์†์„ฑ ์ €ํ•˜ : DBMS๋ฅผ ๊ต์ฒดํ•ด๋„ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ๋Œ€๋ถ€๋ถ„ ๋™์ผํ•ด์„œ ORM ์‚ฌ์šฉ์— ์˜ํ–ฅ์ด ์—†๋‹ค

 

ORM ๋‹จ์ 

- ๊ตฌํ˜„์˜ ๋‚œ์ด๋„๊ฐ€ ์ฆ๊ฐ€

 

JPA๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ JDBC ์‚ฌ์ด ๋™์ž‘, JPA ๋‚ด๋ถ€์—์„œ JDBC API๋ฅผ ์‚ฌ์šฉํ•ด SQL ํ˜ธ์ถœํ•˜์—ฌ DB์™€ ํ†ต์‹  ~ EntityManager ๋“ฑ

JPA ํ”„๋กœ์„ธ์Šค

1. ์—ฐ๊ฒฐ์š”์ฒญ

2. ์—ฐ๊ฒฐ ์ธ์ฆ ํ›„, ์„ธ์…˜ ์˜คํ”ˆ

3. Connection ์œ ์ง€

4. ์ฟผ๋ฆฌ ์ „์†ก

5. Data ์ƒ์„ฑ(์ˆ˜์ •)

6. ์ƒ์„ฑ(์ˆ˜์ •)๋œ Data๋ฅผ Java ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝ

2) Spring Data JPA

Spring Data JPA๊ฐ€ JPA๋ฅผ ์ถ”์ƒํ™”ํ–ˆ๋‹ค ~ Spring Data JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Repository ์ธํ„ฐํŽ˜์ด์Šค๋กœ JPA๋ฅผ ํ™œ์šฉํ•ด ์ฟผ๋ฆฌ๋ฅผ ์งค ์ˆ˜ ์žˆ๋‹ค. = Repository๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค

 

- JPA์˜ ํ•ต์‹ฌ์€ EntityManagerFactory, EntityManager, EntityTransaction

- Hibernate์—์„œ๋Š” ๊ฐ๊ฐ SessionFactory, Session, Transaction์œผ๋กœ ์ƒ์†๋ฐ›๊ณ  ๊ฐ๊ฐ lmpl๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค

- ์‚ฌ์šฉ์ž๊ฐ€ Repository ์ธํ„ฐํŽ˜์ด์Šค์— ์ •ํ•ด์ง„ ๊ทœ์น™๋Œ€๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, Spring์ด ์•Œ์•„์„œ ๊ทธ ๋ฉ”์†Œ๋“œ์ด๋ฆ„์— ์ ํ•ฉํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋Š” ๊ตฌํ˜„์ฒด(Repository์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ)๋ฅผ Bean์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค ex) save, saveAndFlush

 

- Raw JPA) persist(), merge() -> ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋œ ์ƒํƒœ -> flush() -> DB์— ์ฟผ๋ฆฌ๊ฐ€ ์ €์žฅ๋œ ์ƒํƒœ -> commit() -> DB์— ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ˜์˜๋œ ์ƒํƒœ

vs Spring Data JPA)

save() ๋ฉ”์†Œ๋“œ : persist()๊นŒ์ง€ ์ˆ˜ํ–‰(์—…๋ฐ์ดํŠธ์ผ ๊ฒฝ์šฐ merge())

save() ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์ด ์ข…๋ฃŒ ์‹œ flush(), commit()์„ ๋ชจ๋‘ ์ˆ˜ํ–‰

 

~ DB์— ์ฟผ๋ฆฌ๊ฐ€ ์ €์žฅ๋œ ์ƒํƒœ(flush()์™€ commit() ์‚ฌ์ด)๋กœ ์ถ”๊ฐ€ ๋™์ž‘์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ SimpleRepository ๋Œ€์‹  Repository๋ฅผ ๊ฐœ๋ณ„ ๊ตฌํ˜„ํ•˜์—ฌ saveAndFlush()๋ฅผ ๊ตฌํ˜„, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ save() ๋ฉ”์†Œ๋“œ๋งŒ ์‚ฌ์šฉ

3) ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘

728x90