마이크로서비스 아키텍처란?
마이크로서비스 아키텍처((Microservice Architecture)는 하나의 큰 애플리케이션을 여러 개의 작은 서비스 유닛으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처를 말합니다. 서비스의 전체 사이클은 몇 가지 단일 기능 모듈들의 합으로 이루어지며, 해당 모듈들은 개별적으로 배포되고 운영됩니다.
전통적 방식인 모놀리식 아키텍처 (Monolithic Architecture)로 어떤 애플리케이션을 개발한다면 모든 기능 코드가 한 서버에 배포될 것입니다.
반면 마이크로서비스 아키텍처로 개발한다면 각 기능들은 독립적인 자동화 서비스(마이크로서비스)로서 개별 서버를 갖고 있게 됩니다. 각 마이크로서비스는 상호 통신이 가능하며 이를 통해 전체 서비스를 구성하게 됩니다.
예를 들어, 어떤 쇼핑몰 애플리케이션 A는 모놀리식 아키텍처로, 애플리케이션 B는 마이크로서비스 아키텍처로 제작되었다고 가정해봅시다. 두 애플리케이션은 상품 검색, 지불, 리뷰 및 댓글과 같은 몇 가지 기능들을 제공하며 생활용품, 의류, 가전 등 다양한 상품 카테고리로 구성되어 있습니다.
어느 날 의류 카테고리의 지불 기능의 패치가 필요하게 됐습니다. 이때 A는 이 애플리케이션 전체가 구동되는 서버를 다운시킨 후 코드를 수정하고 장시간에 걸쳐 배포작업을 해야 할 것입니다.
반면 B는 패치가 필요한 기능에 해당하는 서버의 코드만 수정하여 빠르게 배포가 가능하기 때문에 다운타임없이 서비스가 지속될 수 있습니다.
클라우드 플랫폼과 마이크로서비스
클라우드의 장점은 언제 어디에서나 쉽게 서버 자원을 추가해서 사용할 수 있는 확장성과 유연성, 사용한 만큼만 지불함으로써 비용 절감을 할 수 있다는 점입니다.
클라우드의 분산 시스템과 스케일아웃을 통한 확장성은 독립적인 모듈로 나뉘어 동적으로 실행되는 마이크로서비스 아키텍처와 필연적인 연관성이 있습니다.
IaaS(Infrastructure as a Service) 환경에서 실행되는 클라우드 플랫폼(PaaS)에서 마이크로서비스 실행 시 클라우드의 장점은 극대화될 수 있게 됩니다.
예상할 수 있듯, AWS, Azure등 주요 퍼블릭 클라우드 서비스 업체들은 모두 마이크로서비스 기반의 애플리케이션 구축을 위한 솔루션을 제공하고 있습니다.
넷플릭스(Netflix)는 수백 개 이상의 마이크로서비스를 AWS 클라우드 기반으로 분산형으로 운영하고 있으며, 아마존닷컴의 한 페이지도 수많은 마이크로서비스의 조합으로 이루어져 있다고 합니다.
이외에도 많은 기업들이 급변하는 비즈니스 환경에 맞추어 마이크로 서비스 아키텍처를 선택하고 있습니다.
마이크로서비스 아키텍처의 장단점
마이크로서비스는 분산형 개발을 통해 개발 시간을 단축하고 높은 확장성을 지니고 있는 것이 장점입니다. 기능단위로 서비스를 개발하고 작업할당을 할 수 있어 해당 기능에 맞는 기술을 사용할 수 있습니다.
또한 새로 추가되거나 수정할 사항이 생겼을 때 전체 애플리케이션에 대한 영향에 대한 우려가 줄고 빠르게 빌드, 배포할 수 있게 됩니다.
반면 마이크로서비스 아키텍처상에서는 여러 작은 서비스들이 분산되어 있기 때문에 관리 포인트가 늘어나고, 이들을 통합해서 모니터링하고 운영하는 것이 모놀리식 아키텍처에 비해 어려워집니다.
한 서버 안에서 통합 비즈니스 로직에 따라 서비스가 구현되는 모놀리식 아키텍처와 달리, 마이크로서비스 아키텍처는 각 서비스를 담고 있는 서버 간 통신을 모두 제어해야 합니다.
이로 인해 마이크로서비스는 필연적으로 매우 정교한 배포 자동화를 필요로 하며 많은 PaaS(Platform as a Service) 서비스, 또는 도커(Docker)와 같은 컨테이너 기술의 도움을 필요합니다.
새로운 아이디어로 무장한 스타트업의 민첩성에 적합할 뿐 아니라, 급변하는 디지털 비즈니스에 기업이 대응하기 위한 유연성 확보에 유리하다는 측면에서 마이크로서비스 도입은 점차 확대될 것으로 보입니다.
그러나 현실에 맞지 않게 적용한다면 오히려 더 많은 오버헤드 비용이 발생할 수 있어 도입에 신중해야 합니다.
따라서 마이크로서비스 적용에 앞서 적합성 판단, 기업의 서비스 단위를 파악해 비즈니스 니즈를 분석하는 것이 우선되어야 할 것입니다.