본문 바로가기
코딩자율학습/아는 만큼 보이는 백엔드 개발

Chapter08 : 가상화와 컨테이너의 개요

by 노 코딩 노 라이프 2024. 3. 10.

1. 가상화의 개념

가상화란 하나의 물리적인 서버를 여러 개의 가상 서버로 분할해 사용하는 기술입니다.

가상화 기술이 등장하기 전의 전통적인 서버 구조에서는 하나의 서버로 여러 웹 애플리케이션을 실행하면서 충돌하는 문제가 발생했습니다. 왜냐하면 여러 웹 애플리케이션이 각기 다른 운영체제나 라이브러리를 사용했기 때문입니다.
그러나 가상화 기술이 도입되면서 하나의 서버로 다수의 웹 애플리케이션을 운영할 수 있게 됐습니다. 

 

2. 가상화의 종류

가상화는 크게

1. 개발 환경 가상화

2. 머신 가상화

3. 운영체제 가상화

로 나뉩니다.

 

2-1. 개발 환경 가상화

ex) 아나콘다(anaconda)

개발자가 웹 애플리케이션을 개발할 때 필요한 환경을 가상으로 구축하게 하는 기술입니다. 

이 방식의 경우 한 컴퓨터에서 여러 웹 애플리케이션을 개발하더라도 각각의 개발환경을 구성할 수 있습니다. 

즉 개발 환경마다 관련 라이브러리 패키지를 독립적으로 관리해 일관된 개발 환경을 유지할 수 있습니다. 

 

2-2. 머신 가상화

ex) 버추얼박스(VirtualBox), VMware, 시트릭스(Citrix), WSL(Windows Subsystem for Linux) 등

가상 머신(VM, Virtual Machine)으로 하나의 서버에서 여러 운영체제를 실행할 수 있게 하는 기술입니다. 
이 방식은 웹 앱플리케이션마다 다른 운영체제를 사용해야 해야 하는 경우나 특정 웹 애플리케이션을 특정 운영체제에서만 실행할 수 있는 경우에 유용합니다. 

 

2-3. 운영체제 수준 가상화

ex) 도커, 쿠버네티스

호스트 운영체제(실체 하드웨어 본체에 설치한 운영체제) 위에 격리된 컨테이너를 여러개 만들어서 각각의 컨테이너 안에서 웹 애플리케이션을 실행하는 기술입니다. 하나의 운영체제상에서 격리된 컨테이너를 여러개 생성하고 각각의 컨테이너에서 웹 애플리케이션을 실행하기 때문에 다른 웹 애플리케이션과 충돌하는 것을 방지할 수 있습니다. 

3. 컨테이너의 개념

컨테이너(container)는 가상화 기술 중 하나로, 격리된 여러 개의 실행 환경을 제공하는 기술입니다.
앞서 언급했던 운영체제 수준 가상화를 기반으로 하며, 웹 애플리케이션을 실행하는데 필요한 라이브러리, 실행 파일, 구성 파일 등이 포함된 패키지로 이뤄져 있습니다. 

컨테이너 VS 가상머신

컨테이너는 언뜻 보기에 머신 가상화의 가상 머신과 비슷한 것 같습니다.
둘 다 가상화 기술을 사용해 여러 개의 실행 환경을 구성하게 해주지만 둘 사이에 중요한 차이점이 있습니다. 

 

3-1. 가상머신

가상 머신은 하이퍼바이저(hypervisor)라는 소프트웨어 계층을 사용해 호스트 운영체제 위에 게스트 운영체제를 설치하고 실행하는 방식입니다. 각 가상 머신은 자체적인 게스트 운영체제와 웹 애플리케이션을 설치하고 실행하는 방식입니다. 각 가상 머신은 자체적인 게스트 운영체제와 웹 애플리케이션을 가지며, 본 시스템으로부터 물리적인 하드웨어 자원(CPU, 메모리, 스토리지 등)을 할당받아 사용합니다. 

 

3-2.  컨테이너

컨테이너는 호스트 운영체제 위에서 동작합니다. 다시 말해 운영체제 수준 가상화 기술을 사용해 호스트 운영체제 위에 격리된 실행 환경을 만듭니다. 이처럼 격리된 실행 환경을 컨테이너라고 하며, 각 컨테이너는 독립된 파일 시스템, 네트워크 인터페이스, 프로세스 등을 기반으로 동작합니다. 컨테이너에는 자체적인 게스트 운영체제가 없고 호스트 운영체제의 자원을 공유받아 실행하므로 웹 애플리케이션을 더 빠르게 실행하고, 본 시스템의 물리적인 자원을 더 효율적으로 활용합니다. 

 

가상 머신과 컨테이너의 장단점은 다음과 같이 정리할 수 있습니다. 

가상머신 컨테이너
각각의 게스트 운영체제와 해당 운영체제 위에서 동작하는 소프트웨어 스택(운영체제 관련 소프트웨어)을 복제해야하기 때문에 컴퓨팅 자원(메모리, 디스크 등)을 더 많이 사용 여러 개의 웹 애플리케이션이 호스트 운영체제 하나를 공유하기 때문에 가상 머신보다 컴퓨팅 자원을 덜 사용
각각의 운영체제와 소프트웨어 스택을 복제해야 하기 때문에 시작 시간(웹 애플리케이션을 구동하기까지 걸리는 시간)이 느림 시작 시간 빠름
더 많은 컴퓨팅 자원을 필요로 하므로 가볍지 않고, 이식성이 낮으며, 배포와 관리가 어려움 가볍고, 이식성이 뛰어나며, 배포와 관리가 용이합

개발자는 가상 머신과 컨테이너의 장단점을 이해하고 용도와 목적에 맞는 기술을 선택해야합니다.

 

컨테이너를 사용하는 이유

컨테이너는 여러 개의 서버가 필요한 상황에서 각 서버를 독립적으로 운영하는 효과를 내기 위해 사용합니다.


컨테이너의 장점

  • 하나의 서버로 다양한 용도와 환경, 기능을 충족해야 할 때 여러 개의 컨테이너로 나눠 구현할 수 있습니다.
  • 각 서버가 컨테이너별로 관리되므로 소프트웨어나 라이브러리를 설치할 때 의존성으로 고려하지 않아도 되고, 컨테이너별로 소프트웨어를 간단히 설치할 수 있습니다.
  • 서버를 이전하거나 서버에 여러 소프트웨어를 다시 설치해야 할 때 컨테이너 이미지를 받아 간편하게 이전 및 설치할 수 있습니다.

컨테이너 이미지는 컨테이너 실행에 필요한 모든 것이 포함된 패키지를 말합니다. 

다음 글에서 컨테이너 이미지에 대해 더 자세히 살펴보도록 하겠습니다.