최지웅 오픈소스컨설팅 이사
컨테이너 서비스가 대세다. 컨테이너는 리소스 격리 프로세스에서 애플리케이션과 종속 항목을 실행하게 해주는 운영 시스템 가상화 방법이다. 컨테이너를 사용하면 애플리케이션의 코드, 구성 및 의존성에 대한 사용이 단순한 빌딩 블록 형태로 바로 패키징할 수 있으며 빌딩 블록은 환경 일관성, 운영 효율성, 개발자 생산성, 버전 제어를 제공한다. 이를 통해 애플리케이션이 보다 빠르고 안정적으로 배포와 운영이 될 수 있는 환경이 생성되는 장점이 있다.
현재 프라이빗/퍼블릭 클라우드 기반의 인프라를 구축하거나 이미 사용하고 있는 엔터프라이즈에서는 DevOps, 시스템 간의 오케스트레이션을 위하여 적극적으로 컨테이너 서비스에 대한 조사와 도입 검토를 진행하고 있는 상황이다. 이러한 맥락과 함께 컨테이너 서비스 시장은 현재 엄청난 팽창을 하고 있으며 클라우드와 연계된 기술 영역에서 매년 40%이상의 높은 성장률을 보여 2020년까지 27억 달러 수준으로 커질 것으로 전망하고 있다.

[그림1]애플리케이션 컨테이너 서비스 시장 전망, 2017. 451 Research’s
현재 아마존, IBM, 마이크로소프트의 퍼블릭 클라우드에서도 이러한 컨테이너 서비스를 통한 애플리케이션 빌딩 블록을 만들 수 있는 서비스를 이미 내놓고 있으며, PaaS(Platform as a Service) 환경을 구축하는 부분에 대해 적극적으로 고객을 유도하고 있는 상황이다.
현재 컨테이너 서비스들은 대부분 리눅스 환경에서 작동되기 때문에 Linux 컨테이너를 활용하여 개발 팀과 운영 팀 간의 충돌을 줄일 수 있다. 또한, Linux 컨테이너는?오픈소스?기술을 기반으로 하기 때문에 사용 즉시 최신 기술을 활용하여 회사 내부 인프라 및 애플리케이션에 대한 발전을 지원하는 특징을 가지고 있다. ?CRI-O,?Kubernetes?및?Docker?등의 컨테이너 기술은 애플리케이션 개발 및 배포를 간소화하고 가속화하는 데 큰 도움이 된다.
퍼블릭 클라우드의 컨테이너 서비스
퍼블릭 클라우드 기업은 컨테이너를 위한 다양한 서비스를 제공하여 고객들을 자사의 클라우드 서비스로 유도하기 위해 많은 노력을 기울이고 있다.
IBM 클라우드는 Blumix Container Service를 통해 컨테이너 서비스를 제공하고 있다. 하위의 인프라 기반은 Kubernetes와 Docker 기반으로 스케줄링, 자체 복구, 스케일-아웃 기능을 제공하고 IBM의 인프라에서는 마스터 노드를 관리하며, 사용자들은 자신들의 서비스에 대한 작업 노드를 정의하는 구조로 구성되어 있다.
특징적인 부분은 CLI 기반으로 클러스터 배치 등을 관리하고 강점으로 내세우는 왓슨(Watson)을 활용하여 스토리지, 분석, 액세스 제어 등에 대한 서비스를 통합할 수 있는 기능이다.
아마존은 ECS(Amazon EC2 Container Service) 서비스를 통해 Docker 컨테이너를 제공하고 있으며, 이를 통해 자체 클러스터 관리 인프라를 구축하여 고객에게 제공하고 있다. SDK를 통한 API 호출을 통해 클러스터 상태관리, 보안, 엘라스틱 로드밸런싱, EBS 등에 대한 리소스 연계와 확장을 제공하며, EC2 서비스 내에 포함되어 컨테이너 서비스에 대한 별도 비용이 필요 없다는 특징이 있다.
마이크로소프트는 Azure 컨테이너 서비스를 활용하여 아마치 메소스, Docker 등을 함께 사용할 수 있는 서비스를 제공하고 있으며, 2015년에 서비스를 출시했다. 다른 퍼블릭 클라우드와는 다르게 Docker를 위한 비주얼 스튜디오(Visual Studio Tools for Docker)를 통해 컨테이너 환경 하에서 윈도우용 .NET 이나 리눅스용 코어 응용 프로그램을 빌드하여 배포할 수 있는 기능을 제공하고 있다. 또한 비주얼 스튜디오 팀 서비스를 통해 agile 및 DevOps를 위한 워크플로우에 컨테이너를 통합할 수 있는 기능을 제공하고 있다.
Docker를 통한 기술/프로세스 표준화
프라이빗과 퍼블릭 클라우드의 방향성은 IaaS 기반에서 컨테이너 서비스를 통한 플랫폼 유연성을 극대화하는 방법으로도 진화하고 있다. Docker는 별도의 게스트 OS를 설치하지 않고 커널 레벨에서 격리된 가상의 공간을 제공한다. 이의 장점은 호스트 운영체제와의 속도 차이가 거의 없고 가상머신보다 경량화된 상태에서 관리를 할 수 있다는 것이다.

[그림2] 클라우드, 컨테이너, 마이크로서비스, DevOps 구조, DZone 2016,
출처: https://dzone.com/articles/markus-eisele-answers-questions-about-java-ee-and
현재 많은 기업들이 자사의 서비스 기반을 마이크로 아키텍처 서비스로 만들고자 하면서 컨테이너 서비스를 활용하고 이에 대한 내부 기술 표준화를 위한 시도를 많이 하고 있다. 또한 개발/배포/운영 프로세스에 대한 부분을 컨테이너 서비스를 통해 일원화하기 위한 노력도 병행하고 있다. MSA(Micro Service Architecture)를 컨테이너 기반으로 구성하는 데 있어 프로세스화 되어야 하는 부분은 DevOps 영역이다.
컨테이너는 이러한 DevOps 영역에 대한 부분을 통합할 수 있도록 하는 좋은 방법 중 하나이다. 컨테이너는 개발과 운영이라는 두 팀 간의 장벽을 허무는 DevOps의 가교 역할을 하게 되며, 두 팀이 함께 협업하여 개발자 생산성과 운영의 안정성이라는 두 마리 토끼를 잡게 해준다.
그러한 관점에서 인프라, 컨테이너, 미들웨어 컴포넌트를 컨테이너화함으로써 클라우드 네이티브 형태의 애플리케이션을 만들 수 있다. 또한 기업이 가진 업무 시스템을 최적화하는 방법으로 컨테이너화된 다양한 오픈소스 기술을 활용하여 비즈니스 목표를 달성할 수도 있다. 이를 도식화한 간략한 그림은 아래와 같다.

[그림3] 클라우드 네이티브 영역 지도(https://github.com/cncf/landscape) 의 도식도를 축약한 것임)
그림에서 보는 것처럼 컨테이너 서비스는 그 기반이 퍼블릭과 프라이빗과 상관없이 작동시키며 프로비저닝 자동화, 프로세스 개선, DevOps를 활용할 수 있는 기반을 마련해준다. 또한 조직이 소프트웨어 개발과 인프라 관리 프로세스의 자동화 및 간소화를 통해 더 빠르게 혁신할 수 있도록 지원하며, 이를 통한 비즈니스 이익이 극대화될 수 있도록 도와준다.
컨테이너, PaaS, DevOps는 상호 연결된 밀접한 단어이다. 아직 IaaS를 기반으로 한 클라우드(퍼블릭/클라우드)에 대한 경험이 없는 상태라 하더라도 기획을 해볼 수 있는 중요한 아이템이 바로 컨테이너 기반 PaaS 영역이다. 인프라 자동화, DevOps, MSA 등의 단어를 의식하고 있다면 클라우드 기반의 컨테이너 서비스 대한 적극적 검토를 해보아야 하며, 향후 펼쳐지게 될 IT 시스템의 변화에 대한 준비를 해야 할 것이다.
다음 회에서는 온프레미스를 퍼블릭 클라우드로 이전하는 도구들에 대하여 살펴볼 것이다.