Microservice Architecture의 핵심은 기술이 아니라 경계다

마이크로서비스 아키텍처(MSA)를 이야기할 때 많은 팀이 먼저 고민하는 것은 기술 스택이다.

  • 어떤 언어를 사용할 것인가
  • 어떤 프레임워크를 사용할 것인가
  • Java로 통일할 것인가
  • Node.js를 사용할 것인가

하지만 실제로 MSA를 운영해 보면
기술 스택보다 훨씬 중요한 요소가 있다.

바로 서비스 경계(Service Boundary)다.

MSA에서 시스템의 성공 여부는
어떤 기술을 선택했느냐보다 서비스를 어떻게 나누었느냐에 의해 결정되는 경우가 많다.


1. MSA의 목적은 기술이 아니라 복잡성 관리

MSA의 목적은 단순히 시스템을 여러 개의 서비스로 나누는 것이 아니다.

MSA가 등장한 이유는 다음 문제를 해결하기 위해서였다.

  • 거대한 모놀리식 시스템의 복잡성
  • 기능 간 강한 결합도
  • 배포의 어려움
  • 장애 확산

즉 MSA의 목적은

 
복잡성을 관리하고
변경 영향을 줄이며
서비스를 독립적으로 운영하는 것
 

이다.

이 목적을 달성하기 위해 가장 중요한 요소가
바로 서비스 경계 설계다.


2. 서비스 경계가 잘못되면 기술이 좋아도 실패한다

서비스 경계가 잘못 설계된 시스템은
어떤 언어를 사용해도 문제가 발생한다.

예를 들어 다음과 같은 상황을 생각해 보자.

  • 사용자 서비스
  • 주문 서비스
  • 결제 서비스

이 세 서비스가 있다고 가정한다.

하지만 실제 구현에서 다음과 같은 일이 벌어진다면 문제가 생긴다.

  • 주문 서비스가 사용자 테이블을 직접 조회
  • 결제 서비스가 주문 테이블을 직접 수정
  • 사용자 서비스가 주문 상태를 업데이트

이 경우 서비스는 나뉘어 있지만
실제로는 하나의 시스템처럼 강하게 연결되어 있다.

이런 구조를 보통 분산 모놀리스(Distributed Monolith)라고 부른다.

즉 서비스 경계가 잘못되면
MSA의 장점은 사라지고 복잡성만 증가한다.


3. 서비스 경계의 핵심은 “책임 분리”

좋은 서비스 경계는 책임(Responsibility) 기준으로 나뉜다.

예를 들어 전자연구노트 시스템을 생각해 보자.

다음과 같은 도메인이 존재할 수 있다.

  • 인증 서비스
  • 연구노트 서비스
  • 템플릿 서비스
  • 인벤토리 서비스
  • 검색 서비스

각 서비스는 자신의 도메인 책임만 가진다.

예를 들어

  • 인증 서비스 → 사용자 인증과 권한 관리
  • 연구노트 서비스 → 노트 생성, 수정, 상태 관리
  • 인벤토리 서비스 → 샘플, 시약, 장비 관리

이렇게 책임이 명확하면

  • 변경 영향이 줄어들고
  • 서비스 독립성이 높아지고
  • 배포가 쉬워진다.

4. 데이터 소유권이 서비스 경계를 만든다

MSA에서 중요한 원칙 중 하나는 데이터 소유권(Data Ownership)이다.

각 서비스는 자신의 데이터를 소유해야 한다.

예를 들어 다음과 같은 구조가 있을 수 있다.

서비스데이터
Auth Service users
ELN Service notes
Inventory Service samples
Search Service search index

다른 서비스가 필요할 경우에는
DB를 직접 접근하는 것이 아니라 API나 이벤트를 통해 접근한다.

이 원칙이 깨지면 다음 문제가 발생한다.

  • 서비스 간 강한 결합
  • 데이터 정합성 문제
  • 배포 의존성 증가

데이터 경계가 곧 서비스 경계다.


5. 기술 스택은 서비스 경계보다 덜 중요하다

서비스 경계가 명확하면
언어와 기술 스택은 비교적 유연하게 선택할 수 있다.

예를 들어 다음과 같은 구조도 가능하다.

 
API Gateway → Node.js
Auth Service → Node.js
Order Service → Java
AI Service → Python
 

이 구조가 가능한 이유는
서비스 간 통신이 다음과 같은 언어 독립적인 방식으로 이루어지기 때문이다.

  • HTTP API
  • gRPC
  • 메시지 큐
  • 이벤트 버스

즉 서비스 간 계약이 API로 정의되어 있다면
내부 구현 언어는 크게 중요하지 않다.

그래서 MSA 환경에서는
Polyglot Architecture가 자연스럽게 등장한다.


6. 좋은 MSA 설계의 기준

좋은 마이크로서비스 아키텍처는 다음 특징을 가진다.

  • 서비스 책임이 명확하다
  • 데이터 소유권이 분리되어 있다
  • 서비스 간 의존성이 낮다
  • 서비스가 독립적으로 배포된다
  • 장애가 전체 시스템으로 확산되지 않는다

이 기준들은 기술 스택과 거의 관계가 없다.

즉 MSA의 핵심은

 
기술 선택
 

이 아니라

 
경계 설계
 

다.


정리

MSA에서 많은 팀이 기술 스택에 집중하지만
실제로 더 중요한 것은 서비스 경계다.

정리하면 다음과 같다.

  • MSA의 목적은 복잡성 관리다
  • 서비스 경계는 책임과 데이터 소유권으로 결정된다
  • 경계가 잘못되면 분산 모놀리스가 된다
  • 기술 스택은 서비스 경계보다 중요하지 않다

좋은 아키텍처는
특정 기술을 선택하는 것에서 시작되지 않는다.

좋은 경계를 설계하는 것에서 시작한다.

LIST

+ Recent posts