회원 수정 API

HotFried·2023년 11월 23일
0

Controller

  • 회원 수정도 DTO를 요청 파라미터에 매핑
@RestController
@RequiredArgsConstructor
public class MemberApiController {

    @PutMapping("/api/v2/members/{id}")
    public UpdateMemberResponse updateMemberV2(
            @PathVariable Long id,
            @RequestBody @Valid UpdateMemberRequest request) {

        memberService.update(id, request.getName());
        Member member = memberService.findOne(id);

        return new UpdateMemberResponse(member.getId(), member.getName());
    }

    @Data
    static class UpdateMemberRequest {
        private String name;
    }

    @Data
    @AllArgsConstructor
    static class UpdateMemberResponse {
        private Long id;
        private String name;
    }
}

Service

  • 변경 감지에 의해 영속 상태의 member는 @Transactional이 끝나는 시점에 flush() 하고 DB 트랜잭션을 커밋한다.
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class MemberService {

    @Transactional
    public void update(Long id, String name) {
        Member member = memberRepository.findOne(id);
        member.setName(name);
    }
}

회원정보 수정 시 Service의 update 메소드에서 Member를 반환해도 된다.

이 때, 영속상태가 끊긴 Member가 반환 된다.
사용은 해도 되지만 커맨드와 쿼리를 분리하도록 한다.

Update는 커맨드성 메소드인데, Member를 쿼리를 하는 형태가 되기 때문에,
입력 값에서 이용하는 id 정도만 반환하도록 한다.


회원 수정 API updateMemberV2 는 회원 정보를 부분 업데이트 한다.
PUT 방식을 사용했지만, PUT은 전체 업데이트를 할 때 사용하는 것이 타당하다.

부분 업데이트를 하려면 PATCH를 사용하거나 POST를 사용한다.


참고 :

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

profile
꾸준하게

0개의 댓글