한국 IT업계에서도 마이크로서비스가 심심치 않게 회자되고 있다. 이에 아마존웹서비스는 마이크로서비스에 대한 태생적 우위를 강조하며, 업계의 관심을 유도하고 있다.
마이크로서비스란 특정 기능만 수행하는 극소형의 앱 혹은 서비스를 만들고, 이를 API로 얼기설기 엮어 복잡한 애플리케이션을 만든다는 아키텍처다.
마이크로서비스는 하나의 기능으로 이뤄진다. 각 마이크로서비스는 독립적으로 작동하도록 들어지고, 개별적으로 운영 및 관리된다. 기업의 애플리케이션이나 웹서비스는 여러 마이크로서비스의 조합으로 이뤄진다. 마이크로서비스의 강점은 변화에 빠르게 대응하고, 남들보다 빨리 도전할 수 있는 속도다.
마쿠 레피스토 아마존웹서비스 에반젤리스트는 “IT에서 가장 중요한 것 중 하나가 속도와 집중”이라며 “경쟁사보다 빠르게 IT를 운영할 수 있는 속도를 갖춰야 남들보다 시장에 빠르게 출시할 수 있다”고 설명했다.
그는 “전체 IT스택 중 맨 위인 애플리케이션에 집중하면서 그 속도를 담보할 수 있으며, 속도와 집중이란 것을 달성하기 위해 마이크로서비스 아키텍처가 뜨고 있다”고 덧붙였다.
그동안 애플리케이션의 아키텍처는 구성요소를 따로 뗄 수 없는 견고한 단일체였다. 모노리틱(monolithic)이라 불리는데, 대형서버에 고정돼 있고, 확장성이나 코드 관리성을 확보하기 어렵다. 기능하나를 추가하거나 수정하려면 전체 애플리케이션의 작동을 중단시켜야 하고, 그 작업도 복잡다난하다.
마쿠 레피스토는 “기업 입장에서 중요한 건 제공하는 핵심 제품과 서비스이지 뒷단에서 사용되는 데이터베이스가 아니다”라며 “기업의 고객이 그 기업의 제품이나 서비스를 쓰는 이유는 제공하는 특별한 기능 때문이기 때문에 기업은 애플리케이션의 기능에 집중하고, 나머지에 대한 노력과 에너지 투입을 지양해야 한다”고 말했다.
그는 “앱을 다양한 요소로 쪼개서 보면, 정말 집중해야 하는 기능만 집중하고, 나머지는 외부의 자원을 활용하거나 외부 서비스에 맡길 수 있다”며 “아마존웹서비스는 기업에서 집중하지 않아도 되는 부분을 대부분 자동화했고, 확장성도 갖췄다”고 강조했다.
아마존웹서비스는 시작부터 마이크로서비스라 할 수 있다. 아마존닷컴의 IT부서로서 이 회사는 인프라 플랫폼을 잘게 쪼개 서비스로 제공했다. 내부에 제공하던 여러 IT서비스들을 외부에 공개해 판매한 게 오늘날 아마존웹서비스의 사업이다.
그는 “AWS는 지난 10여년간 프로덕션 환경에 마이크로서비스를 구축해 70개 이상의 서비스를 제공중”이라며 “모든 서비스는 개발자나 회사에 꼭 필요한 서비스를 담고 있어서, 레고블록을 조립하듯, DB나 IoT 같은 걸 가져다 원하는 솔루션으로 만들 수 있게 한다”고 설명했다.
AWS로 마이크로서비스를 사용하는 대표적 사례는 넷플릭스다. 넷플릭스는 AWS의 서비스로 600여개의 마이크로서비스를 만들어 운영중이다. 영국 정부는 디지털 웹서비스를 마이크로서비스로 운영중이며, 영국 가디언, 소니 플레이 메모리스온라인 등도 마이크로서비스의 사례다. 한국의 경우 삼성SDS, 우아한형제들, SBS콘텐츠허브 등이 마이크로서비스를 구현했거나 검토중이다.
마쿠 레피스토 에반젤리스트는 AWS에서 마이크로서비스 아키텍처를 만드는 방법으로 세가지 옵션을 제시했다. 가상머신, 컨테이너, 서버리스 컴퓨팅 등이다.
먼저, 가상머신은 당연히 서버 가상화를 사용하는 것을 의미한다. 각 VM에 마이크로서비스를 담는 것이다.
최근 마이크로서비스 인프라의 주류는 컨테이너다. AWS ECS란 컨테이너 서비스를 제공중이다. 컨테이너는 OS 커널 위에 여러 개를 생성할 수 있는데, 컨테이너 내부에 바이너리 코드와 하드웨어 리소스 설정들을 담게 된다. 업데이트의 경우 컨테이너 내부를 수정하는 대신, 새로운 컨테이너를 만드는 것으로 버전 관리를 하게 된다. AWS ECS는 컨테이너 스케줄링, 관리 자동화 등의 기능을 제공해 수많은 컨테이너를 관리하게 해준다.
컨테이너보다 더 적은 인프라 자원을 활용하는 방안이 서버리스 컴퓨팅이다. AWS에서 처음 선보여 경쟁업체의 대응을 낳은 ‘AWS 람다(lambda)’가 서버리스 컴퓨팅을 제공한다. 개발자는 코드를 작성해 AWS에 전달하면, 그 아랫단의 서버, 스토리지, 네트워킹 자원 할당은 AWS에서 알아서 수행한다. 코드가 실행될 때만 인프라를 사용한다. 코드 실행 요청에 응답하는 시간은 1 밀리초 단위다.
그는 기본적인 방식과 함께 API 게이트웨이 서비스도 활용해볼 것을 권했다. 앞단에서 API를 관리하고, 외부의 요청에 적절하게 API를 연결하게 해준다.
모노리틱 아키텍처에선 모든 코드를 하나의 빌드에 집어넣기 때문에, 버그 하나만 나와도 전체 구동을 중단시켜야 한다. 반면, 마이크로서비스는 개별 구성되므로, 각 서비스별로 테스트와 프로덕션이 개별 운영된다.
관련기사
- SW중심기업으로 거듭나고픈 한국기업에게2016.09.12
- 마이크로서비스를 위한 AWS 빌딩 블록 이해하기2016.09.12
- 美 명품핫딜 ‘길트’의 마이크로서비스 구축기2016.09.12
- AWS의 PaaS 진화, 키포인트는 ‘컨테이너’2016.09.12
그는 “기업이 지속적으로 지향해야 하는 건 앱을 계속 발전시켜 가는 것”이라며 “계속 튜닝하면서 더 나은 서비스를 하자는 것으로, 마이크로서비스가 이를 가능하게 해주는 기반이 된다”고 강조했다.
그는 “마이크로서비스를 운영할 때 소규모 팀에 완전한 책임과 권한을 줘 운영하게 하는 게 바람직하다”며 “각 팀이 각 마이크로서비스의 개발, 테스트, 운영 등을 전면적으로 담당해야 한다”고 조언했다.