← 블로그

Modular Monolith vs Microservice — 왜 나는 먼저 모놀리스를 고른다

한 줄 결론

나는 기본적으로 먼저 Modular Monolith를 고른다. 마이크로서비스는 확장 전략이지, 시작 전략이 아니다.

왜 사람들은 마이크로서비스를 먼저 떠올리나

마이크로서비스는 듣기 좋다.

  • 확장 가능해 보인다
  • 서비스가 독립돼 보인다
  • “큰 회사처럼” 느껴진다

하지만 현실의 초기 제품에서 중요한 문제는 보통 이것이 아니다.

  • 사용자가 아직 많지 않다
  • 팀 규모가 작다
  • 도메인도 아직 흔들린다
  • 서비스 경계도 자주 바뀐다

이런 상황에서 마이크로서비스는 해결책이 아니라, 복잡도 선반입이 되기 쉽다.

Microservice의 실제 비용

마이크로서비스는 코드만 나누는 것이 아니다.

다 같이 생긴다.

  • 서비스 간 통신
  • 배포 파이프라인 여러 개
  • 환경변수와 비밀값 여러 벌
  • 로그/모니터링 분산
  • API 계약 관리
  • 장애 원인 추적 난이도 증가

즉 “서비스를 나눴다”는 말은 사실상 운영 문제를 여러 개로 늘렸다는 뜻이다.

Modular Monolith는 무엇이 다른가

Modular Monolith는 하나의 배포 단위를 유지한다. 대신 내부 구조를 모듈 경계로 강하게 나눈다.

즉,

  • 배포는 하나
  • 런타임은 하나
  • 데이터 저장소도 단순하게 유지 가능
  • 하지만 코드 구조는 기능별 경계가 있음

이게 좋은 이유는, 서비스 경계 실험을 코드 구조 안에서 먼저 해볼 수 있기 때문이다.

내가 먼저 모놀리스를 고르는 이유

1. 운영이 훨씬 단순하다

초기 제품의 제일 큰 병목은 보통 인프라가 아니라 기능 완성과 반복 속도다.

배포가 하나면:

  • 디버깅이 쉽다
  • 환경 관리가 단순하다
  • CI/CD도 단순하다
  • 장애 원인 추적이 빠르다

2. 도메인 경계가 덜 흔들린다

초기에 마이크로서비스로 나누면, 나중에 잘못 자른 경계를 다시 합치기 어렵다.

반면 모놀리스 안에서 모듈 경계를 먼저 잡으면, 실제 사용 패턴을 보면서 “정말 분리할 가치가 있는가”를 판단할 수 있다.

3. 팀 규모와 잘 맞는다

작은 팀이 마이크로서비스를 운영하면 서비스 개수보다 운영 부담이 먼저 터진다.

2~5명 팀에 여러 서비스는 멋져 보일 수는 있어도, 유지 비용이 크다.

언제 마이크로서비스로 갈 것인가

나는 마이크로서비스를 반대하지 않는다. 다만 조건이 있다고 본다.

  • 경계가 충분히 안정됐다
  • 독립 배포 가치가 명확하다
  • 트래픽/조직/장애 분리 요구가 실제로 있다
  • 팀이 그 운영 비용을 감당할 수 있다

이 조건이 모이지 않았는데 먼저 나누면, 대부분은 오버엔지니어링이다.

DAEMON 관점에서 보면

내가 DAEMON 구조에서 강조하는 것은 “지금 필요한 복잡도만 가져온다”는 태도다.

그래서 기본은 이렇다.

  • Vertical Slice
  • 명확한 모듈 경계
  • interface 기반 진입점
  • 하나의 배포 단위

즉 내부는 모듈화하되, 운영은 단순하게 유지한다.

이게 내가 생각하는 현실적인 출발점이다.

마무리

마이크로서비스는 목적이 아니라 수단이다.

대부분의 경우 좋은 시작은 이렇게 정리된다.

  • 먼저 Modular Monolith로 시작한다
  • 내부 경계를 강하게 잡는다
  • 실제로 분리 가치가 생길 때만 나눈다

내 기준에서 좋은 아키텍처는 화려한 아키텍처가 아니라, 지금 필요한 문제를 가장 적은 복잡도로 푸는 아키텍처다.