마이크로서비스 아키텍처 국내 도입 사례 – SK플래닛, 우아한형제들, 삼성전자 등

지난 7월 19일에 TechTonic (삼성SDS 기술세미나) 행사에 마이크로서비스 주제로 발표를 해달라는 초대를 받았습니다. 아무래도 마이크로서비스에 대한 국내 사례가 잘 없다 보니, 최근에 나온 SK Planet, 우아한 형제들, 삼성전자 등 다양한 국내 사례를 조금 더 정리했습니다.

발표 자료는 제 슬라이드 쉐어에서 다운로드 하실 수 있습니다.

우선 앞쪽에서는 주로 넷플릭스를 사례로 들어 어떻게 마이크로서비스를 구축했는지, 운영/모니터링을 위한 오픈 소스 도구 활용 사례를 주로 소개했습니다.

넷플릭스는 수백개의 마이크로서비스를 AWS 클라우드 기반으로 운영하고 있는 것으로 유명하다. 또한, 인터널 API를 기반으로 가벼운 REST 프로토콜을 활용하여 서비스 통신을 하고 있으며, Netflix Internal Web Service Framework(NIWS) 그리고 이러한 다양한 서비스를 발견하기 위한 목록 관리를 위한 Eureka, 서비스간 유연한 소통을 위한 Ribbon 등 클라우드 내 서비스 운영을 위한 수십개의 오픈 소스 프로젝트를 http://netflix.github.io/ 에 공개하고 있다.”

  • 휴스트릭스(Hystrix) – Circuit Breaker(차단기)로서 외부 마이크로서비스가 일시적으로 오류가 나면 연동 조기에 차단(Fail Fast)하여 장애 확대를 조기에 차단하고, 자신의 서비스를 보호한다. Fallback (폴백)이란 Circuit이 오픈된 경우 혹은 Exception이 발생한 경우 대신 실행 캐시로 응답을 미리 만들어서 제공
  • 리본(Ribbon) Client Side Load Balancer로서 주어진 서버 목록에 대해서 부하 분산을 진행한다. 
  • 유레카(Eureka) Dynamic Service Discovery로서 서버 인스턴스 추가/삭제시 Ribbon + Eureka에 의해 자동 반영한다.

넷플릭스는 AWS에 의존하면서도 AWS를 의심하는 대표적인 회사입니다. 즉, 자주 발생하는 인스턴스 (서버) 문제. 애플리케이션 코드 문제, 설정 문제, 네트워크 지연 시간 등 다양하죠. 이러한 문제가 발생했을 때 장애 복구를 위해 Chaos Monkey라는 도구를 만들었고, 이를 오픈 소스로 공개하기도 했습니다.

실제 데이터센터 가용성을 확보해 둔 가용 영역(AZ) 자체엥 문제가 생기는 경우도 있습니다. 아주 드물지만 라우팅 문제, 물리적 데이터 센터 문제 등인데 이를 위해 Chaos Golila라는 내부 복구도구가 있습니다. 마지막으로 리전에 문제가 생겼을 때인데, 대부분 리전 전체 설정을 잘못 배포할 때 일어납니다. 이를 위해 Chaos Kong이라는 도구가 있습니다. 즉, 넷플릭스는 클라우드상의 예견 가능한 모든 문제에 대비히고 있습니다.

과거 다음에서의 제 경험도 잠깐 이야기했는데요. Daum에는 메일, 카페, 검색 등 100+여개의 개별 팀이 운영하는 개별 서비스로 구성 되어 있고, 제가 운영하던 API 플랫폼에서 각 서비스에서 만들어진 수 백개의 사내 API가 느슨하게 연결되어 있었으니, 어떤 의미에서는 마이크로서비스 구조라고 볼 수 있었습니다. 

다만, 특정 API를 서비스 하는 입장에서는 자체 서비스를 위한 용량만 가지고 있는데, 외부에서 호출을 하면 그 서버 비용은 누가 지불해야 하나? 즉 서비스 오너쉽 이슈가 많았습니다. 예를 들어, Daum 메일 갯수 API를 다른 서비스에서 호출하면 API 트래픽은 메일팀이 책임졍야 하나? 인프라 확장 이슈 발생하면 어떻게 하나?

따라서, 마이크로서비스 구조로 변경하기 위해서는 각 팀의 API 개발 및 운영 비용을 낮추기 위해서 API(SOA 구조), 데브옵스(개발 환경)과 더불어 클라우드 (인프라 확장)이 필수라고 생각합니다.

발표에서 소개한 국내 사례는 아래 링크를 참고하시면 도움이 되실 것 같습니다.

Update. 최근에 쿠팡의 마이크로서비스 도입 사례가 올라왔네요! (2018년 3월)
행복을 찾기 위한 우리의 여정, 쿠팡의 MSA — Part 1
행복을 찾기 위한 우리의 여정, 쿠팡의 MSA — Part 2

Disclaimer- 본 글은 개인적인 의견일 뿐 제가 재직했거나 하고 있는 기업의 공식 입장을 대변하거나 그 의견을 반영하는 것이 아닙니다. 사실 확인 및 개인 투자의 판단에 대해서는 독자 개인의 책임에 있으며, 상업적 활용 및 뉴스 매체의 인용 역시 금지함을 양해해 주시기 바랍니다. (The opinions expressed here are my own and do not necessarily represent those of current or past employers. Please note that you are solely responsible for your judgment on checking facts for your investments and prohibit your citations as commercial content or news sources.)

- ;