์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

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

JPA

by mr_woong 2022. 6. 7. 18:54

๋ณธ๋ฌธ

JPA
์ •์˜ - ๋Œ€ํ‘œ์ ์ธ ์˜คํ”ˆ์†Œ์Šค๋กœ Hibernate(JPA ๊ตฌํ˜„์ฒด์˜ ํ•œ ์ข…๋ฅ˜) ๊ฐ€ ์žˆ๋‹ค.
- Java ์ง„์˜์—์„œ ORM ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ
- ์‹ค์ œ๋กœ ๊ตฌํ˜„๋œ ๊ฒƒ์ด ์•„๋‹Œ, ๊ตฌํ˜„๋œ ํด๋ž˜์Šค์™€ ๋งคํ•‘ ํ•ด์ฃผ๊ธฐ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ
- SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ƒ์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ผ์ข…์˜ ๋ฒˆ์—ญ๊ธฐ์™€ ๊ฐ™์€ ์—ญํ• ์„ ์ˆ˜ํ–‰
์žฅ์  1) ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ข…์†๋˜์ง€ ์•Š์Œ
ex) ๋งŒ์•ฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ, ์˜ค๋ผํดDB ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐœ๋ฐœ์„ ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.
๊ฐœ๋ฐœ ๋„์ค‘ DB๋ฅผ MariaDB๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งˆ๋‹ค ์ฟผ๋ฆฌ๋ฌธ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.
๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— ์ฒ˜์Œ ์„ ํƒํ•œ DB๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ํ•˜์ง€๋งŒ JPA๋Š” ์ถ”์ƒํ™”ํ•œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์„ค์ •ํŒŒ์ผ์— ์–ด๋–ค DB๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์•Œ๋ ค์ค€๋‹ค๋ฉด ์–ผ๋งˆ๋“ ์ง€ DB๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

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

3) ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๊ฒฝ์šฐ, ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜๋Š” DTO ํด๋ž˜์Šค์˜ ํ•„๋“œ๋„ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค. JPA์—์„œ๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋œ ํด๋ž˜์Šค์— ํ•„๋“œ๋งŒ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ SQL๋ฌธ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์ข‹๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ๋„ ์ฆ๊ฐ€ํ•œ๋‹ค.
๋‹จ์  1) ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ
- ํ†ต๊ณ„ ์ฒ˜๋ฆฌ ๊ฐ™์€ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ SQL๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋‚˜์„ ์ˆ˜๋„ ์žˆ์Œ
- JPA์—์„œ๋Š” Native SQL์„ ํ†ตํ•ด ๊ธฐ์กด SQL๋ฌธ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ข…์†๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์ƒ๊น€
- ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SQL๊ณผ ์œ ์‚ฌํ•œ JPQL์„ ์‚ฌ์šฉํ•˜๋ฉด ๋จ

2) ์„ฑ๋Šฅ ์ €ํ•˜ ์œ„ํ—˜
- ๊ฐ์ฒด๊ฐ„ ๋งคํ•‘ ์„ค๊ณ„๋ฅผ ์ž˜๋ชปํ–ˆ์„ ๊ฒฝ์šฐ, ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒ
- ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ์ฟผ๋ฆฌ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ์„ฑ

3) ํ•™์Šต ์‹œ๊ฐ„
- JPA๋ฅผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๊นŒ์ง€ ํ•™์Šต์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ

ORM์ด๋ž€?

- Object-relational mapping ์˜ ์•ฝ์ž

- ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘(์—ฐ๊ฒฐ) ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•จ

   - ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•จ

   - ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ ๊ฐ„์— ๋ถˆ์ผ์น˜๊ฐ€ ์กด์žฌํ•จ

   - ORM์„ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

 

 

Q1. JPA์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

 

A1.

JPA ๋Š” Java ์ง„์˜์—์„œ ORM ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ž…๋‹ˆ๋‹ค.

SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ƒ์„ฑ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ผ์ข…์˜ ๋ฒˆ์—ญ๊ธฐ์™€ ๊ฐ™์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

Q2. ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด๋กœ๋Š” ๋ญ๊ฐ€ ์žˆ์„๊นŒ์š”?

 

A2.

Hibernate ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Q3. ์™œ ๊ตฌํ˜„์ฒด๋กœ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ• ๊นŒ์š”?

 

A3.

JPA๋Š” ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋ฅผ ์ถ”์ƒํ™”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด์— ๋น„ํ•ด JPA์™€ ํ˜ธํ™˜์ด ์ž˜ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Spring Boot Starter ์˜ Data JPA ์˜์กด์„ฑ์—๋Š” ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ๊ตฌํ˜„์ฒด๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 

<Reference>

https://livenow14.tistory.com/70

 

[DB] ํ•˜์ด๋ฒ„๋„ค์ดํŠธ(Hibernate)๋ž€?

ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ๋ช…์„ธ์ธ JPA(Java Persistence API)์˜ ๊ตฌํ˜„์ฒด์˜ ํ•œ ์ข…๋ฅ˜ JPA์˜ ๊ตฌํ˜„์ฒด์ด๋ฏ€๋กœ JPA์˜ ํŠน์ง•์„ ํ•จ๊ป˜ ์ •๋ฆฌํ–ˆ์–ด์š”. Hibernate๋ž€? ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋Š” ์ž๋ฐ” ์–ธ์–ด๋ฅผ ์œ„ํ•œ ORM ํ”„๋ ˆ์ž„์›Œํฌ์—์š”. JPA์˜ ๊ตฌํ˜„์ฒด

livenow14.tistory.com

 

'JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[QueryDsl] ๊ธฐ๋ณธ ์กฐ๊ฑด  (0) 2022.05.22

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ

๋Œ“๊ธ€ ์˜์—ญ