@PutMapping("/api/v2/members/{id}")
public UpdateMemberResponse updateMemberV2(
@PathVariable("id") Long id,
@RequestBody @Valid UpdateMemberRequest request) {
memberService.update(id, request.getName());
Member findMember = memberService.findOne(id);
return new UpdateMemberResponse(findMember.getId(), findMember.getName());
}
@Data
@AllArgsConstructor
static class UpdateMemberResponse {
private Long id;
private String name;
}
@Data
static class UpdateMemberRequest {
private String name;
}
ํ์ ์์ ๋ DTO๋ฅผ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ์ ํ์์ผฐ๋ค.
@Transactional
public void update(Long id, String name) {
Member member = memberRepository.findOne(id);
member.setName(name);
}
findOne()๋ฉ์๋๋ฅผ ํตํด member๊ฐ์ฒด๋ฅผ ์์ํํ ์ฑ๋ก ๋ถ๋ฌ์จ ํ setter๋ฅผ ์ฌ์ฉํ๋ค. ์์์ฑ ์ปจํ
์คํธ์ ๋ณ๊ฒฝ ๊ฐ์ง ๊ธฐ๋ฅ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ ๋๋ค.
ํธ๋ฌ๋ธ์ํ
@Data @AllArgsConstructor private class UpdateMemberResponse { // ^ ์ ๊ทผ์ ํ์๋ฅผ private์ผ๋ก ํจ private Long id; private String name; } @Data private class UpdateMemberRequest { // ^ ์ ๊ทผ์ ํ์๋ฅผ private์ผ๋ก ํจ private String name; }๋ด๋ถ ํด๋์ค๋ ์ ์ (static)์ด์ด์ผ ํ๋ค.
@PutMapping("/api/v2/members/{id}")์๋ํฌ์ธํธ๋ฅผ ์ฒ๋ฆฌํ๋updateMemberV2๋ฉ์๋์์ **UpdateMemberRequest**์ **UpdateMemberResponse**๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ๋ฐ๋ผ์, ํด๋น ๋ด๋ถ ํด๋์ค๋ค์private์ ๊ทผ ์ ํ์๋ฅผ ์ค์ ํ๋ฉด ์ปจํธ๋กค๋ฌ์์ ํด๋น ํด๋์ค๋ค์ ์ฌ์ฉํ ์ ์์ด ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.static์ด์ด์ผ ํ๋ ์ด์
- ์ฑ๋ฅ์ ์ ๋ฆฌ ๋ฐ์ํฐ ์ ๋ฌ์ ์ํ ๊ฐ๋จํ ์ปจํ ์ด๋ ์ญํ ์ ํ๋ฏ๋ก, ์ธ์คํด์คํํ์ฌ ์ํ๋ฅผ ๊ณต์ ํ ํ์๋ ๋ฑํ ์๋ค. ์ ์ ํด๋์ค๋ก ์ ์ธํ๋ฉด ์ปจํธ๋กค๋ฌ ์ธ์คํด์ค์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋ฆฌ์์ค ์ฌ์ฉ๋์ด ์ค์ด๋ค๊ณ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ํจ์จ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
- ์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์ ํ์ํ ๋๋ง๋ค ํด๋์ค๋ฅผ ์ธ์คํดํ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋ค.
- ๊ตฌ์กฐ์ ๋ช ํ์ฑ ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๋ณ๊ฐ๋ก ๋์ํ๋ฏ๋ก ์ธ๋ถ/๋ด๋ถ์ ์ฐ๊ฒฐ์ด ์ฝํด์ง๋ค. ๋ด๋ถ ํด๋์ค๊ฐ ์ธ๋ถ ํด๋์ค์ ์ข ์๋์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ ์ ์๋ค.
<aside> โ ๏ธ ๋ณธ ์์ ์์๋ ๋ถ๋ถ ์ ๋ฐ์ดํธ๋ฅผ ํ๋ฉฐ PUT๋ฐฉ์์ ์ฌ์ฉํ๋๋ฐ, PUT์ ์ ์ฒด ์ ๋ฐ์ดํธ๋ฅผ ํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ง๋ค. ๋ถ๋ถ ์ ๋ฐ์ดํธ์๋ PATCH๋ POST๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด RESTfulํ ๋ฐฉ์์ด๋ค.
</aside>