coredot.today
모놀리식 vs 마이크로서비스 특집: 아키텍처 선택의 영원한 논쟁, 끝장 정리
블로그로 돌아가기
모놀리식마이크로서비스MSA아키텍처SOA도메인데이터베이스

모놀리식 vs 마이크로서비스 특집: 아키텍처 선택의 영원한 논쟁, 끝장 정리

Amazon은 마이크로서비스의 선구자인데, Amazon Prime Video는 마이크로서비스에서 모놀리식으로 돌아갔다. Netflix는 MSA의 교과서인데, 초기에는 모놀리식이었다. 정답은 무엇인가? 역사·논문·실패 사례·데이터베이스 전략까지 — 이 논쟁의 끝장을 내본다.

코어닷투데이2026-03-1932

들어가며: Amazon이 마이크로서비스를 버렸다?

2023년 3월, 기술 커뮤니티를 뒤흔든 블로그 글이 하나 올라왔다.

Amazon Prime Video 팀이 자사의 비디오 품질 모니터링 시스템을 마이크로서비스에서 모놀리식으로 전환했다는 것. 결과: 비용 90% 절감.

Amazon — 마이크로서비스의 선구자, "Two-Pizza Team"의 발명자, 서비스 지향 아키텍처의 상징 — 이 모놀리식으로 돌아갔다?

이 소식은 즉시 바이럴이 됐다. "마이크로서비스는 과대평가됐다", "모놀리식이 답이다" vs "문맥을 무시한 해석이다", "특수한 경우일 뿐이다" — 논쟁이 격렬했다.

이 글에서는 이 영원한 논쟁을 역사, 논문, 실패 사례, 데이터베이스 전략까지 포함하여 끝장 정리해 보겠다.


1. 모놀리식이란: "하나의 거대한 성"

정의

모놀리식 아키텍처(Monolithic Architecture) 는 애플리케이션의 모든 기능이 하나의 코드베이스, 하나의 배포 단위, 하나의 프로세스에 포함된 구조다.

쇼핑몰을 예로 들면: 사용자 인증, 상품 조회, 장바구니, 주문, 결제, 배송 추적, 리뷰 — 이 모든 기능이 하나의 애플리케이션 안에 있다. 하나의 WAR 파일, 하나의 Docker 이미지로 배포된다.

비유: "거대한 성". 모든 방(기능)이 하나의 건물에 있다. 성 안에서는 이동이 자유롭고 빠르다. 하지만 화장실을 수리하려면 성 전체를 셧다운해야 할 수도 있다.

모놀리식의 장점

장점설명
단순함하나의 코드베이스, 하나의 배포, 하나의 DB. 이해하기 쉬움
개발 속도 (초기)프로젝트 시작이 빠르다. 서비스 간 통신 오버헤드 없음
디버깅 용이모든 코드가 한 곳에. 스택 트레이스가 완전함
트랜잭션 용이하나의 DB, 하나의 트랜잭션으로 데이터 일관성 보장
배포 단순하나를 빌드하고 하나를 배포하면 끝
인프라 비용서비스 간 네트워크 호출 없음. 오버헤드 적음

모놀리식의 한계

한계설명
코드베이스 비대화수백만 줄이 되면 빌드에 수십 분, 이해에 수 주
배포의 공포작은 변경도 전체를 다시 배포. "금요일에 배포 금지"
기술 종속전체가 하나의 언어/프레임워크. Python 서비스에 Go를 쓸 수 없음
확장의 한계주문만 바쁜데 전체를 복제해야 함. 자원 낭비
장애 전파결제 서비스의 메모리 누수가 전체를 죽일 수 있음
팀 간 충돌10개 팀이 하나의 코드베이스를 수정. 머지 충돌의 지옥

2. 마이크로서비스란: "전문가 마을"

정의

마이크로서비스 아키텍처(Microservices Architecture) 는 애플리케이션을 작고 독립적인 서비스들의 집합으로 구성하는 방식이다. 각 서비스는 독립적으로 개발·배포·확장된다.

같은 쇼핑몰에서: 사용자 서비스, 상품 서비스, 주문 서비스, 결제 서비스, 배송 서비스, 리뷰 서비스 — 각각이 독립된 팀이 운영하는 독립된 서비스다.

비유: "전문가 마을". 빵집, 우체국, 은행, 병원이 각각 별도의 건물에 있다. 각 건물을 독립적으로 수리·확장할 수 있다. 하지만 빵을 사서 은행에서 결제하려면 건물 사이를 이동해야 한다.

마이크로서비스의 장점

장점설명
독립 배포결제 서비스만 업데이트 가능. 다른 서비스 영향 없음
기술 다양성주문은 Java, 추천은 Python, 실시간은 Go — 적재적소
독립 확장주문 서비스만 10배로 스케일 아웃
장애 격리리뷰 서비스가 죽어도 주문은 정상 작동
팀 자율성각 팀이 자기 서비스를 완전히 소유. Conway's Law 실현
기술 부채 관리한 서비스를 완전히 재작성해도 다른 서비스 영향 없음

마이크로서비스의 비용

비용설명
분산 시스템의 복잡성네트워크 장애, 데이터 일관성, 분산 트랜잭션
운영 오버헤드서비스 50개 = 모니터링·배포·로깅 50배
서비스 간 통신네트워크 지연, 직렬화/역직렬화 비용
데이터 관리서비스별 DB → JOIN 불가, 데이터 일관성 어려움
디버깅 난이도분산 트레이싱 없이는 문제 추적 불가능
인프라 비용API Gateway, 서비스 메시, 메시지 큐, 로드밸런서...

3. 역사: 이 논쟁은 어디서 시작됐는가

SOA: 마이크로서비스의 할아버지 (1990~2000년대)

마이크로서비스 이전에 SOA(Service-Oriented Architecture)가 있었다. 2000년대 엔터프라이즈 IT의 핵심 트렌드. 시스템을 서비스로 분리하고 ESB(Enterprise Service Bus) 로 연결하는 구조.

SOA의 문제: ESB가 거대한 중앙 집중형 미들웨어로 성장하며, 그 자체가 모놀리식이 되어버림. "분산 모놀리스"라는 최악의 결과.

Amazon의 "API 의무화" 메모 (2002)

2002년, Jeff Bezos가 Amazon 전 직원에게 보낸 유명한 메모:

  1. 모든 팀은 데이터와 기능을 서비스 인터페이스로 노출해야 한다
  2. 팀 간 통신은 이 서비스 인터페이스를 통해서만 이루어져야 한다
  3. 다른 통신 방식은 허용되지 않는다. 직접 DB 접근, 메모리 공유 모두 금지
  4. 어떤 기술을 쓰든 상관없다
  5. 모든 서비스 인터페이스는 외부에 공개 가능하도록 설계해야 한다
  6. 이를 따르지 않는 사람은 해고된다

이것이 서비스 지향 아키텍처의 실전 선언문이다. 이 메모가 Amazon을 "마이크로서비스의 선구자"로 만들었고, 궁극적으로 AWS(외부 공개 가능한 서비스)의 탄생으로 이어졌다.

Martin Fowler & James Lewis: "마이크로서비스" 정의 (2014)

Martin FowlerJames Lewis가 2014년에 발표한 블로그 글 "Microservices"가 이 용어를 공식적으로 정의했다:

"마이크로서비스 아키텍처는 단일 애플리케이션을 작은 서비스들의 모음으로 개발하는 접근법이다. 각 서비스는 자체 프로세스에서 실행되고, 경량 메커니즘(보통 HTTP)으로 통신한다."

Netflix: MSA의 전도사 (2009~)

2009년, Netflix는 모놀리식에서 마이크로서비스로의 전환을 시작했다. 데이터센터 장애를 계기로, AWS로의 마이그레이션과 함께 수백 개의 마이크로서비스로 분해했다. 이 경험을 Zuul, Eureka, Hystrix, Ribbon 등의 오픈소스로 공개하며 MSA의 전도사가 됐다.

1990s~
SOA + ESB
서비스 분리 시도, 하지만 ESB가 거대한 중앙 집중형으로 성장
2002
Bezos의 "API 의무화" 메모
Amazon 내부의 서비스 지향 전환. MSA의 실질적 시작점
2009~
Netflix: 모놀리식 → MSA 전환
AWS 마이그레이션과 함께 수백 개 마이크로서비스로. OSS 공개
2014
Fowler & Lewis: "마이크로서비스" 정의
용어와 원칙을 공식 정립. MSA 붐의 시작
2020~
"모놀리식도 괜찮다" 반성의 시대
Kelsey Hightower "모놀리식은 미래다" 트윗. DHH의 "마제스틱 모놀리스"
2023
Amazon Prime Video: MSA → 모놀리식 전환
비용 90% 절감. "MSA가 항상 답은 아니다" 논쟁 재점화

4. 핵심 개념: Conway's Law와 도메인 주도 설계

Conway's Law: "조직 구조 = 시스템 구조"

1967년, 프로그래머 Melvin Conway가 발표한 법칙:

"시스템의 구조는 그것을 설계한 조직의 커뮤니케이션 구조를 반영한다."

5명이 한 팀이면 → 모놀리식이 자연스럽다. 50명이 10개 팀이면 → 각 팀이 자기 서비스를 가지는 마이크로서비스가 자연스럽다.

💡
역 Conway's Maneuver: "시스템을 마이크로서비스로 만들고 싶다면, 먼저 팀을 마이크로서비스에 맞게 재편하라." 조직 구조를 바꾸지 않고 아키텍처만 바꾸면, 결국 "분산 모놀리스" — 최악의 결과가 나온다.

DDD(Domain-Driven Design): 서비스를 어떻게 나누는가

마이크로서비스에서 가장 어려운 질문: "어디서 나눌 것인가?"

Eric Evans의 2003년 저서 "Domain-Driven Design"에서 제안한 바운디드 컨텍스트(Bounded Context) 가 이 질문의 핵심 답이다:

각 서비스는 하나의 비즈니스 도메인을 담당한다. "주문"이라는 개념이 서비스마다 다른 의미를 가질 수 있다:

  • 결제 서비스에서 "주문" = 결제 대상
  • 배송 서비스에서 "주문" = 배송할 물건
  • 고객 서비스에서 "주문" = 문의 대상

각 서비스는 자기 맥락(Context) 안에서 "주문"을 자기 방식으로 정의하고, 서비스 간에는 **명확한 인터페이스(API)**로 소통한다.


5. 데이터베이스 전략: 아키텍처의 진짜 전장

모놀리식의 데이터베이스

모놀리식에서는 보통 하나의 데이터베이스를 모든 기능이 공유한다:

모놀리식: 공유 데이터베이스
모놀리식 앱 사용자 + 주문 + 결제 + 배송 + 리뷰
하나의 DB (Aurora) 모든 테이블이 한 곳에. JOIN 자유. 트랜잭션 용이

장점: SELECT u.name, o.total FROM users u JOIN orders o ON u.id = o.user_id — 간단하고 빠르다.

마이크로서비스의 데이터베이스: "Database per Service"

MSA의 핵심 원칙: 각 서비스는 자기만의 데이터베이스를 소유한다. 다른 서비스의 DB에 직접 접근하지 않는다.

마이크로서비스: 서비스별 데이터베이스
사용자
주문
결제
배송
Aurora PG
DynamoDB
Aurora MySQL
MongoDB

이것이 이 시리즈에서 다룬 Polyglot Persistence(다중 모델 아키텍처) 의 실현이다. 각 서비스가 자기 워크로드에 맞는 DB를 선택한다:

서비스추천 DB이유
사용자 인증Aurora PostgreSQL관계형 데이터, ACID 필수
상품 카탈로그MongoDB유연한 스키마, 카테고리별 다른 속성
장바구니/세션DynamoDB초고속 키-값, 자동 만료
주문/결제Aurora PostgreSQLACID 트랜잭션, 관계형 데이터
상품 검색OpenSearch풀텍스트 + 벡터 검색
추천DynamoDB + 벡터 DB사용자별 추천 + 유사 아이템
로그/모니터링시계열 DB시간 순서 데이터
분석/리포팅RedshiftOLAP, 대규모 집계

분산 트랜잭션의 악몽

모놀리식에서는 하나의 DB 트랜잭션으로 "주문 생성 + 재고 차감 + 결제 처리"를 원자적으로 할 수 있다.

MSA에서는? 주문·재고·결제가 각각 다른 DB. 분산 트랜잭션은 매우 어렵다.

해결 패턴:

1. Saga 패턴: 각 서비스가 로컬 트랜잭션을 수행하고, 실패 시 보상 트랜잭션을 실행하여 롤백.

주문 생성 → 재고 차감 → 결제 요청
              ↓ 결제 실패!
주문 취소 ← 재고 복원 ← 결제 취소 (보상)

2. 이벤트 소싱: 상태 대신 이벤트의 순서를 저장. "주문 생성됨", "결제 완료됨", "배송 시작됨" — 이벤트 시퀀스가 현재 상태를 결정.

⚠️
분산 트랜잭션의 현실: "모놀리식에서 3줄이면 되는 것을 MSA에서는 100줄이 필요하다"는 과장이 아니다. Saga 패턴, 이벤트 소싱, 최종적 일관성 — 이것들을 제대로 구현하려면 상당한 엔지니어링 역량이 필요하다. 트랜잭션 복잡도가 MSA를 포기하게 만드는 가장 흔한 이유다.

6. 실패와 성공 사례: 현실에서 배우기

실패: "우리도 마이크로서비스 해야 해!"

사례 A — 5명 스타트업의 MSA 도입

팀원 5명의 초기 스타트업이 "Netflix처럼 해야 한다"며 서비스를 10개로 나눴다. 결과:

  • 서비스 간 통신 오류로 디버깅에 하루
  • 5명이 10개 서비스를 각각 배포·모니터링
  • 실제 기능 개발 시간 < 인프라 관리 시간
  • 6개월 만에 모놀리식으로 통합

사례 B — 분산 모놀리스

기업이 "마이크로서비스"를 도입했지만, 서비스 간 동기 호출이 체인처럼 연결:

서비스A → 서비스B → 서비스C → 서비스D → 서비스E

하나가 느려지면 전체가 느려진다. 하나가 죽으면 전체가 죽는다. 모놀리식의 단점만 유지하면서 MSA의 복잡성만 추가된 최악의 결과.

성공: Amazon의 "Two-Pizza Team"

Amazon은 각 팀이 피자 두 판으로 먹일 수 있는 규모(6~8명)를 유지하고, 각 팀이 자기 서비스를 완전히 소유한다. 조직 구조와 아키텍처가 일치한 성공 사례. Conway's Law의 정석.

성공 + 반전: Netflix의 여정

시기상태교훈
2007모놀리식 Java 앱기능은 되지만 배포가 어려움
2008DB 장애로 3일간 DVD 배송 중단단일 장애점의 위험
2009~AWS + MSA 전환 시작7년에 걸친 점진적 전환
2016수백 개의 마이크로서비스전 세계 130개국 동시 출시 가능
2026성숙한 MSA + 내부 플랫폼수천 명의 엔지니어가 독립 배포

핵심: Netflix는 하루아침에 MSA로 전환하지 않았다. 7년에 걸쳐 점진적으로 전환했고, 그 과정에서 수많은 도구(Zuul, Eureka, Hystrix)를 만들었다.

Amazon Prime Video: 왜 모놀리식으로 돌아갔나

2023년의 Prime Video 사례를 자세히 보면:

  • AWS Step Functions(서버리스 워크플로우)으로 비디오 프레임을 분석
  • 프레임마다 Step Functions가 호출되어 비용이 폭발
  • 이것을 하나의 ECS 서비스로 통합하니 비용 90% 절감
💡
Prime Video 사례의 진짜 교훈: 이것은 "MSA vs 모놀리식"의 문제가 아니라, "잘못된 추상화 레벨을 선택한 것"의 문제다. 프레임 단위 처리를 함수 단위(Step Functions)로 나눈 것이 과도했다. 프로세스 내부의 파이프라인을 서비스로 분리할 필요가 없었다. "어디서 나눌 것인가"가 핵심 질문이라는 것을 다시 확인시켜 준다.

7. 그래서 뭘 선택해야 하는가: 의사결정 프레임워크

"모놀리식 우선 (Monolith First)" 전략

Martin Fowler가 2015년에 제안한 전략:

"프로젝트를 시작할 때는 모놀리식으로 시작하라. 마이크로서비스는 나중에 필요할 때 분리하라."

이유: 마이크로서비스의 올바른 경계(바운디드 컨텍스트)를 처음부터 알기는 어렵다. 모놀리식으로 운영하면서 도메인을 이해한 뒤에, 명확한 경계가 보일 때 서비스를 분리하는 것이 안전하다.

의사결정 가이드

팀 규모가 어떤가?
~10명 모놀리식 (모듈러)
10~50명 모놀리식 → 점진적 MSA 전환
50명+, 다수 팀 MSA (팀별 서비스 소유)

더 세밀한 판단 기준

기준모놀리식이 나은 경우MSA가 나은 경우
팀 규모< 10명> 50명, 다수 팀
도메인 이해도초기 (도메인 불명확)성숙 (경계 명확)
배포 주기주 1~2회팀별 하루 수십 회
확장 요구전체가 균일한 부하특정 서비스만 폭주
기술 다양성단일 스택으로 충분서비스별 최적 기술 필요
장애 격리일부 다운타임 허용서비스별 독립 운영 필수
트랜잭션복잡한 트랜잭션 많음서비스 간 느슨한 결합 가능
인프라 역량DevOps 전담 없음인프라 팀 + 내부 플랫폼
가장 현실적인 답: "잘 설계된 모놀리식(Modular Monolith)"으로 시작하고, 필요한 부분만 점진적으로 서비스로 분리하라. 모듈러 모놀리식은 코드 레벨에서 모듈 경계를 명확히 하되, 배포는 하나로 유지한다. 이것이 대부분의 스타트업과 중소 팀에게 최적이다. MSA로 시작해서 모놀리식으로 돌아가는 것보다, 모놀리식에서 시작해서 필요할 때 분리하는 것이 훨씬 쉽다.

8. 모듈러 모놀리식: 제3의 길

"Majestic Monolith"

Ruby on Rails 창시자 DHH(David Heinemeier Hansson) 가 2016년에 제안한 개념. Basecamp(팀 협업 도구)는 2026년까지도 모놀리식으로 수백만 사용자를 서비스한다.

Shopify도 대표적 사례. 세계 최대의 이커머스 플랫폼 중 하나이면서, 거대한 모놀리식 Rails 앱으로 운영된다. 다만 내부적으로 모듈 경계를 엄격히 관리한다.

모듈러 모놀리식의 원칙

하나의 배포 단위 안에서:
├── 사용자 모듈 (user/)        → 자체 모델, 서비스, 컨트롤러
├── 주문 모듈 (order/)         → 자체 모델, 서비스, 컨트롤러
├── 결제 모듈 (payment/)       → 자체 모델, 서비스, 컨트롤러
└── 배송 모듈 (shipping/)      → 자체 모델, 서비스, 컨트롤러

모듈 간 통신: 정의된 인터페이스(API)를 통해서만
모듈 간 직접 DB 접근: 금지

이것이 "모놀리식"과 "마이크로서비스"의 중간 지점이다. 배포는 하나이지만, 코드의 경계는 명확하다. 나중에 특정 모듈을 서비스로 분리하기 쉽다.


9. 실제 기업들의 선택

기업 규모별 아키텍처 선택

모놀리식 스타트업 ~ 시리즈A Basecamp, Hey, 대부분의 초기 스타트업
모듈러 모놀리식 시리즈B ~ 중견 Shopify, GitHub, Gusto
MSA 대기업, 수백 명 엔지니어 Netflix, Uber, Amazon, 쿠팡

한국 기업의 선택

  • 배달의민족: 모놀리식 → MSA 전환. 주문, 결제, 배달 서비스를 점진적으로 분리
  • 쿠팡: 대규모 MSA. 수백 개의 마이크로서비스, 팀별 서비스 소유
  • 토스: MSA 기반. 금융 서비스 각각이 독립된 팀과 서비스
  • 당근마켓: 모놀리식에서 시작 → 성장에 따라 핵심 서비스를 점진적으로 분리
  • 카카오: 서비스별 아키텍처가 다름. 일부는 모놀리식, 일부는 MSA

10. 2026년의 트렌드: 논쟁을 넘어

"모놀리식이냐 MSA냐"는 잘못된 질문이다

2026년의 합의:

  • "항상 MSA"는 틀렸다 — Amazon Prime Video가 증명
  • "항상 모놀리식"도 틀렸다 — Netflix의 성공이 증명
  • 정답은 맥락에 따라 다르다 — 팀 규모, 도메인 성숙도, 확장 요구, 인프라 역량

Kelsey Hightower (Google, 2020 트윗):

"나는 모놀리식이 마이크로서비스의 미래라고 예측한다. 모노리포(monorepo)에 대한 투자가 정답이다."

Sam Newman ("Building Microservices" 저자, 2023):

"마이크로서비스는 선택이지, 기본값이 아니다. 기본값은 모놀리식이어야 한다."

플랫폼 엔지니어링의 부상

2026년의 진짜 트렌드: 아키텍처 논쟁보다 플랫폼 엔지니어링. 모놀리식이든 MSA든, 개발자가 쉽게 배포·모니터링·확장할 수 있는 내부 플랫폼을 구축하는 것이 핵심.

Spotify의 Backstage, 각 기업의 내부 개발자 포털(IDP) — 아키텍처의 복잡성을 플랫폼이 흡수하고, 개발자는 비즈니스 로직에만 집중.


마치며: "도구가 아니라 문제에 집중하라"

이 시리즈 전체를 관통하는 메시지가 있다:

"어떤 기술이 최고인가?"가 아니라 "우리의 문제에 맞는 기술은 무엇인가?"가 올바른 질문이다.

모놀리식이 "구식"이고 마이크로서비스가 "최신"인 것이 아니다. 각각은 다른 상황에 최적화된 아키텍처 패턴이다.

상황최적 아키텍처이 시리즈의 관련 기술
소규모 팀, 초기 제품모놀리식EC2/ECS + Aurora + S3
성장 중, 도메인 명확화모듈러 모놀리식ECS + Aurora + DynamoDB
대규모, 다수 팀마이크로서비스ECS/K8s + Polyglot DB + API GW
이벤트 기반, 간헐적서버리스Lambda + DynamoDB + EventBridge

코어닷투데이도 이 원칙을 따른다. AI 서비스의 핵심은 비즈니스 가치를 만드는 것이지, 특정 아키텍처를 따르는 것이 아니다. 서비스 규모와 팀 역량에 맞는 아키텍처를 선택하고, 성장에 따라 점진적으로 진화시키는 것 — 그것이 이 "영원한 논쟁"에 대한 가장 현실적인 답이다.


이 글은 이 시리즈의 모든 기술 (클라우드, EC2, Docker, ECS, Fargate, K8s, Lambda, S3, RDS, DynamoDB, OpenSearch, CloudFront, API Gateway, EBS, CloudWatch, VPC, ALB, NAT Gateway, Bedrock, IAM, CloudTrail, Redshift, Aurora, MongoDB, 컬럼나 DB, 시계열 DB, 벡터 DB)이 실전에서 어떻게 조합되는지를 보여주는 최종 정리편입니다.