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

굿데이님의 프로필 이미지
굿데이

작성한 질문수

클론코딩에서 알려주지 않는 것들 (보안, DDD, 마이크로서비스) 2편

Aggregate, Review Entity 구현해보기

review write관련

해결된 질문

작성

·

236

1

안녕하세요. 질문이 많네요.

 

review를 저장하는 코드를 보았습니다..
product를 db에서 읽고,
해당 product관련된 모든 review를 읽고,
새로운 review를 추가하고,
transaction을 걸고,
product 저장하고,
review들을 다시 저장하도록 하는 구조로 보입니다.
어떤 의도인지는 이해는 갑니다.

 

궁금한점은
review만 추가하는데도 기존 product를 저장하려고 시도하는건가요?

만약 기존리뷰들의 저장은 conflict되면 무시하는건가요?
리뷰가 보통 수백 수천건 되는 경우가 많을 텐데 그런건 고려가 안된것일까요?

 

확인 부탁드립니다.

감사합니다.

답변 1

0

애프터캠프님의 프로필 이미지
애프터캠프
지식공유자

이전 질문에 이어서 굉장히 좋은 질문이네요!

말씀하신 부분은 DDD 관련 책(소위 빨간책이라고 불리는...)을 읽어보신 것 같아서 질문을 주신 것 같은데

서비스 초기에는 크게 문제가 없다가 아마 리뷰가 많이 쌓이는 순간 우려하신 대로 성능상 문제가 발생할 것입니다.

review만 추가하는데도 기존 product를 저장하려고 시도하는건가요?

분명히 퍼포먼스 관점에선 리뷰만 따로 저장하는 것이 훨씬 효율적으로 보이는데 강의를 수강하시는 분들이 이제 DDD를 입문하거나 이전에 이론으로만 배우시는 분들일 것 같아서 Aggregate 내부에 있는 Entity는 consistency 유지를 위해서 Aggregate root를 통해서만 저장한다라는 내용을 강조하기 위해서 그렇게 구현을 했습니다.

만약 기존리뷰들의 저장은 conflict되면 무시하는건가요?

강의에선 이런 디테일한 상황까지 고려하진 않았습니다.

그리고 가장 중요한 질문이

리뷰가 보통 수백 수천건 되는 경우가 많을 텐데 그런건 고려가 안된것일까요?

이 부분일 것 같은데요. 만약에 이걸 성능 개선을 한다면 어떻게 하면 좋을까요? 엔지니어로서 어쩔 수 없이 엄밀한 이론을 적용하기 보다는 trade-off를 따져서 어느 정도는 예외를 두어야 할 것 같습니다. 제가 지금 생각할 수 있는 아이디어는 (이 아이디어는 깊게 생각한게 아니라 이렇게도 할 수 있다 정도만 생각해주세요 🙏)
1. ProductRepository를 통해서 저장하는 것이 아니라 리뷰를 바로 저장할 수 있도록 해주고

  1. 저장이 완료되면 isTopRated 를 업데이트할 것인지 판단하는 로직 실행

     


    정도가 될 것 같습니다.



굿데이님의 프로필 이미지
굿데이
질문자

친절하고 빠른 답변 감사드립니다.

서비스를 제대로 만들어본 적이 없어서 모르는게 너무 많네요. ㅎㅎ

강의가 많은 도움이 되고 있습니다.

굿데이님의 프로필 이미지
굿데이

작성한 질문수

질문하기