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

2.4 ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์™€ JpaRepository ~

1son 2023. 1. 28. 20:40

์‹ค์Šต์„ ํ†ตํ•ด์„œ ์‹ค์ œ Spring Data Jpa๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ์ง€ ์•Œ์•„๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. 

 

Spring Data Jpa๊ฐ€ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๊ฒƒ์€ ๋‹จ์ง€ ๋‘ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ๋งŒ์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

 

- JPA๋ฅผ ํ†ตํ•ด์„œ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋˜๋Š” ๊ฐ์ฒด(์ดํ•˜ ์—”ํ‹ฐํ‹ฐ๊ฐ์ฒด)๋ฅผ ์œ„ํ•œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค

- ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ Repository 

 

์ด ์ค‘์—์„œ Repository๋Š” Spring Data Jpa์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์„ค๊ณ„ํ•˜๋Š”๋ฐ, 

๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ๋‹จ์ˆœํžˆ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ•˜๋‚˜ ์ •์˜ํ•˜๋Š” ์ž‘์—…๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. 

 

์‹ค์Šต์„ ์œ„ํ•ด์„œ ๋จผ์ € Java์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

2.4.1 ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ์ž‘์„ฑ

 

Memo ํด๋ž˜์Šค๋Š” ์—”ํ‹ฐํ‹ฐํด๋ž˜์Šค๋กœ ๋งˆ์น˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. 

 

 

@Entity

์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋Š” Spring Data JPA์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ @Entity๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•ด์•ผ๋งŒํ•ฉ๋‹ˆ๋‹ค. 

@Entity๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์œ„ํ•œ ํด๋ž˜์Šค์ด๋ฉฐ, 

ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋“ค์ด JPA๋กœ ๊ด€๋ฆฌ๋˜๋Š” ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

 

@Table

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ƒ์—์„œ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์–ด๋– ํ•œ ํ…Œ์ด๋ธ”๋กœ ์ƒ์„ฑํ• ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ๋‹ด๊ธฐ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. 

 

@Id์™€ @GeneratedValue

pk์— ํ•ด๋‹นํ•˜๋Š” ํŠน์ • ํ•„๋“œ๋ฅผ @Id๋กœ ์ง€์ •ํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. 

@Id๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ @GeneratedValue

 

@GeneratedValue(strategy = GenerationType.IDENTITY)๋ถ€๋ถ„์€  

PK๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

๋งŒ์ผ ์—ฐ๊ฒฐ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ Mysql์ด๋‚˜ MariaDB๋ฉด 'auto increment'๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ๊ฐ€ ๊ธฐ๋ก๋  ๋•Œ ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. 

 

@Column

๋งŒ์ผ ์ถ”๊ฐ€์ ์ธ ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ ์ˆ˜์ •

 

 

 

2.4.2 Spring Data JPA๋ฅผ ์œ„ํ•œ ์Šคํ”„๋ง ๋ถ€ํŠธ ์„ค์ •

 

์ž๋™์œผ๋กœ ํ•„์š”ํ•œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ JPA๋ฅผ ์ด์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” SQL ๋“ฑ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•ฝ๊ฐ•์˜ ์ถ”๊ฐ€ ์„ค์ • ํ•„์š” 

 

 

์œ„์˜ ์„ธ๊ฐ€์ง€ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•œ ํ›„ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒต์Šค์— ์–ด๋–ค ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜๋Š” ์ง€ ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

ํ…Œ์ด๋ธ”์ด ์ž˜ ์ƒ์„ฑ๋๋„ค์—ฌ 

 

 

 

2.4.3 JpaRepository ์ธํ„ฐํŽ˜์ด์Šค 

 

Spring Data JPA์˜ ๊ตฌํ˜„์ฒด์ธ Hibernate๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 

๊ทธ ์ค‘์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•  ๊ฒƒ์ด ๋ฐ”๋กœ JpaRepository๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ž…๋‹ˆ๋‹ค. 

 

 

CRUD ์ž‘์—…์ด๋‚˜ ํŽ˜์ด์ง•, ์ •๋ ฌ ๋“ฑ์˜ ์ฒ˜๋ฆฌ๋„ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, 

๊ธฐ๋Šฅ์— ๋”ฐ๋ผ์„œ ์ƒ์†๊ตฌ์กฐ๋กœ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 

-> JpaRepository๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋ฌด๋‚œํ•œ ์„ ํƒ

 

 

JpaRepository ์‚ฌ์šฉํ•˜๊ธฐ 

 

JpaRepository๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ , Spring Data JPA๋Š” ์ด๋ฅผ ์ƒ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋ชจ๋“  ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋Š” ๋งˆ๋ฒ•๊ฐ™์€ ์ผ์ด ๋ฒŒ์–ด์ง‘๋‹ˆ๋‹ค. 

 

 

JpaRepository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋ชจ๋“  ์ž‘์—…์ด ๋๋‚ฉ๋‹ˆ๋‹ค. 

JpaRepository๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ํƒ€์ž…์ •๋ณด์™€ @Id์˜ ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

์ด์ฒ˜๋Ÿผ Spring Data JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ๋งŒ์œผ๋กœ๋„ ์ž๋™์œผ๋กœ ์Šคํ”„๋ง์˜ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.