마이크로서비스

기술노트
Admin (토론 | 기여)님의 2025년 4월 28일 (월) 13:44 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

개요

마이크로서비스(microservice)는 애플리케이션을 느슨하게 결합된 독립적인 서비스들의 집합으로 구성하는 서비스 지향 아키텍처(SOA) 스타일의 소프트웨어 개발 기법이다.

마이크로서비스 아키텍처에서 각 서비스는:

  • 섬세(fine-grained)한 단위로 기능을 나눈다.
  • 가벼운 경량 프로토콜(예: HTTP REST, gRPC 등)을 통해 통신한다.

이러한 구조는 다음과 같은 장점을 제공한다:

  • 애플리케이션 모듈화(Modularity) 향상
  • 이해, 개발, 테스트, 유지보수 용이
  • 대규모 시스템에서도 부분 수정이 가능
  • 장애 격리 (특정 서비스에 문제가 생겨도 전체 장애로 이어지지 않음)

또한, 소규모 자율 팀이 각각의 서비스를 독립적으로 개발, 배포(Deploy), 확장(Scale)할 수 있어 병렬 개발이 가능하다.[1][2] 지속적인 리팩터링을 통해 서비스 간 통합이나 재구성이 유연하게 이루어질 수 있다.[3] 마이크로서비스 기반 시스템은 지속적 통합/지속적 배포(CI/CD)를 자연스럽게 지원하여 빠른 업데이트와 롤백을 가능하게 한다.[4]

역사

  • 2000년대 초: 서비스 지향 아키텍처(SOA) 개념이 확립되며 초기 아이디어 등장
  • 2011년경: Netflix, Amazon, Twitter 등 대규모 서비스를 운영하는 기업들이 내부적으로 모놀리식 아키텍처(Monolithic Architecture) 문제를 해결하기 위해 마이크로서비스 개념을 적극 도입
  • 2014년: "Microservices"라는 용어가 공식화되고 산업계 전반에 널리 확산
  • 이후 Docker, Kubernetes와 같은 컨테이너 및 오케스트레이션 기술이 발전하면서 MSA 도입이 급속히 증가

철학

마이크로서비스 아키텍처는 다음 철학을 따른다:

  • 서비스는 하나의 비즈니스 기능 또는 도메인에 집중해야 한다 (Single Responsibility Principle)
  • 각 서비스는 독립적으로 배포될 수 있어야 한다
  • 서비스는 작게 유지하고, 필요할 때 분할 또는 통합할 수 있어야 한다
  • 서비스 간 통신은 명확하고 가벼운 API를 통해 이루어져야 한다
  • 데이터베이스도 서비스별 분리를 지향 (Database per Service)

기술

마이크로서비스를 구현하는 데 필요한 주요 기술 요소:

  • API 게이트웨이 (API Gateway)
    • 클라이언트 요청을 적절한 서비스로 라우팅
    • 인증/인가, 로깅, 트래픽 관리 기능 포함
    • 예: AWS API Gateway, Kong, Apigee
  • 서비스 디스커버리 (Service Discovery)
    • 동적으로 변화하는 서비스 위치(IP, 포트)를 관리
    • 예: Consul, Eureka, Kubernetes DNS
  • 분산 트랜잭션/사가 패턴
    • 서비스 간 데이터 일관성 보장을 위한 패턴
    • 예: Saga Pattern, Event Sourcing
  • 컨테이너화(Containerization)
    • 각 서비스를 독립된 단위로 패키징
    • 예: Docker
  • 오케스트레이션(Orchestration)
    • 서비스 배포, 확장, 복구를 자동화
    • 예: Kubernetes, Docker Swarm
  • 모니터링 및 로깅
    • 분산 환경에서 문제를 빠르게 파악하고 해결
    • 예: Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana)

비평

마이크로서비스 아키텍처는 많은 장점이 있지만, 다음과 같은 단점과 도전 과제도 존재한다:

  • 복잡성 증가
    • 서비스 수가 많아지면 운영 및 관리 복잡도가 급격히 증가한다.
    • 분산 시스템 특유의 장애 발생 가능성 (네트워크 지연, 부분 실패 등)
  • 데이터 일관성 문제
    • 각 서비스가 독립된 데이터베이스를 가질 경우, 분산 트랜잭션 관리가 필요하다.
  • 운영 비용 증가
    • DevOps, CI/CD 파이프라인, 모니터링 시스템 등 추가적인 인프라 구축 필요.
  • 초기 설계 비용
    • 마이크로서비스를 무리하게 도입할 경우, 초기 개발과 학습 비용이 오히려 증가할 수 있다.
  1. [1]
  2. [2]
  3. [3]
  4. [4]