강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

경민님의 프로필 이미지
경민

작성한 질문수

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

회원 수정 API

Update 후 UpdateMemberResponse 매핑할 때

작성

·

5

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
update하고 응답할 때 어차피 request dto에 응답할 파라메터 값이 담겨져있는데 해당 값을 response dto에 할당해서 응답하면 되지 않을까요?

즉 제가 구상한 코드는 다음과 같습니다.


  @Operation(summary = "회원 수정")
  @PutMapping("{id}")
  public UpdateMemberResponse updateMemberV1(@Validated @RequestBody MemberUpdateDTO memberUpdateDTO, BindingResult bindingResult, @PathVariable("id") Long id){
    memberService.update(memberUpdateDTO, id);
    return new UpdateMemberResponse(id, memberUpdateDTO.getName(), memberUpdateDTO.getCity(),
        memberUpdateDTO.getStreet(), memberUpdateDTO.getZipcode());
  }

굳이 컨트롤러단에서 memberService.findOne(id)를 select문을 날려서 호출해서 준영속상태의 Member 엔티티의 값을 response dto에 할당하는 이유가 있을까요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 경민님.

질문해주신 내용은 ‘왜 업데이트 후 조회를 다시 해야 하는가’에 관한 것입니다. 주어진 코드대로 request Dto의 값을 그대로 response로 사용해도 문제는 없을 수 있습니다만, 정말로 업데이트가 잘 되었는지를 확인하기 위해 추가적인 확인이 필요할 수도 있습니다.

  1. 데이터 일관성: 컨트롤러에서 직접 업데이트한 데이터를 기반으로 응답을 생성하는 경우, 실제 데이터베이스에 저장된 내용과 다를 수 있습니다. DB에 적용되지 않은 이상 상황(예: 트랜잭션 내 오류 등)을 감지하는데 유용합니다.

  2. 서비스 안정성: 대부분의 경우 업데이트가 정상적으로 작동하겠지만, 예기치 않게 DB에 정상적으로 반영되지 않거나 API 오류가 발생할 수 있습니다. 이때 DB에서 데이터를 한번 더 조회해서 반환하면 신뢰성을 높일 수 있습니다.

  3. 비즈니스 로직 보장: 만약 memberService.update() 메소드 내에서 수정 로직이 확장되어 업데이트 데이터와 다른 추가적인 데이터 처리를 하거나 변환을 해야 한다면, 데이터베이스에서 직접 조회하여 가져오는 것이 비즈니스 로직의 일관성을 보장할 수 있습니다.

관련하여 비슷한 질문과 답변이 아래 URL에서 제공되었으니 참고해 주세요:

위 답변에서는 DB 내 상태와 실제로 업데이트된 정보를 일치시키기 위해 findOne(id)을 사용하는 이유를 설명하고 있으며, 이는 API의 신뢰성과 일관성을 높이기 위한 좋은 방법입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

경민님의 프로필 이미지
경민

작성한 질문수

질문하기