164. 모놀리식 아키텍처 (Monolithic Architecture)

핵심 인사이트: 모든 회사의 시작은 모놀리식이다. 하나의 냄비(코드베이스)에 주문, 결제, 배송 로직을 몽땅 때려 넣고 한 번에 빌드하는 거대한 덩어리 시스템이다. 처음엔 만들기 쉽지만, 코드가 커질수록 냄비가 너무 무거워져서 젓기조차 힘들어지는(유지보수 지옥) 구조다.

Ⅰ. 모놀리식 아키텍처 (Monolithic Architecture)의 개념

'단일 덩어리(Monolith)'라는 뜻 그대로, 애플리케이션의 모든 구성 요소(사용자 인터페이스, 비즈니스 로직, 데이터베이스 접근 등)가 하나의 거대한 프로젝트 코드베이스로 결합되어 있고, 단일 패키지(예: 하나의 .war, .jar 파일)로 빌드 및 배포되는 전통적인 소프트웨어 아키텍처입니다. 데이터 역시 수백 개의 테이블이 외래키(FK)로 얽힌 하나의 거대한 RDBMS로 관리됩니다.

Ⅱ. 모놀리식의 구조 (강결합)

┌───────── 거대한 단일 WAS (Web Application Server) ─────────┐
│                                                            │
│   [ Presentation Layer (UI/화면 렌더링) ]                  │
│                                                            │
│   [ Business Logic ]                                       │
│   ├── 주문 모듈 ──┐ ┌── 배송 모듈                          │
│   │             ├─┼─┤           (코드 수준에서 함수 호출로 │
│   └── 결제 모듈 ──┘ └── 재고 모듈    서로 강하게 얽혀있음) │
│                                                            │
│   [ Data Access Layer (DAO, ORM) ]                         │
└─────────────────────────────┬──────────────────────────────┘
                              ▼
           [(거대한 단일 DB) 테이블 수백 개가 FK로 조인됨]

Ⅲ. 모놀리식의 장단점

구분설명
장점 (초기 스타트업에 유리)- 개발 용이성: 모든 코드가 한곳에 있어 IDE(이클립스 등)에서 클릭 한 번으로 흐름을 파악하고 디버깅하기 쉽습니다.
- 간단한 트랜잭션: 단일 DB를 쓰므로 에러가 나면 ROLLBACK 한 방에 완벽하게 데이터 무결성이 보장됩니다.
- 간단한 배포: 그냥 파일 하나만 서버에 던져 넣으면 끝납니다.
단점 (서비스가 커진 후 지옥)- 부분 배포 불가: 오타 하나만 수정해도 전체 시스템 10GB를 다시 빌드하고 껐다 켜야 하므로 잦은 배포가 불가능합니다.
- 스파게티 코드: 팀원이 많아질수록 코드가 뒤엉켜, 주문 로직을 고쳤더니 갑자기 회원가입이 안 되는 연쇄 사이드 이펙트가 터집니다.
- 확장(Scale-out)의 비효율: 명절에 결제 트래픽만 폭주해도, 덩치 큰 서버 전체를 통째로 복사해서 늘려야 하므로 자원 낭비가 심합니다.

Ⅳ. MSA로의 전환 (Strangler Fig Pattern)

시스템이 커져서 모놀리식의 단점이 한계에 다다르면 넷플릭스처럼 마이크로서비스 아키텍처(MSA)로 분할을 시작합니다. 이때 한 번에 빅뱅(Big-bang) 방식으로 엎어버리는 것은 매우 위험하므로, 스트랭글러 피그 패턴(무화과나무 패턴) 을 통해 거대한 모놀리스에서 결제 ➔ 배송 ➔ 주문 순으로 모듈을 조금씩 떼어내어 야금야금 MSA로 옮기는 전략을 사용합니다.

📢 섹션 요약 비유: 샴쌍둥이처럼 머리, 팔, 다리가 한 몸에 찰싹 붙어있는 거대한 로봇입니다. 뛸 때는 하나가 되어 파워풀하게 달리지만(트랜잭션/개발 용이), 오른팔만 살짝 간지러워도 로봇 전체가 멈춰서 진찰을 받아야 하고(부분 배포 불가), 오른팔만 업그레이드하고 싶어도 로봇 통째로 공장에 들어가야 하는(확장성 부족) 둔한 시스템입니다.