inflearn logo
강의

Course

Instructor

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

Member Modification API

커맨드와 쿼리 분리

Resolved

394

znftm930669

17 asked

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월로 미뤄졌네요ㅠㅠ 빨리 듣고싶어요~

JPA java spring-boot spring

Answer 2

7

yh

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

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

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

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

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

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

감사합니다.

1

znftm930669

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

강의 관련 외 질문입니다.

0

64

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

0

85

1

BeanCreationException

0

86

3

Update 후 UpdateMemberResponse 매핑할 때

0

46

1

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

0

96

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