1-4. MSA 특징 - 2

지난 차시에서는 마이크로서비스 아키텍처의 주요 특징 4가지인 Biz 역량기반팀, 분권 거버넌스, 프로젝트가 아니라 제품, 인프라 자동화에 대해 살펴보았습니다. 이번 차시에서는 이어서 나머지 마이크로서비스의 특징을 하나하나 살펴보도록 하겠습니다. 다섯 번째 MSA 특징은 분권 데이터 관리입니다. 모노리스의 시스템을 살펴보면 단일 통합 데이터베이스를 사용하고 있습니다. 이러한 단일 데이터베이스를 유지하는 방식은 벤더의 라이센서 모델과 데이터베이스의 기능 확장에 그 뿌리를 두고 있습니다. 마이크로서비스는 Polyglot Persistence 접근 방법을 선택하며, 서비스별로 데이터베이스를 갖도록 설계를 합니다. 즉, 이 말은 각각의 저장소가 분산되어 있어야 하며, 다른 서비스의 저장소를 직접 호출할 수가 없고 API를 통해서만 접근해야 함을 의미합니다. 그런데 이런 케이스에는 반드시 등장하는 문제가 있습니다. 데이터 일관성 문제인데요. 주문 서비스와 배송 서비스가 있다고 생각을 해봅시다. 상품이 1건 주문되면 배송도 1건 발생해야 하는데요. 보통 이러한 처리는 동시적인 트랜잭션으로 처리가 됩니다. 그런데 2개의 서비스를 트랜잭션으로 묶으면 마이크로서비스의 장점인 독립적인 서비스 제공이 어렵게 됩니다. 따라서 마이크로서비스는 이러한 케이스에 데이터 일관성을 유지하기 위해 두 서비스 간의 트랜잭션이 아닌 협업을 강조합니다. 이 말은 Eventual Transaction이라도 하고 결과적 일관성이라고도 하는데요. 두 서비스의 데이터가 일시적으로 불일치하는 시점에 있고 일관성이 없는 상태이지만, 결국에는 두 데이터가 같아진다는 개념입니다. 보통 이벤트와 Q를 써서 해결하는데요. 상품이 주문되면 상품이 주문됐다는 이벤트를 Q에 보냅니다. 그리고 상품 서비스에 있는 자신의 수행 작업을 완료합니다. 배송 서비스는 Q에서 상품이 주문됐다는 이벤트를 읽고 배송 서비스를 수행하면 됩니다. 배송 서비스가 실패했다면 어떨까요? 마찬가지로 Q에 실패된 배송 이벤트를 던지고 나머지 서비스들은 이를 읽어서 본인의 서비스를 처리하면 됩니다. 여섯 번째 MSA 특징은 똑똑한 끝지점 단순한 파이프입니다. 기존의 SOA는 서비스 간의 연계 및 공유를 위해 UDDDI 및 ESB라는 서비스 채널을 사용했습니다. 특히 ESB를 강조해서 ESB가 기본적인 연계에 의해 비즈니스 처리 등을 한다고 많이 강조를 했는데요. 마이크로서비스는 smart endpoints and dumb pipes 방식을 선호합니다. 이는 Domain Logic은 서비스 속에서 응집성 높게 유지되어야 하고, 각각의 서비스의 연결은 느슨해야 한다는 것을 의미합니다. 따라서 REST와 같은 단순한 도구를 SOA에서 사용하는 UDDDI, SOAP, WSDR과 같은 도구보다 선호합니다. 또한 서비스 연결을 위해 Rabbit MQ나 Zero MQ 같은 가벼운 메시지 버스를 주로 사용합니다. 그리고 느슨한 연결을 위해 잦은 호출이 필요한 고운 입자 인터페이스 방식을 호출이 적은 거친 입자의 인터페이스 방식으로 변경하여 사용할 필요가 있습니다. 일곱 번째 MSA 특징은 실패를 위한 설계입니다. 마이크로서비스는 언제든 실패할 수 있으며, 실패해서 더 이상 진행할 수 없을 때도 자연스럽게 대응할 수 있도록 설계해야 합니다. 다양한 실패에 대비하여 자동으로 테스트할 수 있는 환경을 마련해야 하고, 이런 마이크로서비스의 실패를 감지하고 대응하기 위해서는 실시간 모니터링 체계를 갖추어야 합니다. 예로 서킷 브레이크 패턴을 말할 수 있겠는데요. 서킷 브레이크 패턴은 회로 차단기처럼 각각의 서비스를 모니터링하고 있다가 하나의 서비스가 다운되거나 실패되면 이를 호출하는 서비스의 연계를 차단하고 이에 적절한 대응을 하기 위해 만드는 것을 의미합니다. 이러한 설계는 서비스가 긴급 장애 상황에 빠르고 유연하게 대응할 수 있도록 합니다. 본 주차에서는 비즈니스 민첩성을 위한 시스템의 조건으로 마이크로서비스 개념과 특성을 살펴보았는데요. 살펴보니 오늘날의 소프트웨어의 성공적인 개발은 아키텍처만 파고든다고 되는 것은 아닌 것 같습니다. 즉, 아키텍처, 프로세스, 조직문화 등이 모두 서로의 필연조건 및 충분조건이 되고, 이것들이 모두 어우러질 수 있을 때 잘 구조화된 아키텍처도 빛을 볼 수 있을 거라 생각합니다. 특히 지금까지 살펴본 바로는 이런 마이크로서비스 아키텍처를 위해서는 점진 반복적인 개발 프로세스, 유연하고 자동화된 개발환경, 자율적인 Biz 역량기반 개발조직이 필요함을 알았습니다. 이상으로 마이크로서비스 개념과 특성에 대해 알아보았습니다. 감사합니다.