Home > Spring > ๐Ÿƒ[Spring] JPA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ .

๐Ÿƒ[Spring] JPA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ .
Spring Framework

๐Ÿƒ[Spring] JPA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ .

  • JPA(Java Persistence API) ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‰ฝ๊ฒŒ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค.
  • JPA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜์กด์ ์ธ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹ , ๊ฐ์ฒด ๋ชจ๋“ค์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๐Ÿ™‹โ€โ™‚๏ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ์˜ ๋ชจ๋“ˆ
๐Ÿ™‹โ€โ™‚๏ธ ๋ชจ๋“ˆ๊ณผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ ˆ๊ณ  ๋ธ”๋ก์— ๋น„์œ ํ•ด๋ณด๋ฉด?!

1๏ธโƒฃ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ์ด์œ .

1. ๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘(ORM, Object-Relational Mapping) ์ง€์›.

  • JPA๋Š” ORM(Object-Relational Mapping) ํ‘œ์ค€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ORM์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋ณ€ํ™˜์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ–‰(row)์„ ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜๊ณ , ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—ด(column)๊ณผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” SQL ์ฟผ๋ฆฌ ์ž‘์„ฑ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ , ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…๋ฆฝ์„ฑ.

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

๐Ÿ™‹โ€โ™‚๏ธ DIP์˜ ์ •์˜์—์„œ ๋งํ•˜๋Š” โ€˜์ถ”์ƒํ™”๋œ ๊ฒƒโ€™๊ณผ โ€˜์ถ”์ƒํ™”โ€™์˜ ๊ฐœ๋…์˜ ์ฐจ์ด์ .

3. SQL ์ž‘์„ฑ ๋ถ€๋‹ด ๊ฐ์†Œ.

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

4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ.

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

5. ์บ์‹ฑ ์ง€์›.

  • JPA๋Š” 1์ฐจ ์บ์‹œ์™€ 2์ฐจ ์บ์‹œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 1์ฐจ ์บ์‹œ๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ(Entity Manager)๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์บ์‹œ๋กœ, ๋™์ผํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์ด๋ฏธ ์กฐํšŒ๋œ ์—”ํ‹ฐํ‹ฐ๋Š” ๋‹ค์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์กฐํšŒํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • 2์ฐจ ์บ์‹œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ์บ์‹œ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

6. ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ.

  • JPA๋Š” ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • JPA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์›์ž์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜๋˜๊ฑฐ๋‚˜ ๋กค๋ฐฑ๋ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7. Lazy Loading๊ณผ Eager Loading.

  • JPA๋Š” ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ง€์—ฐ ๋กœ๋”ฉ(Lazy Loading) ํ•˜๊ฑฐ๋‚˜ ์ฆ‰์‹œ ๋กœ๋”ฉ(Eager Loading) ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Lazy Loading์€ ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”ํ•  ๋•Œ๋งŒ ๊ฐ€์ ธ์˜ค๊ณ , Eager Loading์€ ์ฆ‰์‹œ ๋ชจ๋“  ์—ฐ๊ด€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8. JPQL(Java Persistence Query Language).

  • JPA๋Š” JPQL(Java Persistence Query Language) ์ด๋ผ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • JPQL์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ๋Œ€์‹  ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด SQL์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…์†์ ์ธ ์ฟผ๋ฆฌ ๋Œ€์‹ , ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, SQL์ด ์•„๋‹Œ ๊ฐ์ฒด ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ JPQL ์ฟผ๋ฆฌ

SELECT u FROM User u WHERE u.age > 20
  • ์œ„ ์ฟผ๋ฆฌ๋Š” User ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

9. ์œ ์—ฐํ•œ ๊ด€๊ณ„ ๋งคํ•‘.

  • JPA๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๊ณ„๋ฅผ ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, 1๋Œ€1, 1๋Œ€๋‹ค, ๋‹ค๋Œ€์ผ, ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์™ธ๋ž˜ ํ‚ค(foreign key)์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๊ณ„๋ฅผ ๊ฐ์ฒด ๊ฐ„์˜ ์ฐธ์กฐ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

10. ํ‘œ์ค€ํ™”๋œ API.

  • JPA๋Š” ์ž๋ฐ” EE์˜ ํ‘œ์ค€ API์ด๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด๋“ค(Hibernate, EclipseLink ๋“ฑ)์—์„œ ๋™์ผํ•œ API๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ํŠน์ • ๊ตฌํ˜„์ฒด์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

2๏ธโƒฃ ๊ฒฐ๋ก .

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

JPA๋Š” ์ถ”์ƒํ™” ๊ณ„์ธต์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๊ฐ„๊ทน์„ ์ค„์ด๊ณ , ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.