inflearn logo
강의

Course

Instructor

Real-world! Spring Boot and JPA Utilization 2 - API Development and Performance Optimization

Member Modification API

Update 후 UpdateMemberResponse 매핑할 때

46

king92435635

40 asked

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에 할당하는 이유가 있을까요?

java spring spring-boot jpa

Answer 1

0

communityai8509

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

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

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

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

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

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

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

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

강의 관련 외 질문입니다.

0

64

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

0

85

1

BeanCreationException

0

86

3

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

0

97

2

페이징 + 검색조건 관련해서 질문드립니다.

0

70

1

Query Dsl Q파일 질문입니다.

0

81

1

루트 쿼리라는것은

0

58

1

메서드를 분리하는 기준

0

61

1

findAllWithMemberDelivery 메서드 질문드립니다.

0

108

3

연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략

0

83

2

fetch join과 영속화와 OSIV의 관계

0

83

2

Distinct 사용 전 결과에 대한 의문

0

113

2

레포지토리 계층에서의 트랜잭션에 대한 의문

0

55

1

영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.

0

77

2

dto 필드 속 엔티티 여부

0

58

1

뷰템플릿 사용 시

0

76

2

Result 클래스 관련 질문

0

56

1

@PostConstruct 프록시 관련 질문드립니다

0

85

1

DTO 대신 Form 사용은 안되나요?

0

133

1

OSIV ON 상태일 때

0

95

1

fetch join VS fetch join 페이징 궁금증

0

179

2

양방향 연관관계 알아보는 법?

0

104

1

16강 17강 간단 정리 이게 맞을까요 ?

0

165

2

데이터 초기화 시 CASCADE 옵션 궁금증

0

89

2