Files
2nd/10_Wiki/Topics/Microservices_Architecture.md
T
2026-05-02 23:33:34 +09:00

4.8 KiB

category, tags, title, description, last_updated
category tags title description last_updated
Unified
Architecture
Microservices
Cloud Native
Scalability
Microservices Architecture (MSA) 대규모 애플리케이션을 독립적으로 배포 및 확장 가능한 작은 서비스 단위로 분할하여 관리하는 시스템 설계 방식 2026-05-02

Microservices Architecture (MSA)

📌 Brief Summary

**마이크로서비스 아키텍처(Microservices Architecture, MSA)**는 하나의 거대한 애플리케이션(Monolith)을 비즈니스 기능 단위로 쪼개어, 독립적으로 개발, 배포, 운영이 가능한 작은 서비스들의 집합으로 구성하는 방식입니다. 각 서비스는 자신만의 데이터베이스를 가질 수 있으며, API를 통해 서로 통신합니다. 이는 클라우드 네이티브 환경에서 대규모 시스템의 복잡성을 관리하고, 변화에 민첩하게 대응하기 위한 현대 소프트웨어 공학의 핵심 패러다임입니다.


📖 Core Content

1. 주요 특징

  • 독립성: 각 서비스는 독립적으로 빌드, 테스트, 배포될 수 있습니다. 특정 서비스의 업데이트가 전체 시스템 중단으로 이어지지 않습니다.
  • 기술 다양성 (Polyglot): 각 서비스의 특성에 맞는 최적의 언어와 데이터베이스를 선택할 수 있습니다. (예: 결제 서비스는 Java, 실시간 분석은 Python)
  • 탄력적 확장: 트래픽이 몰리는 특정 서비스만 골라서 리소스를 확장(Scale-out)할 수 있어 비용 효율적입니다.
  • 책임의 분리: 도메인 주도 설계(DDD)의 **바운디드 컨텍스트(Bounded Context)**를 기준으로 팀과 코드를 분리하여 전문성을 높입니다.

2. 아키텍처 구성 요소

  • API Gateway: 클라이언트의 요청을 받아 적절한 마이크로서비스로 라우팅하고, 인증/인가, 속도 제한 등을 통합 관리합니다.
  • Service Discovery: 동적으로 변하는 마이크로서비스 인스턴스의 위치(IP, Port)를 자동으로 등록하고 찾아주는 기능을 합니다.
  • Config Server: 서비스별 설정 정보를 중앙에서 관리하여 동적으로 반영합니다.
  • Message Broker: 서비스 간 비동기 통신을 담당하여 결합도를 낮춥니다. (Kafka, RabbitMQ 등)

3. 구현 철학: 헥사고날 아키텍처와의 관계

각 마이크로서비스 내부는 헥사고날 아키텍처를 적용하는 것이 일반적입니다. 비즈니스 로직을 중심에 두고 외부 통신(API, DB)을 어댑터로 처리함으로써, 서비스 자체가 하나의 독립적인 '섬'처럼 동작하게 설계합니다.


⚖️ Trade-offs & Caveats

Benefits

  • 민첩성: 작은 단위의 배포가 가능하여 새로운 기능을 시장에 빠르게 출시할 수 있습니다.
  • 안정성: 서비스 하나에 장애가 발생해도 전체 시스템으로 전파될 확률이 낮습니다 (Fault Isolation).
  • 조직의 확장: 큰 팀을 작은 서비스 단위의 팀으로 나누어 커뮤니케이션 비용을 줄일 수 있습니다.

⚠️ Challenges

  • 분산 시스템의 복잡성: 네트워크 지연, 데이터 정합성(최종 일관성), 분산 트랜잭션 처리 등 해결해야 할 기술적 난제가 많습니다.
  • 운영 오버헤드: 관리해야 할 서비스, 컨테이너, 네트워크 설정이 기하급수적으로 늘어납니다.
  • 테스트의 어려움: 여러 서비스가 얽힌 통합 테스트와 엔드 투 엔드(E2E) 테스트가 까다롭습니다.

🔗 Knowledge Connections

  • Hexagonal_Architecture: 개별 마이크로서비스 내부의 견고한 설계 틀을 제공합니다.
  • Domain_Driven_Design: 마이크로서비스의 경계를 나누는 논리적 기준(Bounded Context)을 제공합니다.
  • Serverless_Computing: 인프라 관리 없이 마이크로서비스 기능을 실행할 수 있는 이상적인 배포 환경입니다.
  • Event_Driven_Architecture: 서비스 간 느슨하게 결합된 통신을 구현하는 핵심 패턴입니다.

Practical Application Contexts

  • Cloud Native: 컨테이너(Docker)와 오케스트레이션(Kubernetes) 도구를 필수로 사용합니다.
  • JAMstack: 프론트엔드에서 호출하는 다양한 백엔드 API 서비스들의 집합으로 MSA가 활용됩니다.

💡 Adjacent Topics

  • CI_CD: MSA 환경에서 수많은 서비스를 안전하게 배포하기 위한 필수 자동화 프로세스입니다.
  • Distributed_Tracing: 분산된 서비스 간의 요청 흐름을 추적하기 위한 기술(Zipkin, Jaeger 등)입니다.
  • API_First_Architecture: 서비스 간 협업을 위해 API 설계를 최우선으로 하는 개발 문화입니다.

Last updated: 2026-05-02