강의

멘토링

커뮤니티

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

snaiws님의 프로필 이미지
snaiws

작성한 질문수

Microservice 설계(with EventStorming,DDD)

마이크로서비스 개념 다시 살펴보기

MSA 질문이 있습니다

작성

·

26

0

안녕하세요

msa에서 db를 각자 쓰게되는 패턴이라면 join이 깨지지 않나 하는 생각이 들었습니다.

혹시 join을 하다가 db가 나뉘게되어 쿼리 효율이 떨어지는 경우도 있을까요?

아니면 애초에 join이 안쓰이기 때문에 마이크로서비스로 분리가될까요

 

예를들어 사용통계같은걸 볼 땐 모노리스에서 msa 전환 전에 join이 들어갈 수 있을 것 같은데, db가 나뉘어버리면 join을 못쓰는거죠? 그럼 msa 전환해야한다면 그때가 데이터레이크를 만들 타이밍인걸까요?

답변 1

0

han jeong heon님의 프로필 이미지
han jeong heon
지식공유자

네 강의자입니다. 하나하나 답변드리면,

  1. db를 나누면 조인이 깨지나?

네. 서비스가 각각 DB를 가지면(독립 DB) 기본적으로 DB 레벨 JOIN은 못 합니다.
그래서 MSA에서는 보통 이렇게 바꿉니다.

(A) 조회 JOIN → “API 조합(Composition)”

  • 화면/조회가 필요하면

    • BFF/조회용 API가 여러 서비스에서 데이터를 가져와 애플리케이션에서 합쳐서 내려줌

  • 단점: 호출이 여러 번(네트워크 비용), 성능/장애 전파 고려 필요

(B) 조회 JOIN → “읽기 전용 모델(Projection) / CQRS”

  • 자주 쓰는 조회는

    • 이벤트/동기화로 읽기 전용 테이블을 따로 만들어서

    • 거기서는 JOIN이 가능하게 만듦

  • 실무에서 제일 흔한 해법 중 하나

  1. 그럼 JOIN 하다가 DB 나뉘면 쿼리 효율 떨어지나요?”

그럴 수 있어요. 특히 “모노리스에서 SQL JOIN 한 방”이던 걸
MSA에서 “서비스 3개 호출 + 조합”으로 바꾸면 지연이 늘 수 있습니다.

그래서 전환 시 판단 기준을 이렇게 잡으면 됩니다.

JOIN이 많은데도 MSA로 가야 하는 경우

  • 팀/배포/확장/장애 격리가 더 중요할 때

  • 도메인이 커져서 변경 영향도가 너무 클 때

JOIN이 너무 핵심이고 실시간/고성능이 절대 조건이면

  • 무리하게 쪼개지 않거나

  • 쪼개더라도 조회는 별도 읽기 모델로 풀어야 합니다(CQRS/Projection)

  1. 데이터 레이크 만들 타이밍?

네, 바로 데이터레이크로 가는 건 아닙니다.
보통은 CQRS, 머터리얼라이즈드 뷰, 읽기 전용 조회 서비스를 먼저 고려하고,
그걸로 감당이 안 될 만큼 데이터 양·조회 복잡도·분석 요구가 커질 때
데이터레이크(DWH/레이크하우스)로 가는 게 일반적인 순서입니다.

감사합니다.

snaiws님의 프로필 이미지
snaiws

작성한 질문수

질문하기