회원 수정 API
회원 수정 메서드 : PUT url : /api/vx/members/{id}
RESTful API 검색하면 API 설계할 때 어떤 스타일로 설계하는 것이 RESTful API인지 나온다! PUT은 멱등하다. 똑같은 작업을 반복해도 변하지 않기 때문에 name을 new-hello로 바꾸는 같은 작업을 여러번 해도 결과는 똑같다. 전체 업데이트를 사용하는 것이 맞다. 부분 업데이트를 하려 Patch 또는 POST 를 사용하는 것이 REST 스타일에 맞다.
회원 등록 시 사용했던 DTO를 그대로 사용해도 될 것 같지만, 회원 등록과 회원 수정은 API Specification이 다르고, 회원 수정은 한번 등록하면 좀 제한적이기 때문에 별도의 DTO를 생성하는 것이 좋다.
DTO는 데이터 통신용이라 로직이 있는 것도 아니여서 실용적인 관점에서 롬복 애노테이션 막 쓴다고 함. 롬복의 @AllArgsConstructor로 DTO의 모든 필드들을 생성자를 자동 생성해준다!
MemberService에 update 메서드 추가 : 반환 데이터는 없다.(void) =>Member를 반환해도 되지만 이것은 영속성 상태가 끝난 엔티티다. 강사님 개인 스타일 : 커맨드와 쿼리를 철저하게 분리한다. Member를 반환하면 업데이트하면서 결국 Member를 쿼리해버리는 꼴이 된다. update는 변경성 메서드인데 id로 Member를 조회하는 꼴이 된다. =>커맨드와 쿼리가 같이 있는 꼴이 된다. 그래서 update메서드 같은 수정하는 것들은 변경만하고 void로 아무것도 리턴하지 않고 끝내버린다!또는 id값 정도만 반환한다. =>유지보수 증대된다!
MemberService에 변경 감지를 사용해서 데이터를 수정한다! @Transactional, 영속성 컨텍스트 관리대상
회원 수정 API : 회원 수정 DTO(요청, 응답) DTO를 요청 파라미터에 매핑!
Postman으로 확인
PUT으로 데이터 수정(전송)
클라이언트 : "name=hello", api/v2/members_2
서버 : id값 받음.
/api/v2/members/{id} 로 접속시 put으로 변경할 name으로 데이터 수정 요청.
Last updated