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. 컨테이너
컨테이너는 호스트 운영체제 위에서 동작합니다. 다시 말해 운영체제 수준 가상화 기술을 사용해 호스트 운영체제 위에 격리된 실행 환경을 만듭니다. 이처럼 격리된 실행 환경을 컨테이너라고 하며, 각 컨테이너는 독립된 파일 시스템, 네트워크 인터페이스, 프로세스 등을 기반으로 동작합니다. 컨테이너에는 자체적인 게스트 운영체제가 없고 호스트 운영체제의 자원을 공유받아 실행하므로 웹 애플리케이션을 더 빠르게 실행하고, 본 시스템의 물리적인 자원을 더 효율적으로 활용합니다.
가상 머신과 컨테이너의 장단점은 다음과 같이 정리할 수 있습니다.
가상머신 | 컨테이너 |
각각의 게스트 운영체제와 해당 운영체제 위에서 동작하는 소프트웨어 스택(운영체제 관련 소프트웨어)을 복제해야하기 때문에 컴퓨팅 자원(메모리, 디스크 등)을 더 많이 사용 | 여러 개의 웹 애플리케이션이 호스트 운영체제 하나를 공유하기 때문에 가상 머신보다 컴퓨팅 자원을 덜 사용 |
각각의 운영체제와 소프트웨어 스택을 복제해야 하기 때문에 시작 시간(웹 애플리케이션을 구동하기까지 걸리는 시간)이 느림 | 시작 시간 빠름 |
더 많은 컴퓨팅 자원을 필요로 하므로 가볍지 않고, 이식성이 낮으며, 배포와 관리가 어려움 | 가볍고, 이식성이 뛰어나며, 배포와 관리가 용이합 |
개발자는 가상 머신과 컨테이너의 장단점을 이해하고 용도와 목적에 맞는 기술을 선택해야합니다.
컨테이너를 사용하는 이유
컨테이너는 여러 개의 서버가 필요한 상황에서 각 서버를 독립적으로 운영하는 효과를 내기 위해 사용합니다.
컨테이너의 장점
- 하나의 서버로 다양한 용도와 환경, 기능을 충족해야 할 때 여러 개의 컨테이너로 나눠 구현할 수 있습니다.
- 각 서버가 컨테이너별로 관리되므로 소프트웨어나 라이브러리를 설치할 때 의존성으로 고려하지 않아도 되고, 컨테이너별로 소프트웨어를 간단히 설치할 수 있습니다.
- 서버를 이전하거나 서버에 여러 소프트웨어를 다시 설치해야 할 때 컨테이너 이미지를 받아 간편하게 이전 및 설치할 수 있습니다.
컨테이너 이미지는 컨테이너 실행에 필요한 모든 것이 포함된 패키지를 말합니다.
다음 글에서 컨테이너 이미지에 대해 더 자세히 살펴보도록 하겠습니다.
'코딩자율학습 > 아는 만큼 보이는 백엔드 개발' 카테고리의 다른 글
아는 만큼 보이는 백엔드 로드맵 - 도서 후기 (0) | 2024.03.11 |
---|---|
Chapter08 : 컨테이너 플랫폼, 도커 (0) | 2024.03.10 |
Chapter04 : DBMS (0) | 2024.02.27 |