๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ๏ธ DevLog/Devcourse

[DevCourse] ์ƒ์„ฑํ˜• AI ํ™œ์šฉ ๋ฐฑ์—”๋“œ ๋ฐ๋ธŒ์ฝ”์Šค 57์ผ์ฐจ

by hyebin (Helia) 2025. 6. 29.
๋ฐ˜์‘ํ˜•

์ด๋ฒˆ ์ˆ˜์—…์—์„œ๋Š” Spring Boot ํ™˜๊ฒฝ์—์„œ ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ, JPA๋ฅผ ์ด์šฉํ•œ ์ƒํ’ˆ ๋“ฑ๋ก/์กฐํšŒ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ณด์•˜๋‹ค.

์ง€๋‚œ ์‹œ๊ฐ„์— ํ”„๋กœ์ ํŠธ์˜ ๋ผˆ๋Œ€๋ฅผ ์„ธํŒ…ํ–ˆ๋‹ค๋ฉด, ์ด๋ฒˆ์—๋Š” ๊ทธ ๋ผˆ๋Œ€ ์œ„์— ์‹ค์ œ ๊ธฐ๋Šฅ์„ ์–น์–ด๋ณด๋Š” ์‹œ๊ฐ„์ด์—ˆ๋‹ค.


๐Ÿ“Œ ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ ์ •๋ฆฌ

๐Ÿ”ท JPA๋ฅผ ํ™œ์šฉํ•œ ์—”ํ‹ฐํ‹ฐ ์„ค๊ณ„์™€ ์ €์žฅ ๋กœ์ง ๊ตฌํ˜„

์˜ค๋Š˜์€ ์ƒํ’ˆ ์ •๋ณด๋ฅผ ์ €์žฅํ•  Item ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ง์ ‘ ์„ค๊ณ„ํ•˜๊ณ , ItemSellStatus์™€ ๊ฐ™์€ enum ํƒ€์ž…์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๊ตฌ์ฒดํ™”ํ–ˆ๋‹ค.

Lombok์„ ์‚ฌ์šฉํ•ด ๋ถˆํ•„์š”ํ•œ getter/setter, toString ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ค„์˜€๊ณ , JPA์˜ @Entity, @Id, @GeneratedValue, @Enumerated ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด DB ํ…Œ์ด๋ธ”๊ณผ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

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

 

 

๐Ÿ”ถ Repository ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•œ JPA ์กฐํšŒ ๊ธฐ๋Šฅ ๊ฒ€์ฆ

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

  • findByItemName, findByPriceBetween ๊ฐ™์€ ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰
  • @Query๋ฅผ ํ™œ์šฉํ•œ JPQL ์ง์ ‘ ์ž‘์„ฑ
  • ๋ฌธ์ž์—ด ํฌํ•จ, ๋ฒ”์œ„ ์กฐ๊ฑด, ์ •๋ ฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์˜ ์กฐํšŒ ๋กœ์ง ๊ตฌ์„ฑ

ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒํ’ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ•œ ๋’ค,

์ •์ƒ์ ์œผ๋กœ ์›ํ•˜๋Š” ์กฐ๊ฑด์˜ ์ƒํ’ˆ๋“ค์ด ์กฐํšŒ๋˜๋Š”์ง€ ํ™•์ธํ•˜๋ฉด์„œ Spring Data JPA์˜ ํŽธ๋ฆฌํ•จ๊ณผ ์ž๋™ํ™”๋œ ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋กœ์ง์„ ์‹ค์ œ๋กœ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๐Ÿ”ท ์‹ค์ „ ํ”„๋กœ์ ํŠธ ๊ฐ๊ฐ์„ ํ‚ค์›Œ์ค€ ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ ๊ฐœ๋ฐœ ํ๋ฆ„

์˜ค๋Š˜์€ ๋‹จ์ˆœํžˆ ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ๋„๋ฉ”์ธ ์ค‘์‹ฌ์œผ๋กœ ์„œ๋น„์Šค ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , ์ด๋ฅผ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ํ๋ฆ„์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๋Š” ์ ์—์„œ ์˜๋ฏธ๊ฐ€ ์ปธ๋‹ค.

 

์ฒ˜์Œ์—๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋‹จ์ˆœํ•œ ๋ณด์กฐ ์ˆ˜๋‹จ์ฒ˜๋Ÿผ ๋А๊ปด์กŒ์ง€๋งŒ, ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์กฐํšŒํ•˜๋ฉด์„œ “์„ค๊ณ„ํ•œ ๋กœ์ง์ด ์˜๋„๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€”๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๊ฐœ๋ฐœ์˜ ์ค‘์‹ฌ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์กฐ๊ธˆ์”ฉ ์™€๋‹ฟ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.


๐Ÿงก ๋А๋‚€ ์ 

์˜ค๋Š˜์€ Spring Boot ์œ„์—์„œ JPA๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•ด ๋ณด๋ฉฐ๋„๋ฉ”์ธ ์„ค๊ณ„๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ, ์กฐํšŒ, ํ…Œ์ŠคํŠธ๊นŒ์ง€ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ํ๋ฆ„์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ตฌํ˜„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

ํŠนํžˆ, ์ง์ ‘ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒฝํ—˜์ด ์‹ ๊ธฐํ–ˆ๊ณ , ๋ฐ˜๋Œ€๋กœ ์ž๋™ํ™”๋œ ์ด ํ๋ฆ„์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์–ด์•ผ๋งŒ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋„ ๋А๊ผˆ๋‹ค.

 

๋‹จ์ˆœํžˆ ‘๋Œ์•„๊ฐ€๊ธฐ๋งŒ ํ•˜๋Š” ์ฝ”๋“œ’๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ตฌ์กฐ์ ์œผ๋กœ ์ž˜ ์„ค๊ณ„๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฒ•์„ ์—ฐ์Šตํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฐ๊ฐ์ด ์ ์  ์ƒ๊ธด๋‹ค.

๋ฐ˜์‘ํ˜•