용어 정의

가상화 기술
하드웨어 자원을 논리적으로 분리하여 하나의 물리적 시스템에서 여러 개의 가상 환경을 운영할 수 있도록 하는 기술.
가상화 기술이란?
가상화(Virtualization) 기술은 하드웨어 자원을 논리적으로 분리하여 하나의 물리적 시스템에서 여러 개의 가상 환경을 운영할 수 있도록 하는 기술이야. 이를 통해 컴퓨팅 자원을 더 효율적으로 사용하고, 확장성과 유연성을 제공할 수 있어.
가상화 기술의 핵심 개념
-
하이퍼바이저(Hypervisor)
- 가상화를 지원하는 핵심 소프트웨어로, 하나의 물리적 시스템에서 여러 개의 가상 머신을 실행하도록 함
- 타입 1(베어메탈, Bare Metal): 하드웨어 위에서 직접 실행 (ex. VMware ESXi, Microsoft Hyper-V, KVM)
- 타입 2(호스트 기반, Hosted): 운영체제 위에서 실행 (ex. VirtualBox, VMware Workstation)
-
가상 머신(VM, Virtual Machine)
- 하드웨어를 가상화하여 하나의 물리적인 서버에서 여러 개의 운영체제(OS)를 실행할 수 있게 함
- 물리 서버(Host Machine) 위에 하이퍼바이저가 설치되고, 하이퍼 바이저가 물리 리소스(CPU, 메모리, 스토리지 등)를 가상화하여 가상 머신(VM)을 생성함
- 각 가상 머신은 독립적은 OS를 설치하고 실행할 수 있어 서로 다른 OS를 하나의 물리 서버에서 운영할 수 있음
(그래서 각 가상 머신은 운영체제를 포함해야 하므로 부팅 속도가 느리고 리소스 사용량이 많음)
- 대표적인 가상화 소프트웨어: VMware, VirtualBox, KVM 등
-
컨테이너(Container)
- OS 수준에서 가상화를 수행하여 독립적인 실행 환경을 제공하는 기술
- 가상 머신보다 가볍고 빠르며, 개발 및 배포 자동화에 유리.
- 대표적인 기술: Docker, Kubernetes
-
OS 가상화 (Operating System Virtualization)
- OS 내부에서 애플리케이션이 실행될 독립적인 환경(컨테이너)을 제공하는 기술.
- 하이퍼바이저 없이, 하나의 운영체제 커널을 공유하면서 여러 개의 컨테이너를 실행함.
- 동작 과정 : 호스트 OS가 실행되고 OS 내부에서 컨테이너 엔진(Docker)을 실행하여 가상 환경을 생성. 각각의 컨테이너는 독립된 애플리케이션과 라이브러리를 포함하지만 호스트 OS의 커널을 공유함. VM과 달리 운영체제를 포함하지 않으므로 가볍고 빠름.
가상화 기술을 왜 사용할까?
자원 효율성
- 하나의 서버에서 여러 개의 VM이나 컨테이너를 실행하여 하드웨어 리소스를 최대한 활용할 수 있음.
운영 및 관리 편의성
- 개발, 테스트, 배포 환경을 독립적으로 구축할 수 있어, 환경 차이로 인한 문제를 줄일 수 있음.
확장성과 유연성
- 새로운 애플리케이션을 빠르게 배포하고, 필요에 따라 시스템을 쉽게 확장 또는 축소 가능.
보안 및 격리
- 가상 환경이 서로 격리되어 있어 한 환경에서 문제가 발생해도 다른 환경에 영향을 주지 않음.
배포 및 CI/CD와 연계
- 컨테이너 기술(Docker, Kubernetes 등)은 CI/CD(지속적 통합/지속적 배포)와 연계하여 자동화된 배포가 가능.
가상화 기술의 주요 사용 사례
서버 가상화(Server Virtualization)
- 하나의 서버에서 여러 개의 가상 머신을 운영하여 리소스 최적화.
데스크톱 가상화(VDI, Virtual Desktop Infrastructure)
- 중앙 서버에서 가상 데스크톱을 제공하여 보안과 관리 효율성 강화.
네트워크 가상화(NFV, Network Functions Virtualization)
- 네트워크 기능을 가상화하여 유연한 네트워크 운영 가능.
컨테이너 오케스트레이션(Container Orchestration)
- Kubernetes를 사용하여 대규모 컨테이너 환경을 관리하고 자동화.
가상화 vs 컨테이너
| 비교 항목 | 가상 머신(VM) | 컨테이너(Container) |
|---|
| 실행 방식 | 하드웨어 가상화 | OS 가상화 |
| 속도 | 느림 | 빠름 |
| 리소스 사용 | 무겁고 많은 리소스 필요 | 가볍고 적은 리소스 사용 |
| 독립성 | 완전한 OS 포함, 높은 격리 수준 | OS 공유, 격리 수준이 낮음 |
| 대표 기술 | VMware, KVM, VirtualBox | Docker, Kubernetes |
컨테이너, Container
컨테이너는 애플리케이션과 그 실행에 필요한 라이브러리 및 종속성(Dependencies)을 하나의 패키지로 묶어 격리된 환경에서 실행하는 기술이다. 이 때, 호스트 운영체제의 커널을 공유하면서도 다른 컨테이너와는 독립적으로 동작하기 때문에 VM(가상머신)보다 가볍고 속도가 빠르다.
컨테이너 주요 개념
이미지(Image):
실행 가능한 컨테이너의 템플릿(설정 파일과 애플리케이션이 포함됨)
예: nginx:latest, mysql:8.0 (각 애플리케이션이 포함된 미리 정의된 실행 환경)
컨테이너(Container):
이미지를 실행하면 생성되는 독립적인 실행 환경.
이미지는 "설정도 포함된 패키지"라면, 컨테이너는 "그 패키지를 실행한 것"
컨테이너 동작 방식
- 컨테이너 엔진(Docker 등)이 설치된 호스트 OS가 있음.
- 각 컨테이너는 애플리케이션 + 필수 라이브러리를 포함한 상태로 실행됨.
- 모든 컨테이너는 호스트 OS의 커널을 공유하며, 필요한 리소스만 할당받아 실행됨.
- 컨테이너끼리는 격리되어 있어 서로 영향을 주지 않음.
도커, Docker
도커는 서버에서 실행되는 컨테이너를 관리하는 프로그램으로 가장 널리 사용되는 컨테이너 기술이다. 도커를 사욤함으로써 개발자가 애플리케이션을 패키징하여 어디서든 동일한 환경에서 실행 가능하도록 해준다.
쿠버네티스, Kubernates
여러 개의 서버에 도커를 이용해서 컨테이너를 관리한다고 하자. 각각의 서버에서 컨테이너가 필요하면 추가하고 필요 없어지면 제거하는 등의 작업을 모두 관리하는데 어려움이 생긴다.
그래서 필요한게 이런 도커를 관리하는 매니저 역할이다. 이런 매니저 역할을 하는 것이 쿠버네티스이다.
즉, 쿠버네티스는 도커가 실행중인 여러 대의 서버를 관리하는 컨테이너 오케스트레이션 도구 (각각의 서버의 도커에게 대신 지시해줌)
쿠버네티스 특징
-
컨테이너 오케스트레이션 도구
- 여러 대의 서버에서 실행되는 Docker 컨테이너를 자동으로 관리하는 역할을 함
- 컨테이너 배포, 스케일링, 로드 밸런싱, 장애 복구 등을 자동으로 수행
-
마스터-노드 구조
- 마스터(Kubernetes Control Plane): 전체 시스템을 제어하고 노드들에게 지시하는 역할
- 노드(Node, Worker Node): 실제 컨테이너(Docker 등)를 실행하는 서버들
-
자동화된 컨테이너 관리
- 컨테이너가 필요하면 자동으로 추가하고, 필요 없어지면 제거하는 등의 작업을 수행
- 특정 컨테이너가 장애가 나면 자동으로 다시 실행
쿠버네티스가 필요한 이유
-
수동 관리의 어려움 해결
- 여러 대의 서버에서 컨테이너를 직접 관리하는 것은 비효율적이고 복잡함.
- 쿠버네티스는 서버(노드)들을 하나의 클러스터로 묶고 자동으로 관리해 줌.
-
자동 배포 및 롤백 지원
- 새 버전을 배포할 때, 서비스 중단 없이 점진적으로 배포 가능.
- 문제가 발생하면 즉시 이전 버전으로 롤백 가능.
-
수평 확장(Scaling) 지원
- 트래픽이 증가하면 컨테이너 개수를 자동으로 늘려 부하를 분산시킴.
- 반대로 트래픽이 줄면 불필요한 컨테이너를 자동으로 삭제하여 리소스를 절약.
-
셀프 힐링(Self-Healing) 기능
- 컨테이너가 다운되거나 오류가 발생하면 자동으로 새로운 컨테이너를 생성하여 복구.
-
로드 밸런싱 기능
- 여러 개의 컨테이너에 트래픽을 자동으로 분배하여 특정 컨테이너에 과부하가 걸리지 않도록 조정.
쿠버네티스의 주요 개념
| 개념 | 설명 |
|---|
| Pod(파드) | 컨테이너가 실행되는 최소 단위 (1개 이상의 컨테이너 포함 가능) |
| Node(노드) | 컨테이너를 실행하는 서버 (워커 노드) |
| Cluster(클러스터) | 여러 개의 노드가 모여 있는 집합 |
| Deployment(디플로이먼트) | 컨테이너를 배포하고 업데이트하는 방식 관리 |
| Service(서비스) | 네트워크를 통해 컨테이너에 접근하는 방법 제공 |
| Ingress(인그레스) | 외부에서 내부 서비스에 접근할 수 있도록 설정 |
쿠버네티스는 여러 개의 서버에서 실행 중인 Docker 컨테이너를 자동으로 관리하고 최적화하는 컨테이너 오케스트레이션 도구야.
Docker가 컨테이너를 실행하는 기술이라면, Kubernetes는 컨테이너들을 효율적으로 배포하고 관리하는 역할을 한다!