강의

멘토링

커뮤니티

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

신동훈님의 프로필 이미지
신동훈

작성한 질문수

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

Orders Microservice - 기능 구현 ①

MSA 에서 연관관계 매핑에 대해 질문드립니다

작성

·

1.3K

1

안녕하세요 좋은 강의 항상 감사합니다.

MSA에서 연관관계 매핑을 어떻게 해야 하는지에 대해 질문이 있습니다.

이번 예제에서는 Order의 필드로 UserId를 작성해 주었습니다.

만약 기존의 모놀리스 방식으로 구현하였다면 Order를 작성할 때 @OneToMany를 통해 User와 연관관계 매핑을 해주었을 거 같습니다.

그러나 MSA이므로 User와 Order는 각각의 서비스로 관리되기에 연관관계 설정을 해줄 수 없어 이러한 방식을 사용한 것 같습니다.

 

첫번째 질문은 대부분의 MSA 아키텍쳐에서 서비스간의 연관관계들을 모두 이런 식으로 풀어나가는지 궁금합니다. 

추가로 jpa가 아닌 r2dbc를 사용한다고 하였을 때 r2bdc는 기본적으로 rdb가 아니기 때문에 항상 이런 방식으로만 사용될 수밖이 없을 거 같은데 맞는지 궁금합니다.

두번째 질문은 이러한 방식에서 Order의 정보와 사용자의 정보를 함께 넘겨주어야 할 상황이 생겼을 때 어떻게 대처하는지에 대해서 궁금합니다.

지금의 생각으로는 컨트롤러 단에서 restTemplate등을 사용하여 userService에 정보를 요청하여 반환된 결과를 Order의 정보와 합쳐서 반환하는 방식밖에 떠오르지 않는데 이러한 방법이 맞는 것인지 궁금합니다.

마지막으로는 MSA를 분리하는 방법이 대해서 질문드립다.

DB 테이블 당 서비스 하나를 만드는 것이 맞는지, 혹은 여러 테이블이 하나의 MSA 내에서 같이 사용되는 경우도 있는지 궁금합니다.

예를 들어 기존 모놀리스 방식에서 Order와 Item이 다대다 관계이며 이를 풀어주기 위한 중간 엔티티로 OrderItem을 만들어 중간 테이블의 역할을 하게끔 구현하였을 때, 이를 MSA에서는 Order, Item, OrderItem에 대하여 각각 서비스로 만드는 것이 맞는지에 대한 궁근증이 생겨 질문드립니다.

 

너무 많은 질문 죄송합니다.

답변 1

2

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

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

먼저 강의에 관심을 가져 주셔서 감사의 인사들 드립니다. 

문의하신 질문에 간략하게나마 제 의견을 드립니다.

1. 비동기 방식으로 지원되는 R2DBC는 ORM이 아니기에 개발자가 수동으로 Repository 나 Mapper 를 작성(Repsitory, Mapper내에서 SQL 사용)하서 연관관계(조인)을 해결할 수 있을 것 같습니다. 

https://www.sipios.com/blog-tech/handle-the-new-r2dbc-specification-in-java

2. user-service에서 order-service의 내용을 포함하는 새로운 VO를 반환하거나, 각각의 서비스를 호출하여 반환할 수도 있을 것 같습니다. 다만, MSA의 단점 중에 하나의 서비스간의 호출에 많은 트래픽이 발생하는 부분이 있기 때문에, 이 부분은 요구되는 기능과 서비스 간의 호출의 효율성을 먼저 따져보는게 좋을 긋 합니다. 

3. MSA 구축에 있어서 서비스의 경계를 구분하고 서비스를 분리하는 것은 서비스의 도메인에 따라 달라질겁니다. 서비스의 복잡도와 데이터의 종속성을 고려해서 분리해야 하며, 이러한 복잡도의 문제로 기존에 구축된 레거시 시스템을 MSA화하는 것은 간단하지 않습니다. 경우에 따라서는 분리하지 않는 것이 더 효율적인 경우도 있습니다. 기본적으로는 데이터를 기준으로해서 분리를 고려해 볼 수 있을 것 같습니다. 그렇다고 해서 "테이블=하나의 서비스"라는 공식으로 설계하기에는 데이터의 종속성을 고려해야 합니다. 경우에 따라서는 Order, Item 테이블을 처리하는 부분에 있어 OrderItem라는 서비스를 도출할 수도 있고, OrderItem이라는 테이블을 통해 서비스를 분리할 수 있다고 생각됩니다. 그리고 중요한 부분중에 하나가 서비스를 분리하였을 때, 트랜잭션의 처리, 롤백, 보상 트랜잭션 등도 어떻게 처리해야 할지 고민해야 할 부분인 것 같습니다. 

감사합니다. 

신동훈님의 프로필 이미지
신동훈

작성한 질문수

질문하기