2025.05.28 (수)
오늘은 클라우드 아키텍처 중에서도
클라우드 인프라와 가상화에 대해 배웠습니다.
클라우드 컴퓨팅의 가장 큰 특징이자
존재의 이유까지로 봐도 될 정도의 중요한 내용인,
가상화(Virtualization)에 대해 배웠습니다.
다양한 가상화 방법과 서비스에 대해 자세히 다루는 시간입니다 !

어려웠지만 힘차게 시작해볼까요? ^0^
[클라우드 인프라 및 가상화]
1. Docker 이론
○ 가상화와 마이크로 서비스의 차이
| 구분 | 가상화 (Virtualization) | 마이크로서비스 (Microservices) |
| 정의 | 물리 자원의 논리적 추상화 | 애플리케이션을 독립적 서비스 단위로 분할 |
| 목적 | 자원 활용 효율, 격리, 유연성, 비용 절감 | 확장성, 장애 격리, 빠른 배포, 유지보수 용이 |
| 적용 예 | 가상 머신, 클라우드, 컨테이너 | 대규모 웹서비스, 클라우드 네이티브 애플리케이션 |
○ 가상화 기술 비교

○ Docker 개요
: 컨테이너 기반 오픈소스 가상화 플랫폼
→ 애플리케이션과 그 의존성을 하나의 패키지로 묶어 실행 가능
○ VM vs Docker
→ VM은 Hypervisor 위에 OS 단위로 격리된 가상 머신 : 무겁고 느림, 시스템 자원 소모 많음
→ Docker는 OS 커널은 공유하고 애플리케이션 단위로 격리 : 실행 속도 빠름, 경량화
→ 부팅 시간 : 수 분 vs 수 초
→ 용량 : 수 GB vs 수 백 MB
→ 격리 수준 : OS 레벨 vs 프로세스 레벨
○ 이미지와 컨테이너
① 이미지(Image) : 실행 전 상태의 템플릿 (읽기 전용)
② 컨테이너(Container) : 이미지에서 실행된 인스턴스 (읽기/쓰기 전용)
→ 비유 : (이미지 = 클래스), (컨테이너 = 객체)
○ Docker 장점
① 동일 이미지로 어디서든 실행 가능 (Window, Mac, Linux)
→ (개발 - 테스트 - 배포) 일관성 보장
② OS 없이 애플리케이션만 실행
→ 마이크로서비스 환경에 최적화
○ Docker 생태계
① Docker Hub
: Github 처럼 도커 이미지를 저장하는 공간 (오픈소스)
② Docker Compose
: 여러 컨테이너를 단일 명령어로 생성-관리-배포를 수행하는 역할
③ Docker Swarm
: 여러 Docker 호스트를 클러스터로 묶어 컨테이너 오케스트레이션을 가능하게 하는 기능
2. Docker 실습
○ Docker 실습 환경 준비
① 배포된 Docker 실습용 OVA파일(8.8GB)을 다운로드
[주의] VirtualBox 실행 후 Linux 실습용 DXUbuntu 가상시스템이 있는 경우에는,
기존 가상시스템을 삭제하기 (방법 : 메뉴 > 머신 > 삭제 > "모든 파일 지우기" 선택)
② VirtualBox에서 가상시스템 가져오기 기능으로 DXUbuntu-Docker.ova파일을 가져오기
③ VirtualBox에서 DXUbuntu 실행
○ Ubuntu Docker 명령어
- Local에 설치된 이미지 리스트 보기 : $ sudo docker images
- 설치된 이미지 삭제 : $ sudo docker rmi <IMAGE_ID>
- Docker hub에서 이미지 가져오기 : $ sudo docker pull <IMAGE_NAME>[:TAG_NAME]
- Docker images 세부 정보 확인 : $ sudo docker inspect <IMAGE_NAME>
- Docker image 만들기 (Dockerfile 필요) :
$ sudo docjer build --tag <IMAGE_NAME>:<TAG_NAME> <DOCKER_FILE 경로>
- Dockerfile 주요 명령어
| 명령어 | 설명 | 명령어 | 설명 |
| FROM | 베이스 이미지 지정 | ADD | 파일 및 디렉토리 추가 |
| RUN | 커맨드 실행 | COPY | 파일 복사 |
| CMD | 데몬 실행 | VOLUME | 볼륨 마운트 |
| LABEL | 라벨 설정 | WORKDIR | 작업 디렉토리 지정 |
| EXPOSE | 포트 export | ONBUILD | Build 완료 후 실행될 명령어 |
| ENV | 환경변수 설정 | USER | 사용자 설정 |
○ Orchestration
: 시스템과 어플리케이션의 배포 및 관리를 위한 Operating 도구
→ 복잡한 워크 플로우를 자동화하거나 쉽게 관리할 수 있음
→ Docker의 경우 : Docker Swarm 혹은 Kubernetes 이용
○ Kubernetes
- Node : Kubernetes에 등록된 호스트
- Master Node : Kubernetes 클러스터 전체를 관리하는 서버
- Worker Node : 컨테이너가 실행되는 호스트
- Pod : 컨테이너 단위
3. Ngins Dockerize
○ Nginx
: 러시아 프로그래머 이고르 시쇼브가 개발, 비동기 이벤트 기반 구조로 작동
→ (Apache C10K : 10,000개 이상의 소켓을 열게 되면 하드웨어 성능이 충분함에도 I/O 처리 방식 문제로 프로세스가 비정상)
문제를 해결하고자 개발
→ 벤치마킹 성능 비교 : Apache는 2400 TPS 근처에서 성능 저하 발생
→ Apache는 쓰레드 기반이라, 쓰레드 생성 시 마다 I/O 발생 (병목 발생)
4. Node.js Dockerize
○ Node.js
: 자바스크립트로 서버 사이드 프로그래밍을 할 수 있게 해주는 런타임 환경
→ 구글 V8 자바스크립트 엔진 기반으로 제작
→ 전통서버와 차이 :
| 항목 | 전통 서버 (PHP, Java 등) | Node.js |
| 처리 방식 | 멀티스레드 | 단일 스레드 + 이벤트 루프 |
| I/O 방식 | 동기/블로킹 | 비동기/논블로킹 |
| 언어 | PHP, Java, Python 등 | JavaScript |
| 확장성 | 다소 무거움 | 가볍고 유연함 |
5. MySQL Dockerize
○ MySQL
: Oracle이 관리하는 오픈소스 RDBMS
→ SQL을 사용하여 데이터를 관리
→ SQL DBMS 종류 :
| 항목 | MySQL | PostgreSQL | Oracle |
| 성능 | 빠름 | 안정적 | 매우 강력 |
| 확장성 | 좋음 | 매우 좋음 | 매우 좋음 |
| 라이선스 | 오픈소스 | 오픈소스 | 상용 |
| 트랜잭션 | InnoDB 사용 시 완전 지원 | 완전 지원 | 완전 지원 |
6. 쿠버네티스
: Google에서 개발한 오픈소스 컨테이너 오케스트레이션 플랫폼 (K8s라고도 부름)
→ 컨테이너화 된 앱의 자동 배포/확장/관리 지원
→ 서버를 다수 운영하는 입장에서 컨테이너를 한꺼번에 관리하기는 어려움
→ 기본 구성 요소 :
- Node : Kubernetes에 등록된 호스트
- Master Node : Kubernetes 클러스터 전체를 관리하는 서버
- Worker Node : 컨테이너가 실행되는 호스트
- Pod : 컨테이너 단위
- 클러스터(Cluster) : 쿠버네티스의 가장 큰 단위, 여러 노드를 묶어 애플리케이션을 실행하는 환경
- 컨트롤 플레인(Control Plane) : 클러스터의 마스터 역할 수행, 클러스터 내 모든 요소와 노드를 관리하고 조정함
- 워커 노드(Worker Node) : 실제 컨테이너가 실행되는 작업 서버, 여러 Pod를 호스팅할 수 있음
- 파드(Pod) : 컨테이너를 실행하는 가장 기본적인 단위, 일반적으로 1개의 컨테이너만 포함
- 컨테이너(Container) : 애플리케이션을 실행하기 위한 독립적인 환경
→ Pod 관리 리소스 :
- 레플리카셋(ReplicaSet) : 지정한 수의 동일한 파드를 유지시켜주는 리소스, 수평 확장/축소를 지원
- 디플로이먼트(Deployment) : 레플리카셋을 관리하는 상위 리소스
- 스테이트풀(StatefulSet) : 상태(State)가 중요한 애플리케이션을 위한 파드 관리 리소스, 파드 이름/네트워크 주소 보장
- PVC : 파드가 사용할 저장 공간을 요청하는 선언
- 데몬셋(DaemonSet) : 클러스터의 모든 노드에 1개씩 파드를 배포하는 리소스
- 크론잡(CronJob) : 정해진 시간 또는 주기마다 실행되는 일회성 파드를 생성하는 리소스
| 구분 | ReplicaSet | Deployment | StatefulSet | DaemonSet | CronJob |
| 파드 수 | 지정한 수 유지 | 지정한 수 유지 + 업데이트 | 지정한 수 유지 + 순차 배포 | 노드 수에 맞게 자동 배포 | 시간마다 1회성 실행 |
| 상태 저장 | X | X | O (고정 볼륨, 고유 이름) | X | X |
| 사용 목적 | 수평 확장 | 일반 앱 배포 | DB, Kafka 등 | 모니터링, 로깅 등 | 백업, 리포트 등 |
| 배포 방식 | 수동 관리 | 선언적 업데이트 | 순차적 생성 | 노드 자동 매핑 | 시간 예약 실행 |
| 예시 | nginx 3개 실행 | nginx 롤링 업데이트 | MySQL 3노드 클러스터 | 모든 노드에 Node Exporter | 매일 자정 DB 백업 |
→ Pod 통신 방식 :

- 서비스 : 파드를 묶어 하나의 고정 IP 및 DNS 이름으로 제공하는 리소스, 로드밸런싱 기능 포함
- Ingress : 클러스터 외부에서 들어오는 HTTP/HTTPS 트래픽을 라우팅하는 리소스
7. Serverless
: 서버 관리 없이 코드 실행이 가능한 컴퓨팅 모델, 클라우드 제공자가 인프라 자동 관리(FaaS의 대표 사례)
→ 장점 : 자동 확장(Auto-Scaling), 인프라 관리 자동화, 개발 속도 향상, 빠른 배포/수정, 비용 효율성
→ 단점 : 콜드 스타트(시작 지연), 디버깅/로깅 어려움, 벤더 종속성(Vender Lock-in), 지속 요청에 부적합
○ 컴퓨팅의 진화
: 데이터 센터 → 가상 서버 → 컨테이너 → Serverless
○ CaaS (Containers as a Service)
: 컨테이너화된 애플리케이션을 관리하고 배포하는 데 사용되는 클라우드 컴퓨팅 서비스
→ 개발자들은 컨테이너를 클라우드 인프라에 업로드/구성/실행/관리할 수 있음
→ IaaS와 PaaS 사이에 위치
○ FaaS (Function as a Service)
: 인프라를 유지관리 없이 애플리케이션 패키지를 기능으로 빌드/실행/관리할 수 있는 클라우드 컴퓨팅 서비스
→ PaaS와 SaaS 사이에 위치
○ 이벤트 기반 함수 실행
: 평소에는 sleep 상태이다가, trigger에 의해 invoke되면 프로그램이 수행됨
→ 필요할 때만 수행되며, Serverless는 하나의 Function을 담당
○ 인프라와 컴퓨팅 환경 변화

클라우드 컴퓨팅이 발전하는 과정에서 발달한 가상화 기술
에 대해 중점적으로 알아봤습니다 !
우리가 일상에서 가볍게 사용하는 모든 서비스들이
그냥 개발되지 않았음을 새삼 느낍니다.
또한, 정말 IT 기술은 빠르게 변화하는 구나! 를 느꼈습니다.
저도 지금 교육을 열심히 배워서
이런 산업과 기술의 발전에 이바지하는
엔지니어가 되고 싶습니다 !

오늘도 고생하셨습니다 :D
'KT AIVLE School > 수업 내용 정리' 카테고리의 다른 글
| Azure 클라우드 기본 개념 및 서비스 이해 [KT 에이블스쿨] 2025.05.30(금) (4) | 2025.06.23 |
|---|---|
| 클라우드 운영 [KT 에이블스쿨] 2025.05.29(목) (5) | 2025.06.13 |
| 클라우드 개요 [KT 에이블스쿨] 2025.05.27(화) (4) | 2025.06.11 |
| 온프레미스 아키텍처 - 인프라 구성도/프로토타입 [KT 에이블스쿨] 2025.05.22(목) (1) | 2025.06.09 |
| 온프레미스 아키텍처 - 서비스 흐름도 [KT 에이블스쿨] 2025.05.21(수) (2) | 2025.06.07 |