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

황주환님의 프로필 이미지
황주환

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

데이터 동기화에 대해 질문이 있습니다1

작성

·

210

0

안녕하세요 도원선생님 

선생님의 강의를 바탕으로 스프링클라우드를 활용하여 마이크로서비스를 만드는 연습을 하고 있습니다.

현재 강의에서 3개의 도메인을 가지고 예제를 진행하셨는데

혹시 상품의 이름이 변경되었을 경우 주문에서의 상품 이름은 어떻게 변경되게할지 고민입니다.

예를 들면 상품이 업데이트 할 경우 Kafka에 메세지를 보내고 주문 서비스에서 메세지를 수신한뒤 업데이트 된 상품 이름에 대해 수정하면 된다고 생각했는데 이게 맞는 걸까요...?

그리고 혹시 만약 상품을 여러개 주문할 수 있다고 가정할 시 

주문 이라는 애그리거트 안에 주문_상품이라는 엔티티가 생길거 같습니다.

그러면 주문 과 관련된 모든 상품에 대한 정보를 조회하는 기능을 구현할 때는 

주문_상품에 있는 상품과 관련된 상품 id나 상품 코드를 List로 만든뒤 상품 서비스에 가서 In쿼리로 조회하고 나서 응답하는 걸까요??

답변 2

1

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다. 

위에 kkkh0712님이 말씀하신 것 처러, 주문 정보에는 상품에 대한 기본 키(ID 등)만 저장하면 됩니다. 상품명에 대한 변경은 상품에 관련있는 정보이지, 주문 자차에 대한 정보가 아니기에, 주문-상품 간의 관계에서는 관계키로 사용될 수 없습니다. 그리고 주문에 여러 상품이 사용되었을 때도, 주문 하나에 여러 상품에 연결되어 하는 것이기 때문에, 주문에는 상품들에 대한 전체 금액이나 주문자, 주문 시간 등을 기록하고, 주문에 사용된 각 상품들은 별도로 저장하는 것이 좋을 것 같습니다. 예를 들어 1번 상품의 상품ID, 가격, 수량, 금액, 2번 상품의 상품 ID, 가격, 수량, 금액 등을 기록하면 될 것 같습니다. 이 때 상품의 이름이 변경되었다고 해서, 전체 주문내역이나 주문의 상세내역에서 상품명을 변경하지는 않습니다. 

다음으로, 주문과 관련된 모든 상품에 대한 조회를 할 때도 개별적인 상품 ID를 따로 저장하고 있었기 때문에, 상품 자체의 상세 정보를 얻기 위해서는 상품에서 상품 ID들만 조회하면 될 것 같습니다. 물론 In 쿼리를 사용하시면 되겠네요. 

감사합니다. 

0

주문 정보에 상품 이름이 있을 필요는 없어보입니다. 상품의 id만 가지고있으면 되지 않을까요?

황주환님의 프로필 이미지
황주환
질문자

그러면 주문_상품에 상품 이름이 없고 상품ID만 가지고 있다면 상품서비스에서 In쿼리로 조회하고 응답하는게 맞는건가요?

황주환님의 프로필 이미지
황주환

작성한 질문수

질문하기