Microservice 아키텍처에 대하여 알아보자

정의

  • 서비스지향아키텍처(SOA)의 한 종류인 마이크로서비스 아키텍처는 애플리케이션을 느슨하게 결합된(loosely-coupled) 서비스들의 묶음으로 정렬한다.
  • 마이크로서비스 아키텍처에서 서비스는 세분화되고 프로토콜은 가볍다(lightweight). 마이크로서비스 아키텍처의 목적은 하나의 팀이 다른 팀과 독립적으로 서비스를 제공할 수 있도록 하는 것이다.1

Micro Service Architecture 핵심 원칙

자율성 (Autonomy)
  • 각각의 서비스는 다른 서비스들에 독립적으로 변경되고 운영된다
  • 느슨한 결합으로 자율성을 확립한다
  • 각각의 서비스는 독립적으로 배포가 가능해야 한다
회복성 (Resilience)
  • 마이크로 서비스는 자연스러운 메커니즘을 통해 장애를 격리시킵니다.
  • 독립적으로 배포하므로 어플리케이션 또는 인프라 장애는 시스템 일부에만 영향을 미칩니다.
  • 어플리케이션을 여러 서비스로 분리하여 장애를 격리시킬 수 있지만 장애 지점이 늘어나게 됩니다.
  • 장애가 발생할 때 확산을 막으려면 발생한 일을 처리해야합니다.
  • 가능한 부분에 비동기 처리를 하고 적절한 회로 차단기와 타임아웃을 사용하도록 설계해야 합니다.
투명성 (Transparency)
  • MSA는 여러 서비스가 협업하기 때문에 시스템 어느 지점에서나 투명하고 관찰 가능해야 문제를 관찰하고 진단할 수 있습니다.
  • 이를 위한 비즈니스, 운영, 인프라스트럭처 메트릭, 로그, 요청 추적 등을 생성해야합니다.
자동화 (Automation)
  • MSA는 단일 어플리케이션을 개발하는 것보다 복잡한 아키텍처 구조를 가집니다.
  • 자동화된 CI/CD 를 통해 배포와 운영을 안정적으로 수행해야 합니다.

MSA의 장점

  1. 단일 목적 수행 (Single Purpose)
    1. 마이크로 서비스는 단일 역량을 담당합니다. 서비스 하나에 책임도 하나입니다. 이는 비즈니스와 관련될 수도 있고 제3자와의 연계와 같은 공유 기술 역량일 수도 있습니다. 이 특징은 마이크로 서비스의 높은 응집도(High Cohesion)로 이어집니다.
  2. 느슨한 결합 (Loose Coupling)
    1. 마이크로 서비스는 자신의 데이터 저장소가 있는 경우 데이터 저장소에 대한 오너십을 가집니다. 이는 서비스 결합력을 줄여주는데, 다른 서비스는 자신이 소유하지 않은 데이터에 접근할 때 데이터를 소유한 서비스가 제공한 인터페이스를 통해서만 접근이 가능합니다.
  3. 높은 응집도 (High Cohesion)
    1. 마이크로 서비스는 단일 비즈니스를 수행하기 때문에 서비스의 기능들은 자연스럽게 높은 응집도를 가지게 됩니다. 각 서비스는 모든 관련된 행위와 데이터를 캡슐화하여 관리합니다. 새로운 기능을 구축해야하는 경우 모든 변경사항이 하나의 단일 서비스에서만 수정되도록 해야합니다.

MSA의 단점

  1. 시스템의 복잡성
    1. 독립적인 서비스들에 의해 시스템이 구성되어 있고 서비스들간의 협업을 통해 비즈니스가 처리되다보니 시스템이 복잡합니다. 운영 측면에서 한 비즈니스 프로세스의 파악을 위해 여러 서비스들의 존재를 알아야하고 그들 사이에서 발생하는 협업들에 대해서도 파악해야 합니다. 이는 운영의 어려움을 가져옵니다.
  2. 어려운 트랜잭션 관리
    1. 마이크로 서비스 세상은 분산 환경이기 때문에 강력한 트랜잭션 일관성을 제공하기 힘듭니다. 최종적인 일관성 제공을 위한 보상 트랜잭션 패턴과 같은 메커니즘이 필요합니다. 정말 트랜잭션 무결성이 필요한 상황을 처리하기 매우 어려울 수 있으며, 이를 해결하기 위한 메커니즘을 구현하는데 큰 비용이 발생할 수 있습니다.
  3. 테스트의 어려움
    1. 테스트를 하기 위해선 의존성이 있는 서비스를 미리 확인해야 합니다. 의존성 있는 서비스가 정상적이지 않은 경우에는 테스트가 어렵습니다. 개발자가 개발을 위한 테스트 환경을 구축함에도 어려움을 겪습니다. 테스트하는 서비스가 아닌 의존성 있는 서비스에서 발생하는 에러의 경우에는 협업이 필요할 수 있습니다.
  4. 디버깅의 어려움
    1. 시스템의 문제가 발생하였을 때 이를 파악하는데 어려움이 발생합니다. 문제가 발생하였을 때 모놀리스 아키텍처에서는 서버 하나에 대해 문제의 원인 파악을 수행하면 되지만 마이크로 서비스 아키텍처에서는 의존성 있는 모든 서비스들에 대헤 문제 원인 파악을 수행해야합니다. 만약 통합 로그 관리 시스템이 없다면 문제 해결을 위한 원인 파악은 악몽 수준일 듯 합니다.

Junhyunny's Devlogs - Micro Service Architecture Junhyunny's Devlogs - Micro Service Architecture 장점과 단점

주석