--- category: Dev tags: [Architecture, Microservices, Cloud Native, Scalability] title: Microservices Architecture (MSA) description: 대규모 애플리케이션을 독립적으로 배포 및 확장 가능한 작은 서비스 단위로 분할하여 관리하는 시스템 설계 방식 last_updated: 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 ### Related Concepts * [[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*