Files
2nd/10_Wiki/Topics/Microservices Architecture (MSA).md
T
2026-05-02 23:33:34 +09:00

9.3 KiB

id, category, confidence_score, tags, last_reinforced
id category confidence_score tags last_reinforced
P-REINFORCE-WIKI-8E4ED021 Unified 0.95
microservices-architecture-(msa)
monolithic-architecture
domain-driven-design-(ddd)
event-driven-architecture-(eda)
service-mesh
architecture-principles
2026-05-02

Microservices Architecture (MSA)

📌 Brief Summary

마이크로서비스 아키텍처(MSA)는 대규모의 단일(Monolithic) 애플리케이션을 비즈니스 기능 단위로 분할하여 독립적으로 배포 및 실행 가능한 작은 서비스들의 집합으로 설계하는 아키텍처 패턴이다 [1-4]. 각 서비스는 고유의 프로세스를 실행하며 API와 같은 경량화된 통신 메커니즘을 통해 상호작용한다 [2, 5, 6]. 이를 통해 조직은 시스템의 유연성, 확장성, 복원력을 확보하고 개발 및 배포 속도를 극대화할 수 있다 [4, 7].

📖 Core Content

  • 자율성과 독립성 (Autonomy & Isolation): 각 마이크로서비스는 독립적인 코드베이스와 런타임 환경, 그리고 개별적인 데이터베이스를 보유하는 '서비스당 데이터베이스(Database per Service)' 패턴을 따른다 [6, 8-10]. 이를 통해 한 서비스에 발생한 결함이나 메모리 누수 등이 전체 시스템으로 전파되는 것을 방지하는 결함 격리(Fault isolation)가 가능하다 [9, 11].
  • 단일 책임 원칙 (Single Responsibility)과 도메인 주도 설계: 각 서비스는 오직 하나의 비즈니스 기능이나 책임에만 집중하며, 다른 서비스의 기능과 겹치지 않는다 [12]. 서비스의 경계는 도메인 주도 설계(DDD) 원칙을 기반으로 비즈니스 역량을 중심으로 조직된다 [6, 12].
  • 통신 및 통합 메커니즘: 복잡한 로직은 서비스 내부에 두고 서비스 간 통신은 단순하게 유지하는 '스마트 엔드포인트와 덤 파이프(Smart Endpoints and Dumb Pipes)' 원칙을 적용한다 [6]. 서비스 간 통신은 주로 HTTP/REST API나 메시지 큐(Kafka, RabbitMQ 등)를 통한 비동기 이벤트 전달 방식으로 이루어진다 [2, 13, 14]. 물리적 네트워크 주소에 구애받지 않는 위치 투명성(Location Transparency)을 위해 서비스 메시(Service Mesh)나 디스커버리 레지스트리가 활용된다 [15].
  • 독립적인 스케일링과 기술 스택 유연성: 각 팀은 서비스 특성에 맞춰 가장 적합한 프로그래밍 언어와 프레임워크를 자유롭게 선택할 수 있으며 [11, 16], 트래픽 증가 등 필요에 따라 전체 앱을 확장할 필요 없이 특정 서비스만 개별적으로 확장(Scaling)할 수 있다 [4, 7, 11].

⚖️ Trade-offs & Caveats

  • 장점 (Pros): 개별 서비스 단위로 시스템을 수평적으로 빠르게 확장할 수 있고, 특정 서비스만 독립적으로 지속적 배포(CI/CD)가 가능하여 개발 주기가 단축된다 [7, 11, 16, 17]. 또한 장애 격리 기능이 우수하여 시스템 전체의 복원력이 향상된다 [4, 9, 11].
  • 단점 및 제약 사항 (Cons/Trade-offs):
    • 분산 시스템의 복잡성 및 통신 지연: 수많은 서비스가 네트워크를 통해 통신하므로, 네트워크 지연(Latency) 및 트래픽 혼잡이 발생할 수 있으며 관리 도구 및 운영 인프라 구축의 오버헤드가 크다 [18-22].
    • 데이터 일관성 유지의 어려움: 각 서비스가 별도의 데이터베이스를 가지므로 기존의 단일 ACID 트랜잭션 처리가 어렵다 [23]. 대신 Saga 패턴, API 컴포지션(API Composition), CQRS 패턴 등을 통해 복잡한 최종 일관성(Eventual Consistency) 모델을 구현해야 한다 [24, 25].
    • 운영 및 디버깅의 고도화 요구: 여러 서비스에 걸쳐 발생하는 오류의 근본 원인을 파악하기 위해 Jaeger 등과 같은 분산 트레이싱(Distributed Tracing) 및 분산 로그 수집 체계가 필수적이다 [18, 21, 25].
    • 인프라 비용: 마이크로서비스 운영을 위해 Kubernetes, Docker와 같은 컨테이너 환경, API 게이트웨이, 서비스 메시(Istio 등) 등의 추가 리소스 및 클라우드 자원이 요구되어 개발 및 유지 비용이 상승할 수 있다 [11, 18, 26].

🔗 Knowledge Connections

[관계 유형 A: 아키텍처/기반 기술]

  • Monolithic Architecture
    • 연결 이유: 마이크로서비스의 대척점에 있는 전통적인 아키텍처 패턴.
    • 이 개념을 통해 더 깊게 이해할 수 있는 부분: 모든 구성 요소가 하나의 코드베이스에 강하게 결합(Tight coupling)되어 있어 전체를 확장하고 배포해야 하는 모놀리스의 한계를 이해함으로써, MSA가 제공하는 서비스 분리와 확장성의 필요성을 명확히 할 수 있다 [3, 27, 28].
  • Domain-Driven Design (DDD)
    • 연결 이유: 마이크로서비스의 경계를 식별하고 설계하는 주요 지침 및 기법.
    • 이 개념을 통해 더 깊게 이해할 수 있는 부분: 비즈니스 도메인을 기준으로 시스템을 어떻게 분할해야 각 서비스가 단일 책임 원칙과 자율성을 유지할 수 있는지 그 원리를 파악할 수 있다 [6, 12].
  • Event-Driven Architecture (EDA)
    • 연결 이유: MSA 환경에서 서비스 간 느슨한 결합(Loose coupling)과 비동기 통신을 지원하는 핵심 아키텍처 패턴.
    • 이 개념을 통해 더 깊게 이해할 수 있는 부분: 마이크로서비스 간 직접적인 동기 호출(API)의 성능 병목을 피하고, 상태 변화(이벤트)에 따라 여러 서비스의 데이터를 동기화하고 반응하는 메커니즘을 배울 수 있다 [14, 24, 25].

[관계 유형 B: 구현/활용 도구]

  • Service Mesh
    • 연결 이유: 수많은 마이크로서비스 간의 복잡한 통신을 중앙에서 관리하기 위한 인프라 계층(예: Istio).
    • 이 개념을 통해 더 깊게 이해할 수 있는 부분: 서비스 디스커버리, 트래픽 라우팅, 보안(상호 TLS), 관측성 및 통신 실패 방지 등 분산 시스템에서 필연적으로 발생하는 네트워크 통신 복잡성을 어떻게 추상화하고 제어하는지 이해할 수 있다 [26, 29-31].

Deeper Research Questions

  • 마이크로서비스 아키텍처 환경에서 개별 분산 데이터베이스 간의 최종 일관성(Eventual Consistency)을 보장하기 위해 Saga 패턴과 CQRS 패턴은 각각 어떻게 동작하며, 구현 시의 한계와 트레이드오프는 무엇인가?
  • 모놀리식 시스템에서 마이크로서비스로 마이그레이션할 때 데이터베이스 구조를 성공적으로 분리(Database per Service)하기 위한 전략과 이 과정에서 발생하는 리스크는 무엇인가?
  • MSA 내에서 특정 서비스의 지연이나 장애가 다른 서비스로 연쇄 전파(Cascading Failure)되는 것을 막기 위해 서킷 브레이커(Circuit Breaker) 패턴은 어떻게 작동하는가?
  • 마이크로서비스 아키텍처를 도입할 때 조직의 규모, 애플리케이션의 복잡성, 배포 주기를 고려했을 때, 오버엔지니어링을 피하기 위한 최적의 도입 조건(Sweet Spot)은 무엇인가?
  • 클라이언트의 요청이 다수의 마이크로서비스로 흩어질 때 API Gateway는 인증, 라우팅, 로드 밸런싱 등의 측면에서 어떤 필수적인 역할을 수행하는가?

Practical Application Contexts

  • Implementation: 기존 모놀리식 앱을 회원, 결제, 재고 등 주요 기능(도메인)별로 쪼개어 각각 독립된 컨테이너에 배포하고 데이터베이스를 분리하여 구현한다 [32-34].
  • System Design: API Gateway를 시스템의 진입점으로 두고 서비스 통신 간 실패를 대비해 서킷 브레이커를 설계하며, 데이터 동기화를 위해 이벤트 브로커(Kafka 등)와 Saga/Outbox 패턴을 시스템 구성에 포함시킨다 [24, 35].
  • Operation / Maintenance: 개별 서비스의 자율성이 높은 대신, 오류 추적을 위해 각 서비스에서 생성되는 로그와 메트릭을 중앙화하고 상관관계 ID(Correlation ID) 기반의 분산 트레이싱을 통해 전체 트랜잭션을 모니터링해야 한다 [36-38].
  • Learning Path: 모놀리식 및 계층형 아키텍처 구조 이해 -> 도메인 주도 설계(DDD) 학습 -> 컨테이너라이제이션(Docker, Kubernetes) 습득 -> 분산 시스템 통신(Service Mesh, EDA) 원리로 지식을 점진적으로 확장한다.
  • My Project Relevance: 서비스 트래픽이 폭증하여 특정 기능(예: 결제 처리)의 서버만 증설해야 하거나, 개발 팀이 커져서 기능별로 팀의 배포 일정을 분리해야 할 때 시스템 확장 및 민첩성 강화를 위해 도입을 검토할 수 있다.

Adjacent Topics

  • Modular Monolith
    • 확장 방향: 마이크로서비스의 네트워크 통신 및 분산 트랜잭션 복잡성을 피하면서도, 애플리케이션 내부적으로 도메인 경계를 엄격히 나누어 모듈성을 확보하는 대안적 아키텍처 전략으로 학습 확장 [39-41].
  • Serverless Architecture
    • 확장 방향: 마이크로서비스에서 한 단계 더 나아가 서버 인프라 관리 자체를 클라우드 제공자에게 맡기고 이벤트에 반응하는 개별 함수(Function) 단위로 로직을 쪼개는 클라우드 네이티브 발전 모델 탐구 [41-43].

Last updated: 2026-05-02