• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

MSA 에서 연관관계

22.11.04 15:35 작성 조회수 648

0

안녕하세요 강의를 보던 도중 질문이 생겼습니다.

 

보통 JPA 서비스 설계시 모놀로틱한 서비스에서 서로 다른 엔티티를 연관관계를 통해 데이터베이스 JOIN 을 이용하여 서비스 하는것으로 알고 있습니다.

 

그러나 MSA 환경에서는 데이터베이스 자체가 분리되어 있는 상태여서 해당 방식은 불가능 하다는 것을 이전 여러 질문들을 통해 알게 되었습니다.

이러한 점을 해결할 방식을 찾는 도중 DDD를 이용하여 관점을 분리하고 연관된 엔티티들을 묶어 Aggregator 개념으로 묶어서 사용한다는 글들을 알게 되었습니다.

 

여기서 질문인 점은 Aggregator로 연관된 엔티티를 묶는 다는 의미가

  • 하나의 마이크로 서비스에 여러 엔티티를 두어 기존 사용하던 JPA 연관관계처럼 사용한다는 것인지

  • 아니면 분리된 두 서비스는 각자 두고 상위 서비스를 다시 선언하여 해당 서비스에서 연관된 두 엔티티를 조회하여 묶어서 사용하는 것인지 궁금합니다.

 

아니면 제가 아예 Aggregator 라는 개념을 잘못 이해한 것일까요?

답변 1

답변을 작성해보세요.

1

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

질문하신 Aggregator의 2개의 정의에 중에 어느 하나가 정답이라고 고르기 보다는 아래의 정의를 참고해서 해석을 달리 할 수 있을 것 같습니다.

Aggregate는 하나의 트랜잭션의 단위이자 서비스의 경계를 의미. 1개 이상의 엔티티로 구성되며, 다수의 엔티티로 구성될 경우 루트 Aggregate에서 일반화 정보를 처리할 수 있음

 

위에 정의한 내용을 바탕으로 설명해 보면, MS는 반드시 하나의 엔티티만을 구성하여 처리해야 한다는 조건이 있는 것이 아닙니다. 작업하고자 하는 서비스의 단위(경계)에 필요한 다수의 엔티티들을 가지고 있는 MS를 사용할 수 있으며, 이를 구성할 때, 1개 이상의 엔티티로 구성되어야 하는 서비스도 가능하고, 하나의 엔티티에서 서비스에 필요한 데이터를 처리할 수도 있습니다. 어떻게 보면 1번째 정의 내리신 부분이 위에 정의한 의미에 가깝다고 볼 수도 있지만, 2번째 정의 내리신 내용도 일부 적용해서 해석하는 것이 필요하다고 생각됩니다.

감사합니다.