[칼럼] 구름을 뚫고 수직 상승 중인 컨테이너

In News

날씨가 점점 따뜻해지고 봄기운이 깊어져 본격적인 이사철이 다가왔다. 과거 20년전만 하더라도 이사를 하기 위해서 필요한 짐 싸기, 적재, 하역, 배치 등의 일을 대부분 집주인과 가족 및 지인들의 도움에 의해서 이루어졌다. 그러다가 1990년대 후반 들어서면서 포장이사라는 전문 이사 용역 서비스가 나오면서 현재는 대부분 전문 이사 서비스 업체를 통해서 짐 싸기부터 배치까지의 일련의 과정들이 이루어진다. 여기서 포장이사 업체들이 짐을 싸거나, 적재와 하역을 할 때 공통점을 볼 수 있다. 바로 탑 차에 짐을 그냥 적재하지 않고 표준화된 박스에 담아서 적재하고 하역을 한다. 어차피 최종 단계에서는 짐을 포장 박스에서 꺼내야 하는데, 굳이 짐을 싣기 전 포장박스에 담아 적재와 배송을 하는 이유가 무엇일까? 가장 큰 이유는 안전한 배송과 규격화된 적재와 하역이 가능하기 때문이다.

container_1

집안에서 사용하는 수백가지의 물품들의 모양과 크기는 제 각각이다. 따라서 박스에 담아서 적재할 경우 견고하고 빈틈없이 적재할 수 있어 배송 중 진동과 흔들림에 의한 물건의 파손을 최소화 할 수 있다. 또한 외부에서 보았을 때 규격화된 박스를 옮기는 것이기 때문에 짐의 규모를 산정할 때 박스의 숫자로 쉽게 산정할 수 있으며, 물품의 종류에 상관없이 모든 포장, 적재, 하역 등의 작업 과정을 표준화 할 수 있게 된다. 컨테이너가 물류의 혁명을 불러 일으킨 이유가 바로 여기에 있다. 이를 소프트웨어 산업에 적용한 것이 요즈음 핫 하게 떠오르고 있는 Docker container이다.

Container는 리눅스 운영체제에서 name space를 이용하여 애플리케이션이 구동될 때 다른 애플리케이션과 격리되어 독립적인 환경을 사용하고자 할 때 편리하게 사용할 수 있는 기술이다. 격리라는 측면에서 본다면 서버가상화와 비슷해 보일 수 있지만, 서버가상화가 독립적인 공간에 별도 OS가 구동되는 반면, 컨테이너는 Host의 OS를 공유하고 앱의 고유한 실행 환경을 위한 바이너리와 라이브러리만 포함하고 있어 매우 가볍고 부팅 속도 또한 우수하다.

docker

지난 10여년간 x86 플랫폼을 중심으로 한 가상화 기술이 서버 뿐 만 아니라 네트워크, 스토리지까지 확산되면서 인프라의 운영, 관리, 확장성에 지대한 혁신을 불러 일으켜 왔었는데 갑자기 컨테이너가 급부상하면서 하이퍼바이저 기반의 가상화를 위협하는 존재로 떠오르고 있는 이유가 무엇일까?

가상화가 인프라의 delivery와 운영의 생산성에 대해 혁명을 일으킨 것은 분명하다. 하지만 클라우드가 메인 비지니스를 대체하면서 엔터프라이즈 애플리케이션을 수용하는 수단으로 떠오르자 하이퍼바이저 기반의 애플리케이션 운영의 치명적 단점이 드러나기 시작했다. 그리고 단점들을 보완할 방법으로 컨테이너가 떠오르게 된 것이다. 그 첫번째 이유는 먼저 호환성을 들 수 있다. 대부분의 기업들 퍼블릭 클라우드로의 마이그레이션, 멀티 클라우드 혹은 하이브리드 클라우드 전략을 수용하고 있다. 여기서 가상화의 단점은 서로 다른 하이퍼바이저를 사용하는 온프라미스와 클라우드간, 서도 다른 퍼블릭 클라우드간 VM을 그대로 사용할 수 없고 마이그레이션이라는 단계를 거쳐야하는 불편함이 존재한다. 하지만 컨테이너는 호환성에 문제가 없다. (물론 리눅스 OS에서만 구동되는 단점이 있지만) 컨테이너화 된 애플리케이션은 물리, 가상, Private cloud, Public cloud 상의 host에서 호환성에 문제없이 구동이 가능하다. 앱 개발자의 가장 큰 고충 중의 하나가 개발환경과 운영환경의 차이에서 오는 호환성 문제로 개발 이후 패치에 많은 시간을 투자하고 있는 것을 감안하면 컨테이너는 큰 매력이라고 볼 수 있다.

두번째 이유는 효율성을 들 수 있다. 컨테이너는 OS를 내포하고 있지 않기 때문에 VM대비 용량과 구동 속도면에서 10배 이상의 차이가 나기도 하며, Host 입장에서는 VM과 마찬가지로 단일의 파일로 표현되어 관리가 가능하다. 따라서 이에 대한 백업, 다른 플랫폼으로의 이식이 매우 용이하다. 또한, 비용절감이라는 측면에서 본다면 컨테이너가 VM 대비 훨씬 많은 집적도를 제공할 수 있다. VM이 일반적으로 베어메탈(Bare-metal) 서버 대비 70~80%의 성능을 보이는 반면, 컨테이너는 98%까지의 성능을 보여준다.

세번째는 쿠버네티스와 같은 docker container orchestration를 통한 배포, 확장, 고가용성, 로드 밸런싱 등 컨테이너의 운영관리 자동화 솔루션 덕분에 인프라단에서의 자동화된 운영을 애플리케이션 관점으로 고도화 할 수 있는 여건을 마련한다는 점이다. 과거 VM단에서는 애플리케이션의 확장을 위해서는 프로비저닝된 VM단에서 애플리케이션과 클러스터링을 위한 구성을 수작업으로 진행했어야 하는데, 지금은 docker container orchestration를 통해 이를 자동화 할 수 있다. 따라서 동일한 애플리케이션이 수평으로 확장을 해야 하는 웹 애플리케이션, AI, 블록체인 등의 아키텍처는 컨테이버 기반이 절대적으로 유리한 이점을 제공해 준다.

컨테이너가 전적으로 VM보다 장점이 있는 것은 아니다. 여전히 리눅스 OS에 국한되고 Host OS를 공유하기 때문에 완전한 격리를 제공하는 VM보다 보안의 측면에서는 단점이 존재한다. 또한 여전히 국내 소프트웨어 벤더들은 컨테이너화된 앱을 대부분 제공하고 있지 않기 때문에 적용가능한 앱이 제한적이기도 하다. 하지만 이러한 부분들은 결국 시간이 해결해 줄 것으로 기대되고 컨테이너의 고공행진을 막을 수는 없을 것으로 전망된다.