Nest.js를 배워보자/14. NestJS 프로젝트 실전 아키텍처 정리

모놀리식 vs 마이크로서비스 아키텍처 (MSA)

_Blue_Sky_ 2025. 12. 3. 13:05
728x90

애플리케이션을 단일 거대 시스템으로 구축할지, 아니면 작고 독립적인 서비스들의 집합으로 구축할지 결정하는 것은 프로젝트의 확장성, 복잡성, 그리고 팀의 규모에 따라 달라지는 중요한 설계 결정입니다.

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

모놀리식은 모든 비즈니스 로직(사용자 관리, 주문 처리, 결제 등)이 하나의 코드베이스에 존재하며, 단일 실행 파일로 빌드되고 배포되는 전통적인 방식입니다.

  • 장점:
    • 개발 및 배포 단순성: 초기 설정이 빠르고, 하나의 파일만 배포하면 되므로 CI/CD 파이프라인이 간단합니다.
    • 디버깅 용이성: 모든 코드가 한곳에 있어 디버깅 및 통합 테스트가 쉽습니다.
    • 성능: 서비스 간 통신이 함수 호출로 이루어져 네트워크 오버헤드가 없습니다.
  • 단점:
    • 기술 종속성: 전체 시스템이 하나의 언어/프레임워크에 묶여 기술 스택 변경이 어렵습니다.
    • 수평 확장 어려움: 특정 기능(예: 결제)에만 부하가 집중되어도, 전체 시스템을 확장해야 합니다.
    • 느린 빌드 시간: 코드베이스가 커질수록 빌드 및 스타트업 시간이 길어집니다.
728x90

2. 마이크로서비스 아키텍처 (Microservices Architecture, MSA)

MSA는 애플리케이션을 독립적으로 배포 및 확장 가능한 작은 서비스들의 집합으로 분해하는 방식입니다. NestJS의 MSA 기능(TCP, RabbitMQ 등)을 활용하여 구현할 수 있습니다.

 
  • 장점:
    • 독립적 확장/배포: 각 서비스를 독립적으로 확장하고 배포할 수 있어, 리소스 활용이 효율적입니다.
    • 기술적 자유: 각 서비스에 가장 적합한 언어, 데이터베이스, 프레임워크를 선택할 수 있습니다.
    • 격리: 한 서비스의 장애가 다른 서비스로 전파되는 것을 막을 수 있습니다 (장애 격리).
  • 단점:
    • 복잡성: 서비스 간 통신(네트워크, 분산 트랜잭션), 서비스 디스커버리, 로깅 등 운영(Ops)의 복잡도가 매우 높습니다.
    • 성능 오버헤드: 서비스 간 통신이 네트워크 호출(HTTP/RPC)로 이루어져 성능 오버헤드가 발생할 수 있습니다.
    • 데이터 관리: 데이터베이스를 서비스별로 분리해야 하므로 데이터 일관성 유지가 어렵습니다.
728x90

3. 비교 요약 및 선택 기준

구분 모놀리식 (Monolithic) 마이크로서비스 (MSA)
코드베이스 단일 (Single Repository) 다수 (Multiple Repositories)
개발 속도 (초기) 빠름 느림 (설정 복잡성)
확장성 낮음 (전체를 확장해야 함) 높음 (서비스별 확장 가능)
장애 영향 높음 (전체 시스템 장애 위험) 낮음 (부분 장애 격리)
기술 선택 제한적 (단일 스택) 자유로움 (서비스별 선택 가능)
운영 복잡도 낮음 매우 높음
추천 규모 소규모, 신규 스타트업, MVP 대규모, 고부하 서비스, 대규모 조직

 

728x90