MSA(MicroService Architecture)란 무엇인가?

유범모
∙∙조회 40
MSA(MicroService Architecture)란 무엇인가?

MSA란?

마이크로서비스 아키텍처(MSA) 는 애플리케이션을 느슨하게 결합된 핵심 기능(도메인 서비스)들의 모음으로 구성하는 방식입니다.

각 서비스는 자체 프로세스에서 실행되며, HTTP(REST API)나 가벼운 메시징 큐를 통해 서로 통신합니다.
위 그림처럼 모든 비즈니스 로직과 데이터베이스가 하나로 통합된 거대한 모놀리식(Monolithic) 아키텍처와 대조적인 개념입니다.

MSA의 등장배경

과거에는 모든 기능(UI, 비즈니스 로직, 데이터베이스 등)을 하나의 시스템 안에 통째로 구축하는 모놀리식 아키텍처가 주류였습니다. 소규모 프로젝트에서는 개발과 테스트가 용이하다는 장점이 있었으나, 시스템이 거대해지면서 다음과 같은 뚜렷한 한계에 부딪혔습니다.

  • 부분의 장애가 전체의 장애로: 단일 코드 베이스이므로, 로그인 기능의 작은 버그 하나가 결제 기능까지 포함한 시스템 전체를 다운시킬 수 있습니다.
  • 비효율적인 서버 확장(Scale-out): 특정 서비스(예: 이벤트 기간의 결제 트래픽)만 리소스가 부족해도, 불필요한 다른 기능들까지 포함된 전체 시스템을 복제하여 확장해야 합니다.
  • 빌드 및 배포 시간 증가: 코드 한 줄을 수정해도 수십 분이 걸리는 전체 애플리케이션 빌드와 배포 과정을 거쳐야 합니다.

이러한 모놀리식의 한계를 극복하고, 빠르고 유연하게 대처할 수 있는 애자일 개발 환경과 클라우드 네이티브 기술의 발전이 맞물리면서 MSA가 대세로 떠오르게 되었습니다.

MSA의 특징

  1. 서비스의 독립성: 애플리케이션을 유저 서비스, 주문 서비스, 결제 서비스 등으로 잘게 쪼갭니다. 한 서비스를 업데이트해도 다른 서비스에는 영향을 주지 않습니다.
  2. 분산된 데이터 관리: 단일 DB를 공유하지 않고, 각 마이크로서비스가 자신만의 독립적인 데이터베이스(DB)를 가집니다.
  3. 기술의 다양성: 서비스의 특성에 맞춰 가장 효율적인 기술 스택을 자유롭게 선택할 수 있습니다. (예: 데이터 분석 서비스는 Python, 결제 서비스는 Java 등)
  4. 장애 격리: 하나의 서비스(예: 리뷰 기능)에 장애가 발생하더라도, 핵심 서비스(주문, 결제)는 정상적으로 작동하도록 설계됩니다.

MSA 장점

📈 유연한 확장성(Scale-out): 트래픽이 폭주하는 특정 서비스만 선택적으로 서버를 늘릴 수 있습니다. 인프라 자원을 매우 효율적으로 사용할 수 있게 됩니다.

⚡ 빠른 개발 및 배포: 코드가 작고 단순해지며, 개별 배포가 가능해져 새로운 기능의 추가 및 배포 속도가 비약적으로 상승합니다.

🛠️ 팀의 자율성 증대: 작은 규모의 목적 조직이 하나의 서비스를 완전히 소유하고 주도적으로 개발부터 운영까지 책임질 수 있습니다.

MSA 단점

모든 문제를 해결해 주는 은탄환(Silver Bullet) 은 없습니다.
시스템을 작게 쪼갠 만큼, 분산 환경으로 인한 인프라 및 운영 복잡도가 극도로 높아집니다.

  • 시스템 복잡도 증가: 단순히 서비스만 쪼개는 것이 아니라 API 게이트웨이, 서비스 디스커버리, 중앙 집중화된 로깅 등 서비스 간의 통신과 관리를 위한 추가적인 인프라 구성이 필수적입니다.
  • 데이터 일관성 유지의 어려움: DB가 서비스별로 분산되어 있어, 여러 서비스에 걸친 데이터의 정합성을 맞추는 분산 트랜잭션 처리가 매우 까다롭습니다.
  • 테스트 및 추적의 어려움: 사용자 요청 하나가 여러 마이크로서비스를 거쳐 처리되므로, 장애 발생 시 원인이 된 위치를 추적하고 E2E(End-to-End) 테스트를 진행하기가 어렵습니다.

💡 마치며: MSA는 대규모 트래픽과 복잡한 비즈니스 로직을 다루는 조직에 적합한 강력한 아키텍처입니다.
하지만, 시스템 복잡도가 낮은 초기 스타트업이나 소규모 프로젝트에서는 오히려 개발 속도를 늦추는 독이 될 수 있으므로, 현재 조직의 상황과 규모에 맞는 아키텍처를 선택하는 것이 가장 중요합니다.