🖥️ CS/Architecture

[마이크로서비스 아키텍처 구축] 2. 마이크로서비스 모델링 방법

한국의 메타몽 2024. 10. 16. 01:24
book

해당 글은 마이크로서비스 아키텍처 구축에서 학습한 내용을 다룹니다.

목차

  1. 올바른 마이크로서비스의 경계
  2. 결합 유형
  3. DDD
  4. 핵심 요약

 

1. 올바른 마이크로서비스의 경계

  • MSA에서 서비스는 응집력이 강하고 결합도가 낮으면 구조가 안정적
    • 응집력 : 경계선 내부의 사물끼리의 관계
    • 결합도 : 경계선 안의 사물과 경계선 밖의 사물과의 관계



2. 결합 유형

(1) 통과 결합

  • 데이터가 다른 하위 마이크로서비스에 필요하다는 이유만으로 한 마이크로서비스가 다른 마이크로서비스에 데이터를 전달하는 상황
    • 주문 서비스 --> 배송 목록 데이터 전달 --> 창고 서비스 --> 배송 목록 데이터 전달 --> 배송 서비스
  • 만약 최하위 배송 서비스에서 데이터 변경이 일어나면, 윗단계를 계속 거슬러 올라가 데이터 변경을 요구하는 상황이 발생할 수 있음
  • 따라서 위와 같이 창고 서비스를 거쳐서 전달하지 말고, 주문 서비스에서 배송 서비스로 바로 데이터를 전달하는 느슨한 도메인 결합의 형태도 방법이 될 수 있음

(2) 시간적 결합

  • 주문 처리 서비스에서 --> 동기식 블로킹 네트워크 호출로 --> 창고 서비스의 연결을 시도한다고 가정할때,
    창고 서비스가 연결되지 않으면 호출은 실패하며, 이것은 시간적 결합을 뜻함
  • MSA에서 서비스가 늘어나 상호작용이 복잡해지면 시간적 결합 문제가 문제가 증가하며, 이를 피하기 위한 방법은 메세지 브로커와 같은 비동기 통신을 사용하는 것

(3) 공통 결합

  • 둘 이상의 마이크로서비스가 공통 DB에 접근할 때 발생
    • 주문 처리 서비스 (주문 접수, 지불 완료, 주문 완료 상태 설정)---> 주문 테이블 <--- (집품, 발송 완료 상태 설정) 창고 기록 서비스
      • 주문 처리 서비스와 창고 기록 서비스의 요청에 따라 주문 테이블에 상태값이 변경되는 구조
  • 사가(SAGA) 패턴이 이를 관리하는데 도움이 되며, 쉽게 비유하면 아래와 같이 중간에 상태 변경을 요청하는 서비스를 하나 두는 것
    • 주문 처리 서비스, 창고 기록 서비스 (상태 변경 요청) ---> 주문 코어 서비스 ---> 주문 테이블
  • 사가(SAGA) 패턴은 추후 다룰 예정



3. DDD (Domain Driven Design, 도메인 주도 설계)

(1) 보편 언어

  • 쉽게 말해 실제로 사용자가 쓰는 언어를 코드에서 동일하게 사용하려고 노력하자
  • ex : 사용자가 '상품'이라고 현실세계에서 말해준다면 개발할때 'Product'이라고 변수명을 지으려고 노력하자

(2) 애그리거트 (Aggregate)

  • 객체들의 집합
  • 일반적으로 실제 세계 개념과 관련된 하나의 객체로 관리됨
  • ex : '회원'이라는 애그리거트에는 회원 정보, 회원 멤버십이 존재할 수 있음
  • 하나의 마이크로서비스는 여러 애그리거트를 관리할 수 있지만, 애그리거트는 하나의 마이크로서비스에서 관리되어야 함

(3) 경계 콘텍스트 (Bounded Context)

  • 더 큰 범위의 시스템에 대한 기능을 제공하지만, 복잡성을 숨기는 비즈니스 도메인 내부의 명시적인 경계
  • ex : '카탈로그'라는 경계 콘텍스트에는 '상품'과 '카테고리' 라는 애그리거트가 존재할 수 있음
  • 하나 이상의 애그리거트를 반드시 포함



4. 핵심 요약

  1. 여러 서비스를 거쳐야 할때
    • ex ) 주문 서비스 --> 배송 목록 데이터 전달 --> 창고 서비스 --> 배송 목록 데이터 전달 --> 배송 서비스
    • 느슨한 도메인 결합으로 최초 호출 서비스에서 다른 서비스들로 바로 데이터를 전송
  2. 동기 - 블로킹 네트워크 호출의 실패
    • 메시지 브로커와 같은 비동기 형태를 사용 (ex : Kafka, RabbitMQ)
    • 서버가 다운되어 네트워크 호출에 실패하더라도 메세지가 유실되지 않고 저장됨
  3. 공통 DB에 데이터를 접근할 때
    • 중간에 상태 변경을 관리하는 서비스를 마이크로서비스를 두기
    • 사가(SAGA) 패턴 도입 고려