๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’Š Java & Kotlin & Spring/- spring framework +

[Spring & Springboot-JPA] JPA๋ฅผ ์ด์šฉํ•œ CRUD ๋ฉ”์„œ๋“œ ์ž‘์„ฑํ•˜๊ธฐ - 4 (update ๋ฉ”์„œ๋“œ๋กœ ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ • ๋งŒ๋“ค๊ธฐ)

by Wonit 2020. 1. 27.

ํ•ด๋‹น ํฌ์ŠคํŠธ๋Š” ์—ฌ๋Ÿฌ ํŽธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ํ•˜๋‚˜์˜ ๊ฐœ๋…์„ ์ด๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค ์ž์„ธํ•œ ํ•™์Šต๊ณผ ์ดํ•ด๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ํฌ์ŠคํŠธ๋„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” :)


์ „์— ์šฐ๋ฆฌ๋Š” read ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ Get ๋ฐฉ์‹์œผ๋กœ DB์—์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์‹ค์Šต์„ ํ•˜์˜€๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” update๋กœ ๊ฐœ์ธ ์ •๋ณด ์ˆ˜์ • ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์‹ค์Šต์„ ํ•ด๋ณด์ž.

 

์ด๋ฒˆ๋„ ์—ญ์‹œ Controller Test๋ฅผ ๋จผ์ € ์ค€๋น„ํ•˜์ž.

 

๊ฒฝ๋กœ๋Š” ์ €๋ฒˆ์— read()ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๋˜ test/java/repository/UserRepositoryTests.class ๊ฒฝ๋กœ์—์„œ update() ๋ฉ”์„œ๋“œ๋ฅผ @Test์–ด๋…ธํ…Œ์ด์…˜๊ณผ ํ•จ๊ป˜ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

ํ…Œ์ŠคํŠธ์˜ ๊ธฐ๋ณธ์€ read()๋กœ ๋ถ€ํ„ฐ.

update() ์ •๋ณด์˜ ์ˆ˜์ • ๊ณผ์ •์„ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•ด๋ณด๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค.

  1. ์ˆ˜์ •์„ ํฌ๋งํ•˜๋Š” ์ •๋ณด ํƒ์ƒ‰
  2. ์ •๋ณด์˜ ๊ฐ’ ๋ณ€๊ฒฝ
  3. ์ €์žฅ.

1๋ฒˆ์—์„œ ํฌ๋งํ•˜๋Š” ์ •๋ณด๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ณผ์ •์ด ๋ฐ”๋กœ ์ „ ์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ read() ๋ฉ”์„œ๋“œ์˜ ๊ณผ์ •๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•˜๋‹ค.

read()์˜ ํ…Œ์ŠคํŠธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Optional<User> user๋กœ ๋ฐ›์€ ๊ฐ’์„ ifPresent()๋กœ ์กด์žฌํ•  ๋•Œ๋งŒ ๋žŒ๋‹ค์˜ setter๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

๋žŒ๋‹ค์˜ selectUser๋ฅผ ์ €์žฅํ•˜์ž.

 

๊ทธ๋ฆฌ๊ณ  ๋ณ€๊ฒฝํ–ˆ๋˜ userRepository์— save()๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ORM ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ œ์ถœํ•˜๋ฉด

 

 

์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ ์„œ๋น„์Šค๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.

User์˜ ํšŒ์› ์ •๋ณด ๋ณ€๊ฒฝ ์„œ๋น„์Šค

ํšŒ์› ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๊นŒ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ–ˆ์—ˆ๋˜ update() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ „๊ณผ ๊ฐ™์ด controller ํŒจํ‚ค์ง€ ์•„๋ž˜์— changeUser()๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

 

PutMapping()

 

@PutMapping ์–ด๋…ธํ…Œ์ด์…˜์€ Body์— ์ •๋ณด๋ฅผ ์กฐ๊ธˆ ๋” RestFulํ•˜๊ฒŒ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์ธ๋ฐ, ์šฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ url์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—

james์˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ์šฐ๋ฆฌ๋Š” id๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น id์— ๋Œ€์‘ํ•˜๋Š” ์ •๋ณด๋ฅผ account = "Kakao123" password = "Daum111" name = "Steve"๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค. ๋ผ๊ณ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ๋œ๋‹ค.

 

1. ์‹๋ณ„์„ ์œ„ํ•ด id ๊ฐ’์„ ์ด์šฉํ•˜๊ณ , ํ•ด๋‹น id ๊ฐ’์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•œ๋‹ค.

  • @RequestParam์œผ๋กœ id ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค.
  • @RequestBody๋กœ ๋ณ€๊ฒฝํ•  Json ํ˜•์‹์˜ ๊ฐ’์„ ๋ฐ›๋Š”๋‹ค.

 

2. ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜จ id ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•  User๋ฅผ ์ฐพ๋Š”๋‹ค.

๋ณ€๊ฒฝํ•  User๋ฅผ ์ฐพ์•˜์œผ๋ฉด, ์ €๋ฒˆ์— ํ–ˆ๋˜ Read() ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ๋ฒ• ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’์ด ์กด์žฌํ•  ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ifPresent() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•œ๋‹ค.

 

3. ์„ ํƒ๋œ selectUser ์— @RequestBody๋กœ ๋“ค์–ด์˜จ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

RequestBody๋กœ ๋„˜์–ด์˜จ ์—”ํ‹ฐํ‹ฐ์—์„œ getter๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’์„ ๊บผ๋‚ด๊ณ  selectUser๋กœ ์„ ํƒ๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ setter๋กœ ์ €์žฅ์‹œ์ผœ์ฃผ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

4. userRepository.save()๋ฅผ ํ†ตํ•ด์„œ ์ €์žฅํ•˜๊ณ  ๊ฐ’์„ return ์‹œ์ผœ์ค€๋‹ค.

๋žŒ๋‹ค๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ selectUser๋ฅผ save(entity) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ €์žฅ์‹œ์ผœ์ฃผ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ’์„ Json ํ˜•์‹์œผ๋กœ return ํ•ด์ค€๋‹ค๋ฉด ๋์ด๋‚˜๊ฒŒ ๋œ๋‹ค.

 

์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ Api Tester๋กœ ๊ฒ€์‚ฌ๋ฅผ ํ•ด๋ด…์‹œ๋‹ค.

 

 

 

 

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ๊ผญ PUT ๋ฐฉ์‹์œผ๋กœ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ url์„ ์“ฐ๋”๋ผ๋„ ๋‹ค๋ฅธ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ์œผ๋กœ์จ ์กฐ๊ธˆ ๋” RESTFul ํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

 

๊ทธ๋Ÿผ DB์—๋„ ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋Œ“๊ธ€