1. 개요

Microservice 구현을 시작하면 polyglot 서비스로 빠져드는 경향이 있다. 각 서비스에 맞게 자유롭게 언어를 선택할 순 있겠지만, 이렇게 다양한 언어에 대한 라이브러리들을 관리하는 일은 쉽지 않다. 

 * polyglot(폴리글랏) 서비스란? - 다양한 언어로 작성된 서비스를 지칭 

 

이번 글에서는 Cloud Native 기능을 쉽게 만들수 있는 방법 중 "sidecar(사이드카)" 패턴에 대해서 이야기 해보려고 한다. 

사이드카 패턴은 다양한 관리 기능을 구현하는 애플리케이션을 프로세스와 묶어 제공한다. 독립적인 컨테이너로 구현되는 경우가 대부분이지만, VM 내부에서 다른 데몬을 실행하는 방식으로 구현할 수도 있다. 

 

2. 사이드카 패턴

오토바이에 연결된 사이드카와 유사한 개념으로 애플리케이션에 필요한 운영 환경 추상화, 프록시, 로깅, 구성과 같은 기능을 별도 프로세스 형태로 애플리케이션에 자유롭게 붙일 수 있게 만드는 패턴이다. 

 - 사이드카 컨테이너는 언어별로 endpoint를 노출하여 라이브러리를 사용하는 애플리케이션과 상호 작용하도록 polyglot 컨테이너로 개조하는데 사용될 수도 있음.

 - 사이드카 패턴은 중앙화된 팀이 특정 사이드카 프로세스를 관리할 때 의미가 있음. 

 - 애플리케이션 재작성보다는 적은 노력으로 서비스에 기능을 추가할 수 있음. 

 

3. 사이드카의 예

 1) Envoy Proxy : 서비스에 회복성과 메트릭 추가 

 2) Registrator : 외부 Service Discovery에 서비스 등록 

 3) Configuration : 구성 변경 사항을 감시하고 서비스 프로세스에 다시 로드하도록 알림

 4) Health endpoint : 애플리케이션의 상태를 확인하기 위한 HTTP endpoint 제공

 

4. 사이드카 패턴 적용 사례

 - 넷플릭스의 프라나(Prana) : 표준 Java 라이브러리를 사용하지 않는 애플리케이션에 대해 사이드카 패턴을 적용함.