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