오늘은 면접 준비 중에 알아보았던 'Container'의 기본 원리에 대해 파헤쳐보고자 한다.
컨테이너란 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것이다.
호스트 OS의 리소스를 논리적으로 분리시키고, 여러 개의 컨테이너가 공유하여 사용한다. 컨테이너는 오버헤드가 적기 때문에 가볍고 고속으로 작동하는 것이 특징이다.
기존 VirtualBox나 VMware를 통한 가상머신을 사용하게 되면 운영체제를 나눠쓰지 않기 때문에 용량적으로 손해를 볼 뿐만 아니라 속도마저 느리다. 동국대학교 운영체제 강의에서 VirtualBox에 Ubuntu를 설치하여 사용했던 기억이 있다. Linux 운영체제가 정말 어렵다고 느꼈던 부분에 속도적인 부분도 작용했던 것 같다. VM은 믿기 힘들정도로 느리다.
Container를 이용하기 위해서는 Container Software를 설치해야한다. Software 종류에는 이런 것들이 있다.
그 중에서도 단연 Docker가 선두를 보이고 있다. 정확한 개발을 해보지 않아서 잘 모르겠지만, 시간이 된다면 접해보도록 하자.
그래서 이 Container 기술의 어떤 점이 Cloud와 관련이 있을까? Cloud/Infra Engineer로서의 공부를 위해 연관성을 찾아보았다.
컨테이너와 클라우드의 관계를 이해하기 위해서 우선 Cloud Native에 대한 느낌을 이해해야했다.
Cloud Native란 클라우드의 규모와 성능에 최적화 되어있는 애플리케이션을 개발하기 위한 접근 방식과 기술을 의미한다. 클라우드 네이티브 애플리케이션은 프라이빗, 퍼블릭 및 하이브리드 클라우드 환경 전체에, 지속적인 개발과 자동화된 운영 환경 제공을 위해 설계된 애플리케이션이다. 클라우드가 제공하는 민첩성, 가용성, 확장성의 장점을 애플리케이션/서비스의 개발, 운영, 관리에 적용하여 기존 환경을 최적화할 수 있다.
클라우드 네이티브 애플리케이션 개발을 위해 필요한 여러 가지 핵심 기술 가운데, 공통적으로 언급되는 기술은 MSA, CI/CD, DevOps 그리고 Container가 있는 것이고, 이 과정에서 Container가 Cloud Infra의 뛰어난 성능을 보장할 수 있다.
위 내용은 그 어디보다 https://accordions.co.kr/it_trend/14778/ 에서 가장 이해하기 쉽도록 표현하였다. 가끔 이론적인 혼란이 온다면 이용하도록 하자.