제 2 장: 컨테이너 기술의 이해와 활용

우리가 1장에서 클라우드 네이티브의 개념과 원칙들, 그리고 CNCF라는 생태계를 살펴보면서 ‘컨테이너’라는 단어를 여러 번 접했을 것입니다. 클라우드 네이티브를 떠받치는 가장 근본적인 기술 기둥 중 하나가 바로 이 컨테이너 기술인데요. 쿠버네티스는 결국 이 컨테이너들을 효과적으로 관리하고 조율하기 위한 오케스트레이션 도구라고 할 수 있습니다. 따라서 쿠버네티스를 제대로 이해하고 활용하기 위해서는, 그 관리 대상인 컨테이너 기술 자체에 대한 깊이 있는 이해가 반드시 선행되어야 합니다.

이번 제 2장에서는 바로 이 컨테이너 기술의 세계로 깊이 들어가 보려 합니다. 마치 자동차의 엔진 원리를 알아야 운전을 더 잘하고 정비도 할 수 있듯이, 컨테이너의 기본 원리를 파악하는 것은 클라우드 네이티브 여정의 필수적인 기초 체력을 다지는 과정입니다.

먼저, 도대체 컨테이너는 왜 등장하게 되었을까요? 기존의 가상머신(VM) 방식으로는 해결하기 어려웠던 어떤 문제점들이 있었기에, 이토록 가볍고 빠른 기술이 주목받게 된 것일까요? 특히 애플리케이션을 개발하고 배포하는 과정에서 개발자와 운영자 모두를 괴롭혔던 “내 컴퓨터에서는 잘 됐는데…” 와 같은 고질적인 문제들을 어떻게 해결해 주었을까요? (2.1 컨테이너 기술의 등장 배경) 에서는 바로 이러한 궁금증에서 출발하여, 애플리케이션 배포와 운영 환경의 오랜 고민들을 해결하기 위한 여정 속에서 컨테이너가 탄생하게 된 역사적 맥락과 그 필요성을 자세히 살펴볼 것입니다.

그렇다면 컨테이너는 어떻게 그렇게 가볍고 빠르게 동작하면서도 마치 독립된 서버처럼 환경을 격리할 수 있는 것일까요? 가상머신처럼 운영체제를 통째로 띄우는 것도 아닌데 말이죠. (2.2 컨테이너 핵심 기술 요소) 에서는 컨테이너를 가능하게 하는 리눅스 커널의 핵심 기술들, 예를 들어 프로세스를 격리하는 네임스페이스(Namespaces) 와 시스템 자원 사용량을 제어하는 컨트롤 그룹(Cgroups) 등의 원리를 파헤쳐보며 컨테이너의 마법 뒤에 숨겨진 비밀을 이해하게 될 것입니다. 컨테이너 이미지는 어떻게 구성되고 레이어(Layer) 개념은 무엇인지 등, 컨테이너의 내부 작동 방식을 명확히 파악하는 시간이 될 것입니다.

마지막으로, 우리가 만든 컨테이너 이미지를 실제로 실행하고 관리하는 소프트웨어는 무엇일까요? ‘컨테이너’ 하면 흔히 특정 회사 이름(도커)을 떠올리지만, 실제로는 다양한 컨테이너 런타임들이 존재하며, 이들이 서로 호환성을 유지하기 위한 표준(OCI) 또한 매우 중요합니다. (2.3 컨테이너 런타임과 표준) 에서는 이러한 컨테이너 런타임의 종류(예: containerd, CRI-O)와 각자의 역할은 무엇인지 알아보고, 쿠버네티스와 같은 오케스트레이션 시스템이 어떻게 표준 인터페이스(CRI)를 통해 다양한 런타임들과 상호작용하는지 살펴봄으로써 컨테이너 기술 생태계의 실제적인 작동 방식을 이해하게 될 것입니다.

이번 2장을 통해 컨테이너 기술의 등장 배경부터 내부 핵심 원리, 그리고 실제 실행 환경과 표준에 이르기까지 그 본질을 깊이 이해하는 것은, 이어지는 장들에서 쿠버네티스를 배우고 활용하는 데 있어 무엇보다 중요한 기초 체력이 될 것입니다. 자, 그럼 이제 컨테이너의 세계로 본격적인 탐험을 시작해보겠습니다.