Spring/๐Ÿ”ฅ[spring]์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ ์›น ํ”„๋กœ์ ํŠธ_๊ตฌ๋ฉ๊ฐ€๊ฒŒ ์ฝ”๋”ฉ๋‹จ

02 Maria ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ Spring Data JPA 2.2~

1son 2023. 1. 27. 10:15

2.2 Spring Data JPA๋ฅผ ์ด์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ–ˆ๋”๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

์ฐธ๊ณ ๋กœ ์ƒ์„ฑ์‹œ gradle-grooby ์„ ํƒ

 

https://velog.io/@kokojihye/Spring-Boot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1

 

Spring Boot: ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์„น์…˜1.ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์„ค์ •: ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

velog.io

Build Successful ๋–ด๋‹ค. 

 

 

2.2.1 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ„ํ•œ ์Šคํ”„๋ง ๋ถ€ํŠธ ์„ค์ •

์ด๊ฑด ๋˜ ๋ญ์ž„

https://binux.tistory.com/92

 

Intellij - error: invalid source release: 17 ์˜ค๋ฅ˜

Java 17์ด LTS๋กœ ๊ณต๊ฐœ๋˜์—ˆ๊ณ , Spring boot๋„ 2.5.5 ๋ฒ„์ „์—์„œ ์ง€์›ํ•˜๊ณ  ์žˆ์–ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ์— Java 17์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ start.spring.io์—์„œ Java 17/Boot 2.5.5๋กœ ๋งŒ๋“ค์–ด์„œ intellij์—์„œ ๋ฐ”๋กœ Run ํ–ˆ๋Š”๋ฐ,

binux.tistory.com

์ •๋ง ๊ตฌ๊ธ€๋ง์˜ ์—ฐ์†์ด๋‹ค. 

 

๊ต์žฌ์™€ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋–ด๋‹ค. 

-> Spring data JPA๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๊ธฐ ๋–„๋ฌธ์— ์ž๋™์œผ๋กœ ์ด์— ๊ด€๋ จ๋œ ์„ค์ •์€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋‚˜ 

๊ตฌ์ฒด์ ์ธ ๊ฐ’์ด ์ง€์ •๋˜์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. 

 

 

์ •์ƒ์ ์ธ ์‹คํ–‰์ด ๋˜๋„ค์š” 

 

์ž๋™์œผ๋กœ ์„ค์ •๋˜๋Š” ๋ถ€๋ถ„ 

 

 

2.3 Spring Data JPA์˜ ์†Œ๊ฐœ

 

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ ์— ์ถ”๊ฐ€ํ•œ Spring data JPA ๋ผ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  , ์ด๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. 

JPA๋Š” java์–ธ์–ด๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์€ ์˜์† ๊ณ„์ธต์„ ์ฒ˜๋ฆฌํ•˜๊ณ ์žํ•˜๋Š” ์ŠคํŽ™์ž…๋‹ˆ๋‹ค. 

JPA๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„ ์€ ORM(Object-Relational Mapping)์ด๋ผ๋Š” ๊ธฐ์ˆ ์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์„ค๋ช…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. 

 

2.3.1 ORM์™€ JPA

ORM๋Š” ๋‹จ์–ด์—์„œ ๋ณด๋“ฏ์ด ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

ORM์€ ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด '๊ฐ์ฒด์ง€ํ–ฅ ํŽ˜๋Ÿฌ๋‹ค์ž„์„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณด์กดํ•˜๋Š” ๊ธฐ์ˆ '์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

'๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ด€๊ณ„ํ˜• ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ๋งคํ•‘ ํ•ด์ฃผ๋Š” ๊ฐœ๋…'์ด๋ผ๊ณ ๋„ ๋ณผ ์ˆ˜ ์žˆ์Œ

 

ORM์˜ ์‹œ์ž‘์€ ์•„์ฃผ๋‹จ์ˆœํ•ด์„œ '๊ฐ์ฒด์ง€ํ–ฅ'์˜ ๊ตฌ์กฐ๊ฐ€ '๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค'์™€ ์œ ์‚ฌํ•˜๋‹ค๋Š” ์ ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. 

 

๊ด€๊ณ„ํ˜• ๋ฐํ‹ฐ์–ด ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” ์ž…์žฅ์—์„œ๋Š” ํด๋ž˜์Šค๋Š” ์•„๋‹ˆ์ง€๋งŒ 'ํ…Œ์ด๋ธ”'์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์—๋Š” ์นผ๋Ÿผ์„ ์ •์˜ํ•˜๊ณ  ์นผ๋Ÿผ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ํ‹€์œผ ๋งŒ๋“ ๋‹ค๋Š” ์˜๋ฏธ์—์„œ ํด๋ž˜์Šค์™€์ƒ๋‹นํžˆ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. 

 

'์ธ์Šคํ„ด์Šค'์™€ 'Row'๋„ ์ƒ๋‹นํžˆ ์œ ์‚ฌ 

'๊ด€๊ณ„'์™€ '์ฐธ์กฐ'๋ผ๋Š” ์˜๋ฏธ๋„ ๋งค์šฐ ์œ ์‚ฌ

 

์œ„์™€ ๊ฐ™์ด ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์œ ์‚ฌํ•œ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

์ด๋Ÿฐ ํŠน์ง•์— ๊ธฐ์ดˆํ•ด์„œ '๊ฐํ…Œ์ง€ํ–ฅ์„ ์ž๋™์œผ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๊ฒŒ ' ์ฒ˜๋ฆฌํ•ด์ฃผใ…กใ„ด ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•„์ด๋””์–ด๋ฅผ ๋‚ด๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ๊ทธ๊ฒƒ์ด ORM์˜ ์‹œ์ž‘์ด์—ˆ์Šต๋‹ˆ๋‹ค. 

 

JPA๋Š” ORM์„ java ์–ธ์–ด์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ŠคํŽ™์ž…๋‹ˆ๋‹ค. 

ORM์ด ๋” ์ƒ์œ„๊ฐœ๋…์ด ๋˜๊ณ , JPA๋Š” java๋ผ๋Š” ์–ธ์–ด์— ๊ตญํ•œ๋œ ๊ฐœ๋…์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

JPA๋Š” ๋‹จ์ˆœํ•œ ์ŠคํŽ™์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ŠคํŽ™์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ตฌํ˜„์ฒด๋งˆ๋‹ค ํšŒ์‚ฌ์˜ ์ด๋ฆ„์ด๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜์ด๋ฆ„์ด ๋‹ค๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ์žˆ์ง€๋งŒ ๊ทธ ์ค‘์—์„œ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๊ฒƒ์€ 'Hibernate'์ž…๋‹ˆ๋‹ค. 

 

 

2.3.2 Spring Data JPA์™€ JPA

 

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” JPA์˜๊ตฌํ˜„์ฒด ์ค‘์—์„œ 'Hibernate'๋ผ๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. 

 

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ์— ์ถ”๊ฐ€ํ•œ 'Spring Data JPA'๋Š”

Hibernate๋ฅผ ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์ถ”๊ฐ€์ ์ธ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.