KT AIVLE School/수업 내용 정리

클라우드 인프라 및 가상화 [KT 에이블스쿨] 2025.05.28(수)

PaperDrop 2025. 6. 12. 11:48

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