LG CNS의 사내 전문가들이 LG CNS 블로그 독자 여러분들을 위해 최신 IT 기술 및 트렌드를 소개해 드립니다.
매월 1회씩 아래와 같은 순서로 연재될 예정이오니, 독자 여러분들의 많은 관심과 기대 바랍니다.
[연재기획 주제]
- 1편: IT를 통해 서비스업으로 변하고 있는 제조업체들
- 2편: 무엇을 해야 할지도 알려주는 처방분석의 세계
- 3편: 앱의 시대에서 가상 비서의 시대로, Virtual Personal Assistant
- 4-1편: 블록을 조립하듯 앱을 조립하는 '마이크로서비스' ①
- 4-2편: 블록을 조립하듯 앱을 조립하는 '마이크로서비스' ②
(연재 주제는 기고 시점의 이슈, IT 트렌드에 따라 바뀔 수 있습니다)
지난 시간에는 마이크로서비스의 정의와 특징 및 주목받게 된 배경과 마이크로서비스 도입의 주요 목적에 대해 살펴봤는데요. 오늘은 마이크로서비스의 기술적인 측면과 기업의 적용 사례 등에 대해서 알아보겠습니다.
기술적으로 살펴보자면, 마이크로서비스 프레임워크는 Inner Architecture와 Outer Architecture로 구성되어 있습니다. Inner Architecture는 개별 마이크로서비스 구축을 위한 아키텍처이고 Outer Architecture는 개별 마이크로서비스가 개발, 배포, 실행되는 운영환경과 분산된 마이크로서비스의 관리 기능을 제공합니다.
즉, Inner Architecture는 개별 마이크로서비스를 최대한 독립적이고 간단하게 구성하여 개발 생산성과 배포 유연성을 높이고, 이로 인해 늘어난 분산 환경과 운영의 복잡성은 Outer Architecture에게 해결하도록 하는 모델을 지향하고 있습니다. Outer Architecture에서는 자동화 툴을 최대한 활용해서 높아진 시스템 복잡도를 최소화해야 합니다.
l Inner•Outer Microservice Architecture
위 그림을 보면, 주요 기술들이 시스템 단위가 아니라 마이크로서비스 단위로 구성되고, 마이크로서비스 간에는 Messaging Channel과 API를 통해 통신하며, Build&Test, Deployment, Platform 자동화를 위한 기술이 강조되어 있음을 볼 수 있습니다.
마이크로서비스를 지원하기 위해 많은 곳에서 솔루션과 오픈소스 S/W를 내놓고 있습니다만, 그중에서도 Netflix에서 개발하고 오픈한 오픈소스 S/W가 제일 활용도가 높습니다. Netflix는 마이크로서비스라는 용어가 있기 전부터도 유사한 형태의 아키텍처를 고민했습니다.
마이크로서비스 아키텍처에서는 기존과는 달리 매우 많은 개수의 서비스들이 수시로 업데이트되고 운영되기 때문에, 기존의 모니터링이나 자동화 툴로는 해결되기 어려운 부분이 많았고 Netflix에서는 이를 해결하고자 자체 개발한 많은 툴들을 오픈소스로 내놓았습니다.
다른 기업에서 마이크로서비스 아키텍처를 도입할 때 많이 활용되고 있는 Netflix의 주요 오픈소스 S/W는 Asgard(애플리케이션 배포 자동화 및 클라우드 관리 툴), Hystrix(서비스 가동성•오류 모니터링 및 관리), Eureka(서비스 등록 및 검색), Ribbon(Client-side 로드밸런싱) 등이 있습니다.
Spring Framework로 유명한 Spring 재단에서는 마이크로서비스 아키텍처 도입을 고민하는 기업들을 위해 Spring Framework에서 Netflix를 쉽게 활용할 수 있도록 하는 Spring Cloud Netflix 프로젝트를 운영하고 있습니다. 이를 활용하면 한 줄의 코드 추가로 Netflix 오픈소스 S/W를 Spring Framework에 적용할 수 있습니다. 이 외에도 Gilt나 Capital One 등에서 오픈소스 툴들을 내놓고 있습니다.
마이크로서비스 크기는 코드의 줄 수(Line of Code), 팀 크기 등을 통해 정량적으로 정의할 수 있는 것이 아니기 때문에, 에릭 에반스(Eric Evans)가 주장한 Domain-Driven Design 사상을 기반으로 마이크로서비스 단위를 결정하는 것이 효율적입니다.
따라서, 마이크로서비스를 나눌 때 Bounded Context(독립적으로 서비스되어도 문제없는 업무 범위) 안에서 분할되어야 합니다.
l Microservice 서비스 식별 프로세스
마이크로서비스를 식별하기 위한 프로세스와 방안을 살펴보면 먼저 Bounded Context 기반으로 업무를 분할하여 마이크로서비스 후보 단위를 결정합니다. 후보 분할 단위는 업무에 대한 유지 보수, 배포 적절성과 CSR 등을 통해 시스템 변경이 잦은 단위로 후보를 결정하게 됩니다.
마이크로서비스 단위가 너무 크면 빠른 개발•배포, 정교한 서비스 확장에 대한 효과가 미비하고, 너무 작으면 성능, 트랜잭션에 대한 관리의 어려움이 있습니다. 따라서, 2~4 주 안에 개발할 수 있는 Small Batch Size를 보통 권장하고 있습니다.
후보 단위의 마이크로서비스에 대해 업무 간 Dependency 분석을 하여 시스템 호출 관계도 분석과 CRUD Matrix 분석을 통한 DB 연관도 분석을 통해 독립된 마이크로서비스로 분리가 가능한지 검토합니다. 호출•피호출 관계에 따라 분산 또는 결합 여부를 결정할 수 있습니다.
Bounded Context와 업무 간 Dependency를 분석하여 최종 마이크로서비스 단위를 도출합니다. 처음 도입 시에는 큰 단위로 도출하고 업무 니즈(비즈니스 성장률, 복잡도, 확장성)를 고려하여 점점 작은 크기로 서비스를 도출하는 것이 효율적입니다.
마이크로서비스 단위가 결정되면 운영을 통해 원하는 시점에 독립된 배포 지원 여부, 배포까지 Lead Time 등을 측정하여 마이크로서비스 적용에 대한 효과를 판단하고 만약 효과가 크지 않을 경우 마이크로서비스 단위 재조정을 통해 비즈니스에 맞는 서비스 크기로 재조정할 수 있습니다.
마이크로서비스 아키텍처의 적용 사례가 아주 많다고는 할 수 없습니다. 물론 Netflix, Amazon, Gilt와 같은 곳은 시스템 규모와 복잡도의 증가로 인해 개발 생산성 및 품질 저하를 해결하기 위해 수 년 전부터 마이크로서비스 아키텍처를 도입했지만 대부분의 기업들에게는 생소한 개념이기 때문입니다.
그럼에도 불구하고 기술을 중요시하는 기업을 중심으로 도입이 진행되고 있습니다. 금융산업에서도 몇몇 선도 기업들이 도입 중이며 공공분야의 경우 영국 전자정부에서 도입했습니다. 특히 커머스 산업이나 O2O 기업들이 많이 도입하고 있고 이 외에도 부동산, 제조, 엔터테인먼트, 인터넷 서비스 등에서도 조금씩 도입하고 있는 것을 볼 수 있습니다.
l Microservice Architecture 적용 기업
Gilt의 마이크로서비스 아키텍처 적용 사례를 살펴보겠습니다. Gilt는 플래시 세일을 유행시킨 유명한 온라인 쇼핑몰로써 브랜드•디자이너 상품 등 온라인으로 명품 플래시 세일을 진행하며 유명세를 떨쳤는데요.
Gilt에서는 매일 낮 12시에 다양한 디자이너 제품의 세일을 시작하는데, 12시에는 재고가 소진되기 전에 구매하려는 소비자로 인해 트래픽이 급격하게 늘어나는 특징이 있습니다.
l Gilt의 안드로이드 앱 (출처: https://www.gilt.com/apps/iphone#android-app)
Gilt 사이트가 세일을 시작하는 12시에는 Amazon 일간 트래픽(Daily Traffic)의 반 정도까지 순간적으로 트래픽이 높아집니다. 보통 때의 트래픽에 비해 10배 이상의 큰 차이가 있어서 세일 시간에 트래픽 용량 초과로 사이트가 다운되는 경우가 종종 발생했다고 합니다. 또, 생활용품, 로컬 음식, 여행상품 등 다양한 상품으로 빠르게 확장하면서 전체적인 시스템이 커지며 복잡도가 증가하고 서비스 간 의존성이 복잡해지며 배포에 걸리는 시간이 늘어나기 시작했다고 합니다.
Gilt에서는 이를 해결하기 위해 마이크로서비스 아키텍처를 도입해 현재는 약 400개 이상의 마이크로서비스로 분리한 상태입니다. 각 서비스는 독립되어 있으므로 서비스 단위로 개발(업데이트)하고 원하는 시간에 배포가 가능한 상태입니다.
도입의 방식은 Big Bang 방식으로 진행한 것이 아니라 필요한 부분부터 서비스로 분리하고 기존의 잘 작동하는 부분은 일단 유지하는 Incremental Approach 방식으로 진행했습니다.
마이크로서비스 아키텍처를 성공적으로 도입하기 위해 문화적인 측면에서도 변화가 있었는데, 서비스에 대한 오너쉽을 팀에게 주어 각 서비스에 대한 개발, 운영 등 모든 권한을 해당 팀에게 주었습니다. 또한 여러 가지 새로운 시도를 빠르게 해보고 실패하면 실패 사례를 널리 알려서 같은 실수가 반복되지 않도록 하는 문화를 만들었습니다.
Gilt의 아키텍처 변화를 좀 더 상세하게 살펴보면 3단계의 진화 과정이 있었습니다.
-
2007년: 처음 개발 시, 당시 인기 있던 개발 환경인 Ruby on Rail, Postgre DB 활용하여 사이트 구성. 트래픽이 몰리기 시작하며 사이트 다운 현상. 특히 세일이 시작되는 12시에는 Ruby process가 1000개씩 만들어지며 로드밸런싱 실패함.
-
2011년: 서비스 확장하며 명품 세일(Gilt), 지역 할인(Gilt City), 생활용품(Gilt Home) 등 카테고리 별로 애플리케이션을 분리하고 10개의 공통 모듈을 별도 관리. 프로세스•DB Overloading과 로드밸런싱은 해결하였으나 내부 개발 생산성은 여전히 이슈(200,000 줄이 넘는 코드 업데이트). 카테고리 별 애플리케이션과 공통 모듈이 완벽히 분리되지 않아서 배포 사이클은 여전히 길었음.
-
2014년: 개발 생산성 향상을 위해 다시 아키텍처 변화 진행: Scala와 Play 프레임워크를 기반으로 한 마이크로서비스 아키텍처로 변화. 도메인에 따라 마이크로서비스로 분리하고 각 서비스는 의존성 최소화. 그 결과 각 서비스는 크기가 작아져서 업데이트 용이해졌고 서비스 간 의존성이 최소화되어 서비스별로 빠르게 배포 가능함.
Gilt의 서비스 단위를 살펴보면 아래 그림과 같습니다. 실제 마이크로서비스 단위를 보면 Account credit, discount 등으로 구성되는 등 매우 작은 것을 알 수 있습니다. ‘상품’, ‘고객’ 등의 서비스 내에 여러 가지 정보가 내재되어 있는 것이 아니라 다양한 정보를 개별 마이크로서비스로 떼어놓은 것입니다.
l Gilt의 Microservice 단위 예시
마이크로서비스 아키텍처에 대한 기대 가치는 매우 크지만, 이의 적용이 활성화되어 많은 기업에서 활용되고 그 가치를 명확히 입증하기까지는 해결해야 할 이슈와 과제들이 산재해 있습니다.
역량 측면에서 보자면, 마이크로서비스를 위한 오픈소스를 서비스로 제공하는 전문 업체들을 활용할 수 있으나, 마이크로서비스 적용에 대한 적합성 판단, 기업에 맞는 서비스 단위, 디자인 패턴을 적용하기 위해서는 IT 전문성 외에도 비즈니스 도메인에 대한 이해가 필수입니다.
우선적으로 비즈니스 니즈 분석을 통한 적용 영역을 선정하는 것이 무엇보다 중요한데요.
첫째, 급변하는 비즈니스 환경에 따라 업무 변경이 잦은데 기존의 크고 복잡한 모놀리식 아키텍처로 인해 빈번한 변경 요구에 즉시 대응이 어려운 경우입니다.
둘째, 전체 시스템이 아닌 업무 단위의 정교한 확장(Scale-Out)이 필요할 경우입니다. 특히 Cloud 환경으로 이전했을 때 비용 효율적인 구조를 가지기 위해 서비스 단위 확장을 많이 고려합니다. 마이크로서비스에 대한 적용 영역이 선정되면 기업 비즈니스에 맞는 서비스 단위, 설계 원칙들을 고려해야 합니다.
서비스 단위의 독립적 배포, 확장이라는 개념이 일반 기업에게는 아직 낯설고 관련 툴, 인프라들을 기업에 맞게 활용하기 위한 체계가 아직 미비한 수준이며, 관련 인력을 확보하고 진정한 서비스 역량으로 내재화하기까지는 상당한 투자와 시간이 소요될 것으로 예상됩니다. 또한 마이크로서비스 아키텍처에 적합한 서비스 기반 조직체계 구성, 역할과 책임 또한 고려할 필요가 있습니다.
현재는 디지털 비즈니스를 선도하고 있는 업체인 Netflix, Amazon, eBay 등이 적극적으로 마이크로서비스를 도입하고 관련 기술들을 오픈소스화하면서 선도하고 있지만, 금융, 공공 등 적용 도메인 영역도 점차 확대되고 있고 솔루션도 마이크로서비스 기반으로 개발되고 있습니다.
향후에는 일반 기업들도 점차 디지털 비즈니스로 전환함에 따라 스타트업과 같은 민첩성과 유연성을 확보하기 위해 마이크로서비스 아키텍처 도입을 확대해 나갈 것입니다.
글 | LG CNS 정보기술연구원
['최신 IT를 만나다' 연재 현황]
* 해당 콘텐츠는 저작권법에 의하여 보호받는 저작물로 LG CNS 블로그에 저작권이 있습니다.
* 해당 콘텐츠는 사전 동의없이 2차 가공 및 영리적인 이용을 금하고 있습니다.
'IT Insight' 카테고리의 다른 글
고객의 감춰진 마음을 읽는 SNS 분석 (1) | 2017.01.09 |
---|---|
미래에 경험하게 될 인공지능 (2) | 2016.12.21 |
블록을 조립하듯 앱을 조립하는 '마이크로서비스' ① (1) | 2016.12.08 |
인공지능과 인간지능은 얼마나 닮았을까 (0) | 2016.11.29 |
데이터마이닝 소개와 분석 방법 (0) | 2016.11.28 |