1. 가상화(Virtualization)가 왜 필요한가?
과거에는 보통 물리 서버 1대에 애플리케이션 1개를 설치해서 운영 했다.
ex) 물리 서버 1대 ⇒ 쇼핑몰 서비스, 물리서버 1대 ⇒ 게시판 서비스, 물리 서버 1대 ⇒ 회원 서비스
하지만 이런 방식의 경우 문제가 발생한다. 서버 자원을 충분히 사용할 수 없고 서비스가 늘어날수록 서버 구매 비용이 증가한다.
그리고 서버 관리가 복잡해지고, 특정 서비스 트래픽이 늘어나면 서버를 새로 구매해야 했다.
ex) CPU 5% 사용 서비스도 서버 한 대를 독점 사용
이를 해소하기 위해 하나의 물리 서버를 여러 개의 논리적인 서버처럼 사용할 수 있는 가상화 기술(Virtualization)이 등장했다.
2. VM(Virtual Machine)
VM은 하나의 물리 서버를 여러대의 가상 컴퓨터처럼 사용하는 기술이며 각 VM은 독립된 컴퓨터처럼 동작한다.
이는 OS, 자원할당(CPU, 메모리, 디스크)을 다른 VM과 격리시켜 관리할 수 있는 기술이다.
- 장점 : 격리성이 뛰어남 / 서로다른 OS를 동시 실행 / 하나의 VM에 장애 발생 시 다른 VM은 영향이 적음
- 단점 : VM마다 OS필요 / 메모리 사용량이 큼 / 부팅 시간이 김 / 배포 속도가 느림
3. Container(Docker)

VM의 가장 큰 문제는 애플리케이션마다 OS를 하나씩 실행해야 하는 점인데 이를 해결하기 위해 등장한 기술이 Container이다.
컨테이너는 호스트 OS의 커널을 공유하기 때문에 OS는 하나만 실행하지만 애플리케이션은 여러 개가 실행이 가능하다.
- 장점 : 가볍다고 실행 속도가 빠름 / 배포가 쉬움 / 자원사용량 적음 / 동일한 실행 환경 보장
- 단점 : 격리 수준은 VM보다 낮음 / 컨테이너가 많아지면 관리 어려움
예를 들어 컨테이너가 처음에는 몇개 안되지만 추후 1xx개가 된다면 컨테이너의 장애 복구 / 트래픽 증가 / 배포 / 서버장애 /
네트워크 연계 / 로드밸런싱에 대한 문제를 직접 사람이 관리하기에는 매우 어려움이 있다.
4. 쿠버네티스 (kubernetes)
쿠버네티스는 바로 이런 문제들을 해결하기 위해 만들어진 플랫폼이며 오픈소스 프로젝트이다. 도커처럼 단순히 컨테이너를 실행하는 도구가 아닌 여러 서버에 분산되어 실행되는 수많은 컨테이너를 안정적으로 운영하고 관리하기 위한 표준 플랫폼이라고 볼 수 있다.
이렇듯 쿠버네티스가 배포/확장/장애 복구와 같은 복잡한 운영 작업을 자동으로 처리하기 때문에 개발자는 애플리케이션 개발에 집중해 더 좋은 제품을 만들 수 있다.
- 서비스 디스커버리와 로드 밸런싱 : 컨테이너끼리 서로 찾고 트래픽을 분산
- 자동화된 롤아웃과 롤백 : 무중단 배포와 이전 버전으로 되돌리기
- 자동화된 빈패킹(bin packing) : 노드의 CPU, 메모리를 고려해 Pod를 적절한 서버에 배치
- 자동화된 복구(self-healing) : 죽은 컨테이너(Pod)를 자동 재시작 및 재생성
- 배치 실행 : 일회성 작업이나 스케줄 작업(Job, CronJob) 실행
- 수평 확장 : 트래픽 증가 시 Pod 개수를 자동으로 늘리거나 줄임
- 확장성을 고려한 설계 : 클러스터 규모가 커져도 안정적으로 운영 가능
'BackEnd > kubernetes' 카테고리의 다른 글
| [kubernetes] 클러스터(cluster) - NODE(Control Plane) 컴포넌트 (0) | 2026.07.01 |
|---|---|
| [kubernetes] 클러스터(cluster) - 컨트롤 플레인(Control Plane) 컴포넌트 (0) | 2026.06.30 |