[개인 아키텍처 시스템 #4] 경계를 미리 그어두면 MSA로 바로 접목된다

개인 아키텍처 시스템 시리즈

  1. #1 왜·어떻게 만들었나
  2. #2 포트 기반 baseline
  3. #3 인프라 concern 조립
  4. #4 MSA 즉시 접목 — 지금 이 글

시리즈를 관통하는 하나의 목적이 있다. 지금은 모듈러 모놀리스로 편하게 개발하되, 경계가 뚜렷해지는 순간 곧바로 마이크로서비스로 떼어낼 수 있게 만드는 것. 이 시스템의 포트/어댑터 규칙은 결국 그 “떼어내기”를 쉽게 하려고 존재한다.

1. 한 장으로 보는 전환

포트/어댑터로 경계를 미리 그어 두면, 경계가 굳는 순간 서비스로 분리된다 (원본 제작)
포트/어댑터로 경계를 미리 그어 두면, 경계가 굳는 순간 서비스로 분리된다 (원본 제작)

왼쪽은 지금의 모습 — 하나의 프로세스 안에 여러 UseCase가 이미 포트로 경계 지어져 있다. 오른쪽은 전환 후 — 경계가 굳으면 각 UseCase 묶음이 독립 서비스가 되고, 서비스 사이는 비동기 이벤트 버스(MQ)로 잇는다. 핵심은, 이 전환에서 UseCase·Domain 코드는 거의 바뀌지 않는다는 점이다. 새로 생기는 건 메시지큐 어댑터와 서비스 경계뿐이다.

2. 전환을 떠받치는 것들

  • 포트 경계(2편) — 서비스로 자를 선이 이미 그어져 있다.
  • 메시지큐 어댑터 — Consumer는 구동 어댑터(HTTP 핸들러 자리), Publisher는 outbound port. 이 배치는 Go 아키텍처 #2에서 코드로 다뤘다.
  • 이벤트/보상 트랜잭션 — 서비스 간은 이벤트로 잇고, 실패는 Saga 보상으로 되돌린다. EDA·MSA 편의 원리 그대로.
  • 패턴마다 MSA 역할 명시 — 14-섹션 중 “MSA에서의 역할”이 있어, 각 패턴이 서비스 경계에서 어떻게 놓이는지 미리 적어 둔다.

3. 마무리

정리하면 이 시스템은 ‘모놀리스로 시작하되, 언제든 MSA로 자랄 수 있게 경계를 먼저 그어 두자’는 하나의 원칙을 언어·인프라·배포 전반에 일관되게 새긴 것이다. 시작은 단순했다 — 한 번 삽질해 뚫어낸 환경 세팅을 두 번 반복하지 않도록 플러그인·스킬로 굳히고, 잘 연구된 오픈소스 프레임워크 스킬 중 필요한 것만 골라 모으는 것. 그렇게 취합한 ‘플러그인 스킬 모음’을 앞으로도 계속 손보며 키워 갈 생각이다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다