Post

[Microservice Pattern] 마이크로서비스 패턴 개요와 핵심 설계

[Microservice Pattern] 마이크로서비스 패턴 개요와 핵심 설계

🏗️ Microservice Pattern (마이크로서비스 패턴) 개요

마이크로서비스 아키텍처(Microservice Architecture)는 하나의 큰 애플리케이션을
작고 독립적인 서비스 단위로 분리하여 운영하는 아키텍처 스타일입니다.

🔑 핵심: 작은 서비스 단위 + 독립 배포 + 명확한 책임


1️⃣ 마이크로서비스 특징

특징설명
작은 단위각 서비스는 단일 책임(Single Responsibility) 중심
독립 배포서비스별로 독립적으로 빌드/배포 가능
독립 데이터각 서비스는 자체 데이터 저장소를 가짐
통신 방식REST API, gRPC, 메시지 큐 등 사용
팀 단위 개발서비스 단위로 팀이 독립적으로 개발 가능

💡 모놀리식 아키텍처와 비교하면, 마이크로서비스는 유연성과 확장성을 강조합니다.


2️⃣ 주요 마이크로서비스 패턴

마이크로서비스 설계에서 자주 활용되는 패턴입니다.

2.1 Database per Service

  • 각 서비스가 자체 데이터베이스를 보유
  • 장점: 서비스 간 결합도 최소화
  • 단점: 데이터 일관성 관리 필요
1
2
Order Service DB  <-- 독립
Payment Service DB <-- 독립

2.2 API Gateway Pattern

  • 클라이언트 요청을 단일 진입점에서 처리
  • 인증, 로깅, 라우팅, 응답 집계 등 수행
1
2
3
Client → API Gateway → Order Service
                       → Payment Service
                       → Shipping Service

2.3 Circuit Breaker Pattern

  • 서비스 호출 실패 시 전체 시스템 장애 방지
  • 실패하면 fallback 처리
1
2
3
4
5
try {
    paymentService.pay(order);
} catch (ServiceUnavailableException e) {
    fallbackPayment(order);
}

2.4 Saga Pattern

  • 분산 트랜잭션 관리를 위한 패턴
  • 예: 주문 → 결제 → 배송 순서 중 일부 실패 시 이전 단계 롤백
1
2
Order Service → Payment Service → Shipping Service
  실패 → Payment Service 취소 → Order Service 취소

2.5 Event-Driven Pattern

  • 서비스 간 이벤트 기반 비동기 통신
  • 장점: 느슨한 결합, 확장성 우수
1
OrderCreatedEvent → Payment Service → PaymentProcessedEvent → Shipping Service

3️⃣ 마이크로서비스 구조 예시

1
2
3
4
5
6
7
8
9
10
11
12
microservice-app/
 ├── order-service/
 │    ├── src/
 │    └── database/
 ├── payment-service/
 │    ├── src/
 │    └── database/
 ├── shipping-service/
 │    ├── src/
 │    └── database/
 └── api-gateway/
      └── src/

각 서비스는 독립적으로 배포 가능하며, API Gateway로 외부 요청을 처리합니다.


4️⃣ 실무 고려사항

  • 📝 통합 로깅 & 모니터링: 모든 서비스 로그를 통합 관리
  • 📝 데이터 일관성 관리: Saga 또는 이벤트 기반 설계
  • 📝 테스트 전략: 단위 테스트 + 통합 테스트
  • 📝 배포/인프라 자동화: CI/CD, Docker, Kubernetes 활용

5️⃣ 요약

  • 마이크로서비스 패턴 = 작은 단위 서비스 + 독립 배포 + 명확한 책임
  • 핵심 패턴: Database per Service, API Gateway, Circuit Breaker, Saga, Event-Driven
  • 장점: 확장성, 팀 단위 독립 개발, 유연성
  • 단점: 분산 관리 복잡성, 데이터 일관성 문제, 운영 부담

💡 결론: 마이크로서비스는 단순히 애플리케이션을 나누는 것이 아니라, 설계 패턴과 운영 전략을 포함한 전체 아키텍처 접근이 핵심입니다.

This post is licensed under CC BY 4.0 by the author.