마이크로서비스란


2 minute read

모놀리식

마이크로서비스와 반대되는 개념으로 단일 단위로 개발/배포되며 애플리케이션 일부를 업데이트하기 위해 전체 애플리케이션을 재배포해야한다.

SOA와 ESB

SOA(서비스 지향 아키텍쳐)는 모놀리식 애플리케이션의 기능을 서비스라 부르는 재사용 가능하고 결합이 느슨한 엔티티로 분리한 아키텍쳐이다.

  • 잘 정의된 비즈니스 기능을 서비스 단위에서 자체적으로 동작/네트워크를 통한 접근 가능한 형태로 구현
  • 소비자는 서비스 인터페이스만 염려하고 구현에는 신경쓰지 않음
  • 서비스는 자체적으로 동작되며 (독립성을 위해) 느슨하게 결합

SOA 패러다임을 통해 각 비즈니스 기능은 여러 하위 기능을 포함하는 큰 덩어리의 서비스(주로 웹 서비스)로 구축되며 애플리케이션 서버 내에 배포된다. 비즈니스 기능을 사용하기 위해서는 다른 여러 시스템을 서로 통합/연계해야 하는데, ESB(엔터프라이즈 서비스 버스)가 데이터/서비스 통합에 사용된다.

API

비즈니스 기능을 관리 서비스나 API로 노출하는 것은 현대 엔터프라이즈 아키텍쳐의 핵심 요구사항이지만, SOA/ESB는 이러한 요구사항을 만족하는 이상적인 솔루션이 아니므로, 기존 SOA 구현 위에 새로운 API 관리/API 게이트웨이 계층(API Facade)을 추가한다. API는 특정 비즈니스 기능에 대한 간단한 API를 제공하고 ESB/웹 서비스 계층의 모든 내부 복잡성을 숨긴다.

마이크로서비스

마이크로서비스 아키텍처는 독자적인 프로세스로 실행되고 독립적으로 개발/배포되는 작은 서비스의 모음으로 단일 애플리케이션을 개발한다. 즉, 모놀리식 애플리케이션의 계층을 독립적인 비즈니스 기능 지향 서비스로 분해해, 중앙 ESB를 없에고 서비스가 서비스 간 통신 및 구성 로직을 관리하게 한다.

비즈니스 기능 지향

주어진 서비스는 오직 한 가지 일에만 집중하고 이를 잘 수행하여야 한다. 참조할 만한 개념은 다음과 같다

  1. 단일 책임 원칙(SRP, Single Responsibility Principle)
  2. 콘웨이의 법칙(Conway’s law)
  3. 12 팩터 앱(12 Factor App)
  4. 도메인 기반 디자인(DDD, Domain-Driven Design)

자율성: 개발 배포 확장의 독립성

마이크로서비스는 독립적인 개체로 개발, 배포, 확장된다. 즉, 웹 서비스 또는 모놀리식 애플리케이션 아키텍처와 달리 서비스가 동일한 실행 런타임을 공유하지 않으며 대신 서비스가 컨테이너와 같은 기술을 활용해 서로 격리된 런타임으로 배포된다. 참조

  1. 도커(Docker)
  2. 쿠버네티스(Kubernetes)

자율적인 서비스는 서비스 분리를 통해 장애를 격리함으로 전체 시스템의 탄력성을 보장하며, 네트워크상에서 메시지를 활용한 서비스 간 통신을 통해 느슨하게 결합된다.

중앙 ESB 부재: 스마트 엔드포인트와 멍청한 파이프(smart endpoint&dumb pipe)

마이크로서비스는 ESB 대신 스마트 엔드포인트와 멍청한 파이프라는 새로운 스타일의 서비스 통합 수단을 도입한다. 기존 모놀리식 아키텍쳐에서의 비즈니스 기능은 기본 서비스 및 시스템의 통합이나 연결을 통해 ESB 수준에서 구현되나, 스마트 엔드포인트와 멍청한 파이프를 사용하면 모든 비즈니스 로직(서비스 간 통신 로직 포함)은 각 마이크로서비스 레벨(스마트 엔드포인트트에 있으며, 이러한 모든 서비스는 비즈니스 로직이 없는 기본 메시징 시스템(멍청한 파이프)에 연결된다.

단 중앙 ESB를 제거하는 것으로 복잡성을 제거하는 것은 불가능하며 ESB의 중앙집중식 기능들이 모든 마이크로서비스에 분산되어, ESB가 제공하는 기능들은 마이크로서비스 수준에서 구현돼야 한다. 특히 네트워크를 통한 서비스 간 통신으로 인해 오히려 오류가 발생하기 쉽다.

실패 내결함성(fault tolerance)

마이크로서비스 아키텍쳐는 세부적으로 분할된 서비스들의 모음이므로 하나 이상의 서비스가 실패할 때 전체 애플리케이션이 중단되면 안 된다. 따라서 마이크로서비스에서 발생한 실패를 적절하게 처리해야 애플리케이션의 비즈니스 기능에 미치는 영향을 최소화할 수 있다. 참조

  1. 회로 차단기(Circuit Breaker)
  2. 재해 복구(Disaster Recovery)
  3. 로드 밸런싱(load-balancing)
  4. 페일오버(fail-over)

분산화된 데이터 관리

각 마이크로서비스는 자체적인 데이터베이스와 데이터베이스 스키마를 가져야 한다. 분산화된 데이터 관리를 통해 마이크로서비스를 서로 완벽하게 분리할 수 있고, 마이크로서비스 별로 서로 이질적인 데이터 관리 기술을 자유롭게 선택할 수 있다..

Leave a comment