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

이지훈님의 프로필 이미지

작성한 질문수

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

회원 수정 API

커맨드와 쿼리 분리

해결된 질문

작성

·

296

3

MemberService의 update 메서드에서 Member를 그대로 반환하지 않는 이유가 커맨드와 쿼리를 분리하기 위해서라고 하셨는데 정확히 이해가 가지 않습니다 ㅠ

1. Member를 update 메서드에서 그대로 반환하면 왜 영속상태가 끊킨 Member가 반환이 되나요?

2.
Member를 그대로 반환하면
updateMemberV2 메서드에서

Member member = memberService.update(id, request.getName());
return new UpdateMemberResponse(member.getId(), member.getName());

이런식으로 되면 오히려 강의에서
수정한 Member를 찾는 Select 쿼리 안날라가서 커맨드와 쿼리를 분리할 필요가 없는게 아닌가요..?

* 여담으로 스프링 MVC 강의 11월에 출시된다고해서 기다리고있었는데 12월로 미뤄졌네요ㅠㅠ 빨리 듣고싶어요~

답변 2

7

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 지훈님 좋은 질문입니다^^

1. JPA는 기본으로 트랜잭션 범위를 넘어가면 영속성 컨텍스트도 종료됩니다. 그래서 member의 영속상태가 유지될 수 없습니다.

2. 커멘드와 쿼리를 분리하는 것은 단순히 효율성을 넘어, 코드를 유지보수 하기 쉽게 만드는 방법중 하나입니다.

변경을 하는 메서드와 단순히 조회를 하는 메서드를 아주 명확하게 분리해버리면, 변경 코드는 변경에만 집중하고, 조회 코드는 조회에만 집중할 수 있습니다.

개발하는 코드 분량이 작을 때는 이런 부분들이 크게 부각되지 않는데, 개발하는 코드 분량이 많고, 복잡할 수 록, 이런식으로 나누어 설계하면 관심사가 분리되어서 코드를 유지보수하기 쉽습니다.

하지만 이것이 딱 정답은 아니고, 생각하신 것 처럼 조회를 한번 더 해야 하기 때문에 상황에 따라 트레이드 오프가 있습니다.

감사합니다.

1

이지훈님의 프로필 이미지
이지훈
질문자

도움 많이 됬습니다. 항상 감사합니다!