70 lines
4.8 KiB
Markdown
70 lines
4.8 KiB
Markdown
---
|
|
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*
|