JPA ์ฑ…

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฑ…์„ ๊ตฌ๋งคํ•ด์„œ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ณณ

JPA๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ์ด๋ฒˆ์— ๊ตฌ๋งคํ•ด์„œ ๊ณต๋ถ€์ค‘

์ฑ…์„ ์ •๋…ํ•˜๋ฉฐ ๊ธฐ๋ก์„ ํ†ตํ•ด์„œ ํ•œ ๋ฒˆ ๋” ๋˜์ƒˆ๊ธฐ๊ณ  ์–ธ์ œ๋“  ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ก..!

๋ชจ๋“  ์ถœ์ฒ˜๋Š” ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฑ…๊ณผ ๋ณธ์ธ ๋‡Œ

Day1 - JPA์˜ ์†Œ๊ฐœ

ORM์ด๋ž€?

ORM : Object Relational Mapping์˜ ์ค„์ธ๋ง๋กœ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์˜ ์ฐจ์ด์ ์„ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ

JPA : Java Persistence API๋กœ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ž๋ฐ” ์ง„์˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ORM ํ‘œ์ค€ ๊ธฐ์ˆ 

JPA๋Š” ๋ฐ˜๋ณต์ ์ธ CRUD SQL์„ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ  ๊ฐ์ฒด ๋ชจ๋ธ๋ง๊ณผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์˜ ์ฐจ์ด์ ๋„ ํ•ด๊ฒฐํ•ด์ค€๋‹ค.

JPA๋Š” ์‹คํ–‰ํ•˜๋Š” ์‹œ์ ์— SQL์„ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค.

์ž๋ฐ”๋กœ ๋งŒ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ JDBC(์ž๋ฐ”์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ž๋ฐ” API)๋ฅผ ์‚ฌ์šฉํ•ด์„œ SQL์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์„ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

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

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ ˆ๋ฒจ์—์„œ db๋ฅผ ์กฐํšŒํ•˜๊ณ  ์ด์–ด์ ธ ๋‚˜์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค.

JPA์˜ ์‚ฌ์šฉ ํ๋ฆ„

ORM ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•ด์„œ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๊ฐœ๋ฐœ์ž ๋Œ€์‹  ํ•ด๊ฒฐํ•ด์ค€๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ ์ž…์žฅ์—์„œ๋Š” ๊ฐ์ฒด ์ธก๋ฉด์—์„œ ๋”์šฑ ์ •๊ตํ•œ ๊ฐ์ฒด ๋ชจ๋ธ๋ง์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๋„๋ก ๋ชจ๋ธ๋งํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด 2๊ฐœ๋ฅผ ๋งคํ•‘ํ•ด์•ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ์„ ๋ช…์‹œํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ORM ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ๊ฐ€์žฅ ๋งŽ์ด ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๊ฑด Hibernate ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

JPA๋ž€?

์ž๋ฐ” ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ API ํ‘œ์ค€ ๋ช…์„ธ

= ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ชจ์•„๋‘” ๊ฒƒ

๋”ฐ๋ผ์„œ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JPA๋ฅผ ๊ตฌํ˜„ํ•œ ORM ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•ด์•ผํ•˜๊ณ  ๊ฒฐ๊ตญ์€ JPA๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ตฌํ˜„์ฒด์˜ ๋Œ€ํ‘œ๋กœ๋Š” Hibernate๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ jpa์—์„œ๋Š” genericDao๋ผ๋Š” ์ปค์Šคํ…€ ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค. ์ด๊ฒƒ์€ ๋ฉ”์†Œ๋“œ์˜ ๋ช…์นญ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์™œ ์ด๊ฑธ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

  1. ์ƒ์‚ฐ์„ฑ : JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด์— ์ž๋ฐ”์—์„œ ์‚ฌ์šฉํ•˜๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ์–ด๋ ต์ง€ ์•Š๊ฒŒ db์— ์ ‘๊ทผํ•˜๋ฉฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต์ ์ธ crud์™€ ๊ฐ™์€ sql์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์Œ ๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„๋ฅผ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง

  2. ์œ ์ง€๋ณด์ˆ˜ : ์—”ํ‹ฐํ‹ฐ์— ํ•„๋“œ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์•˜์„๋•Œ ๊ณผ๊ฑฐ์—๋Š” ์ด์— ๊ด€๋ จ๋œ crud์™€ ๊ฐ™์€ JDBC API๋ฅผ ๋ชจ๋‘ ์ˆ˜์ •ํ•ด์ค˜์•ผํ–ˆ์ง€๋งŒ ์ด์ œ๋Š” ๊ทธ๋Ÿฐ JDBC API์ฝ”๋“œ๋ฅผ JPA๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง

  3. ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ

  4. ์„ฑ๋Šฅ : JPA๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ db์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ ์ธ ๋ฉด์—์„œ ์ตœ์ ํ™”๋ฅผ ์‹œ๋„ํ•ด๋ณผ๋งŒ ํ•˜๋‹ค.

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

JPA๋ผ๋Š” ํ‘œ์ค€ ๋•๋ถ„์— ํŠน์ • ๊ตฌํ˜„ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์˜์กด๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ๊ตฌํ˜„ ๊ธฐ์ˆ ๋กœ ์†์‰ฝ๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Œ.

Last updated

Was this helpful?