JPA(Java Persistence API)

์ด์ข…์ฐฌยท2023๋…„ 2์›” 20์ผ
0
post-thumbnail
post-custom-banner

JPA๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ž๋ฐ”์—์„œ ใ…‡ORM(Object-Relational Mapping)์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” JavaEE ์ŠคํŽ™ ์ž…๋‹ˆ๋‹ค.**

JPA๋Š” ORM์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ API์ด๋ฉฐ, ORM ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. JDBC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” DAO ์ž‘์„ฑ ๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.


JPA๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ ์ „

JPA ์ด์ „์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ Java ๊ฐœ์ฒด๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ๋งคํ•‘ํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋งคํ•‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

โœ… SQL์— ์˜์กด์ ์ธ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ๋ฌธ์ œ


JPA ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

JPA๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ Java ๊ฐœ์ฒด์˜ ์˜์†์„ฑ์„ ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ํ™”๋œ ์†”๋ฃจ์…˜์œผ๋กœ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ถ”์ƒํ™”ํ•˜๋Š” ์ผ๋ จ์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ์ฃผ์„์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‚ฎ์€ ์ˆ˜์ค€์˜ SQL ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  ๊ฐœ์ฒด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒ์‚ฐ์„ฑ : ๋ฐ˜๋ณต์ ์ธ CRUD SQL๋ฌธ ์ž‘์„ฑ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ, DDL๋ฌธ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์œ ์ง€๋ณด์ˆ˜ : SQL์— ์˜์กด์ ์ธ ๊ฐœ๋ฐœ์„ ํ•˜๋Š” ๊ฒฝ์šฐ SQL์˜ ๊ฒฐ๊ณผ๋ฅผ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ๋ณต์žกํ•œ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ JPA๊ฐ€ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

  • ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ : ์ƒ์†, ์—ฐ๊ด€๊ด€๊ณ„, ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰, ๋น„๊ต์™€ ๊ฐ™์€ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ์— ์žˆ์–ด ์†Œ๋ชจํ•ด์•ผํ•˜๋Š” ๋น„์šฉ์„ ํฌ๊ฒŒ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ถ”์ƒํ™”์™€ ๋ฒค๋” ๋…๋ฆฝ์„ฑ : ๊ฐ™์€ ๊ธฐ๋Šฅ๋„ ๋ฒค๋”๋งˆ๋‹ค ์‚ฌ์šฉ๋ฒ•์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ๊ฐ๊ฐ ์‚ฌ์šฉ๋ฒ•์„ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. JPA๋Š” ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์„ ์ œ๊ณตํ•˜์—ฌ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.


JPA ๊ตฌ์„ฑ์š”์†Œ

1. Entity

JPA์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋งคํ•‘๋  ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ํด๋ž˜์Šค๋Š” @Entity ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

2. EntityManager

Entity์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐ์ฒด ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

3. JPQL

JPQL(Java Persistence Query Language)๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ JPA์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฟผ๋ฆฌ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. SQL๊ณผ๋Š” ์œ ์‚ฌํ•˜์ง€๋งŒ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ฝ”๋“œ ์ž‘์„ฑ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

4. Life Cycle Callback Methods

ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” JPA ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ฝœ๋ฐฑ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ดํ›„์— ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

5. Mapping

JPA์—์„œ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์—์„œ ์™ธ๋ž˜ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ์ผ๋Œ€์ผ, ์ผ๋Œ€๋‹ค, ๋‹ค๋Œ€์ผ, ๋‹ค๋Œ€๋‹ค ๋“ฑ ๋‹ค์–‘ํ•œ ๊ด€๊ณ„๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

6. ํŠธ๋žœ์žญ์…˜

JPA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํŠธ๋ž™์žญ์…˜ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. EntityManager์—์„œ ์‹œ์ž‘ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ปค๋ฐ‹ ๋˜๋Š” ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


JPA ์‚ฌ์šฉ์‹œ ์ฃผ์˜์‚ฌํ•ญ

1. SQL ์ฟผ๋ฆฌ์˜ ์„ธ๋ถ€์ ์ธ ์ œ์–ด

JPA์˜ ์ถ”์ƒํ™”๋Š” ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์ง€๋งŒ SQL ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์„ธ๋ถ€์ ์ธ ์ œ์–ด๋Š” ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ํŠน์ • ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด JPA์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ถˆํ•„์š”ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ตœ์ ํ™”๋œ SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์—์„œ ์ข‹์Šต๋‹ˆ๋‹ค.

2. ๋””๋ฒ„๊น…

JDBC(Java Database Connectivity)์— ๋น„ํ•ด ๋” ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ ๋””๋ฒ„๊น…์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JPA์—์„œ ์ œ๊ณตํ•˜๋Š” ์ถ”์ƒํ™” ๊ณ„์ธต์€ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ž‘์—…์„ ๋ชจํ˜ธํ•˜๊ฒŒ ํ•˜์—ฌ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์—‘์„ธ์Šค์— ๊ด€ํ•œ ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค.


์ฐธ์กฐ

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ

profile
์™œ? ๋ผ๋Š” ์งˆ๋ฌธ์ด ์‚ฌ๋ผ์งˆ ๋•Œ๊นŒ์ง€
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€