๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ๏ธ Today I Learned(TIL)/์ŠคํŒŒ๋ฅดํƒ€ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

[ TIL ] JPA ์‹ฌํ™”_Day 6

by carrot0911 2025. 1. 19.

์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง 

ํ•„์ˆ˜๊ณผ์ œ Level 1 - 3, 4, 5 ๋๋‚ด๊ธฐ

  • 1-3. AOP ์ดํ•ดํ•˜๊ธฐ
    • UserAdminController ํด๋ž˜์Šค์˜ changeUserRole( ) ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „์— ๋™์ž‘ํ•˜๋„๋ก ์ˆ˜์ •
    • ์‹คํ–‰ ์ „์— ๋™์ž‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ @After๋กœ ๋˜์–ด ์žˆ๋˜ ์–ด๋…ธํ…Œ์ด์…˜์„ @Before๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค. 
    • ์•ˆ์˜ execution ํ‘œํ˜„์‹์„ UserAdminController.changeUserRole๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.
  • 1-4. ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ ์ดํ•ดํ•˜๊ธฐ
    • todo_๋‹จ๊ฑด_์กฐํšŒ_์‹œ_todo๊ฐ€_์กด์žฌํ•˜์ง€_์•Š์•„_์˜ˆ์™ธ๊ฐ€_๋ฐœ์ƒํ•œ๋‹ค ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๊ณ  ์žˆ์–ด์„œ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด ํ†ต๊ณผ๋  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •
    • Service ๋‹จ์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด todo๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ, InvalidReqeustException์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค.
    • GlobalExceptionHandler๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„˜์–ด๊ฐ€์„œ ํ™•์ธํ•ด ๋ณด๋ฉด HttpStatus๊ฐ€ 400 BAD_REQUEST์ด๋‹ค.
    • ๋”ฐ๋ผ์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ๋„ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” OK๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, BAD_REQUEST๊ฐ€ ๋‚˜์˜ค๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์ฒดํฌํ•ด์•ผ ํ•œ๋‹ค.
    • ๊ทธ๋ž˜์„œ OK๋กœ ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋ชจ๋‘ BAD_REQUEST๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.
  • 1-5. JPA์˜ ์ดํ•ด
    • ํ• ์ผ ๊ฒ€์ƒ‰ ์‹œ weather ๋˜๋Š” ์ˆ˜์ •์ผ ๊ธฐ์ค€์œผ๋กœ ๊ธฐ๊ฐ„ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •
    • TodoRepository์— ๊ฐ๊ฐ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฉ”์„œ๋“œ finAllByWeatherOrderByModifiedAtDesc, findAllByModifiedAtBetween, findAllByModifiedAtAfter, findAllByModifiedAtBefore๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.
    • Service ๋‹จ์—์„œ if ๋ฌธ์„ ํ†ตํ•ด ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜๊ณ  ๊ฐ๊ฐ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.

 

์˜ค๋Š˜ ํ•˜๋ฃจ ์ •๋ฆฌ โœ๏ธ

์ฃผ๋ง์ด์ง€๋งŒ ๊ณต๋ถ€๋ฅผ ๋†“๊ณ  ์‰ด ์ˆ˜๋Š” ์—†์–ด์„œ ๊ณผ์ œ Level 1์„ ๋ชจ๋‘ ํ•ด๊ฒฐํ–ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ทธ์ „์— ๊ณต๋ถ€ํ–ˆ๋˜ AOP ๋ถ€๋ถ„์€ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ฌธ์ œ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜€๋‹ค...
์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์งœ์—ฌ ์žˆ๋‹ค๊ณ ๋Š” ํ•˜์ง€๋งŒ, ์ฝ”๋“œ๊ฐ€ ์‰ฝ๊ฒŒ ์ดํ•ด๋˜์ง€ ์•Š์•˜๋‹ค.. ๋ญ๊ฐ€ ๋ญ˜ ํ•˜๋Š” ์ฝ”๋“œ์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์„œ ์ฝ”๋“œ ํ•œ ์ค„์”ฉ ๋‚˜๋ˆ ์„œ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๊ณ , ๊ทธ๋‹ค์Œ์€ ์–ด๋–ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ํ†ต๊ณผ๋˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ–ˆ๋‹ค.
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฐ’์€ 200 OK์ธ๋ฐ, ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ๋Š” 400 BAD_REQUEST์˜€๋‹ค.

๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ ์˜๋ฌธ์ด ๋“ค์—ˆ๋˜ ์ ์ด ์ผ์ •์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฑด๋ฐ ์™œ 400 BAD_REQUEST๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฑธ๊นŒ..? ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋ฅผ ์ฒœ์ฒœํžˆ ์‚ดํŽด๋ดค๊ณ  Service์™€ GlobalExceptionHandler์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋œฏ์–ด๋ณด๋ฉด์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ผ์ •์„ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด InvalidRequestException์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๊ณ  GlobalExceptionHandler๋Š” ์ด๋ฅผ HttpStatus = 400 BAD_REQUEST๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.
์ด๊ฑธ ์ดํ•ดํ•œ ํ›„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ๋„ 400 BAD_REQUEST๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๊ณ  ๋ฌด์‚ฌํžˆ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

๋งˆ์ง€๋ง‰์€ JPQL์„ ์ด์šฉํ•ด์„œ ์กฐ๊ฑด์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
JPQL์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์„œ ์ฒ˜์Œ์—๋Š” ๋ฒ„๋ฒ…๊ฑฐ๋ ธ๋‹ค. ์ด๊ฒŒ ๋งž๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๋Š”๊ฑด๊ฐ€?? ํ•˜๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ์ง€๋งŒ ๋‹ค ์ž‘์„ฑํ•˜๊ณ  Compile ์—๋Ÿฌ๊ฐ€ ๋œจ์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์•„, ์ž˜ ์ ์€ ๊ฒŒ ๋งž๊ตฌ๋‚˜ ์ƒ๊ฐํ•˜๋ฉด์„œ ์ž์‹ ๊ฐ์ด ์•ฝ๊ฐ„ ์ƒ์Šนํ–ˆ๋‹ค.
Service ๋‹จ์—์„œ ์กฐ๊ฑด์„ ๋‚˜๋ˆ„๊ณ  ๊ฐ๊ฐ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฉ”์„œ๋“œ๋ฅผ Repository์— ์ž‘์„ฑํ–ˆ๋‹ค. ๋ชจ๋‘ ์ž‘์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ณ  ๋‚˜๋‹ˆ ์ฝ”๋“œ๊ฐ€ ๋ชจ๋‘ ์™„์„ฑ๋˜์—ˆ๋‹ค.

์ด๋ฒˆ ์ฃผ๋Š” ์‰ฝ๊ฒŒ ์ง‘์ค‘์ด ๋˜์ง€ ์•Š๋Š” ํ•œ ์ฃผ์˜€๋‹ค. ์ž๊พธ ๋”ด ์ง“์„ ํ•˜๊ฒŒ ๋˜๊ณ  ๊ทธ๋žฌ๋Š”๋ฐ ๋‹ค์‹œ ์ •์‹ ์„ ์ฐจ๋ฆฌ๊ณ  ๋‹ค์Œ ์ฃผ์—๋Š” ์ง‘์ค‘ํ•ด์„œ ๊ณผ์ œ๋„ ํ•ด๊ฒฐํ•˜๊ณ  ๊ฐ•์˜๋„ ์—ด์‹ฌํžˆ ๋“ค์–ด์•ผ๊ฒ ๋‹ค.

๋‹ค์Œ ์ฃผ๋„ ํŒŒ์ดํŒ…ํ•ด๋ณด์ž!!

 

๋‚ด์ผ ๊ณ„ํš โฐ

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1๋ฌธ์ œ ํ’€๊ธฐ
  • ํ•„์ˆ˜ ๊ณผ์ œ Level 2 ๋๋‚ด๊ธฐ
  • ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์„ธ์…˜ ๋“ฃ๊ธฐ

+์ถ”๊ฐ€ ๊ณ„ํš์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์–ด์š”~_~