[CS] 가상화

가상화

✔️ 가상화란 ?

하나의 컴퓨터 자원을 여러개 처럼 나눠서 사용하는 기술

가상화의 유형 : 무엇을 가상화 하는가?

종류 설명 예시
CPU 가상화 가상 머신에 가상 CPU를 제공하여 물리 CPU를 효율적으로 나눠 사용 하이퍼바이저 (VMware ESXi, KVM)
메모리 가상화 VM마다 독립된 메모리 공간을 제공, 메모리 자원 효율 관리 메모리 페이징, NUMA, Ballooning
스토리지 가상화 물리적 저장장치를 가상으로 묶어 VM에 할당 NAS, SAN, vSAN
네트워크 가상화 가상 NIC, 가상 스위치 등을 통해 네트워크를 가상화 SDN, VLAN, 가상 스위치 (vSwitch)

물리 서버 vs 가상 서버

물리 서버의 구조

  1. 물리 서버의 한계
    • 하나의 물리 서버에는 보통 하나의 OS와 애플리케이션이 설치된다
    • 서버를 더 활용하고 싶어도, OS 충돌 위험이나 자원 관리가 어렵다.
    • 근데 난 여러 앱을 한번에 돌리고 싶어. 이때 선택의 갈림길
      • 물리 서버를 더 사자! → 비용 증가, 하나의 서버의 활용도 낮아짐
      • 서버 하나에 여러 앱을 설치해보자 ! → 충돌 / 보안 / 관리 문제.
      • 한 기능을 점검하기 위해, 상호 의존적인 다른 기능까지 고려해야함. 예) 프린터-포스기를 서버 하나에서 운영할때, 프린터만 점검하고 싶은데, 포스기에 미칠 영향까지 생각해야함.
  2. 가상화의 필요성
    • 물리적 자원을 논리적으로 쪼개서, 하나의 서버인데 여러개처럼 사용하고 싶다!
  3. 가상 머신의 등장
    • 가짜 컴퓨터를 진짜 처럼 보이게 만드는 기술
    • 물리 서버 대신 Host가 있고, OS 대신 하이퍼바이저를 설치함
    • 하이퍼바이저는 가상 머신과 물리 서버의 하드웨어(CPU, 메모리, 저장장치)를 연결해준다
    • VM 안에서 앱을 실행한다. → 각 기능을 분리하여 안정성, 효율 증가

가상 머신의 구조

하이퍼바이저의 종류

✔️ 하이버바이저란 ?

한 컴퓨터 안에서 여러 가짜 컴퓨터 (가상 머신)이 물리적 자원을 서로 나누어 쓰며 진짜 컴퓨터처럼 동시에 여러 일을 할 수 있게 해주는 가상화의 핵심 기술이다.

Type 1 (Bare metal)

  • 물리적인 서버를 사고, 하이퍼바이저를 그 안에 설치하고 실행한다.
  • 하이퍼바이저가 하드웨어와 바로 연결되서 (direct access) VM을 실행한다.
  • 중간단계 없이 하이퍼바이저가 CPU, 메모리 같은 물리적 자원을 직접 관리한다.
  • VMware ESXi, Microsoft Hyper-V

Type 2

  • 우리가 보통 쓰는 일반 컴퓨터에 설치하는 방식.
  • 기존 OS 위에 하이퍼바이저가 올라가고, 그 위에서 VM을 실행한다.
  • OS → 하이퍼바이저 → VM 순서로 탑처럼 올라간다
  • 쉽게 설치하고 쓸 수 있지만, 성능은 Type 1보다 떨어진다. OS가 중간에 껴있기 때문.
  • Parallels, VMware Workstation

가상화의 4개 핵심 영역

“완성도 있는 가상화 환경”을 위해 4 가지가 균형잡혀있는게 좋지만
“가상화” 그 자체는 CPU + 메모리 만으로도 동작 가능하다.

  • CPU 가상화 : 연산 자원의 분배
  • 메모리 가상화 : 실행 공간의 가상화
  • 스토리지 가상화 : 저장 공간의 가상화
  • 네트워크 : 통신 경로의 가상화

CPU 가상화

Host = 물리 서버. 전체 서버 안에 실제 물리 CPU가 있고, CPU 소켓이 있다.

VM을 만들때 vCPU로 실제 물리 CPU를 몇개 쓸지를 지정한다. VM이 사용하는 vCPU들은 실제 물리 서버의 CPU 코어에 매핑되어 동작하고, 하이퍼바이저가 이를 효율적으로 스케줄링해 여러 VM이 물리 자원을 나눠 쓰도록 한다.

  1. CPU 가상화 기본 구조
  • 물리적 CPU (pCPU)
    • 예: CPU 소켓 2개 × 코어 4개 = 총 8코어
  • 가상 CPU (vCPU)
    • VM 생성 시 가상 CPU 수를 지정한다.
    • 예: VM 에 2 vCPU 할당 → 물리 CPU 2코어 사용 가능
  • 주의할 점
    • vCPU 는 물리 CPU 를 독점하지 않는다.
    • vCPU 수는 물리 CPU 를 사용할 가능성만을 의미한다.
    • 여러 VM 이 동일한 물리 CPU 를 공유할 수 있다.
  1. CPU 공유와 경쟁
  • 동일한 물리 CPU 를 여러 VM 이 공유하는 구조이다.
  • 너무 많은 VM 이 동일한 CPU 코어를 공유하면 성능이 저하된다.
  1. 가상 머신 크기 조정 (Sizing)
  • 적절한 vCPU 수를 선택하는 것이 중요하다.
  • 리소스 최적화
    • 필요 이상 vCPU 를 할당하면 자원 낭비 및 경쟁이 심화된다.
    • VM 사용량 분석 후 vCPU 수를 조정하는 것이 좋다.
    • 예: CPU 사용률 25% → 2 vCPU 로 축소 가능
  • 목표: CPU 사용률을 50~60% 정도로 유지하는 것이 이상적이다.
    • 과도한 자원 할당 금지
    • 부족하지도 않게 균형 있게 유지

메모리 가상화

앱을 VM에서 실행하면 자체 메모리 테이블에 해당 페이지를 표시하고, 해당 애플리케이션에 가상 메모리를 할당한다. 메모리 페이지는 하이퍼바이저에 의해 물리적 메모리의 페이지로 다시 매핑된다.

단, 가상 머신이 실제로 애플리케이션을 닫으면 게스트 운영체제에서 닫힌다. 게스트 운영체제는 호스트에게 “이거 필요 없어” 라고 얘기하지 않음. 호스트가 가끔 게스트 운영체제의 내부를 살펴보고, 어떤 메모리가 사용되지 않는다면 해당 페이지 할당을 뺀다.

  1. VM 메모리 기본 구조
  • 가상 머신(VM) 은 생성 시 메모리 할당 (예: 4GB, 8GB 등)
  • VM 내부 운영체제 (예: Windows) 는 할당된 메모리를 실제 물리적 메모리라고 인식
  • 하지만 실제로 물리적 메모리가 항상 보장되지는 않음
    • 할당된 메모리 ≠ 항상 물리적 메모리
    • 필요할 때만 실제 물리 메모리 사용 (씬 프로비저닝)
  1. 메모리 매핑과 사용 흐름
  • 애플리케이션이 VM 내에서 실행되면 운영체제가 메모리 테이블에 기록
    • 사용 가능한 메모리 페이지와 사용 중인 메모리 페이지를 관리
  • 하이퍼바이저가 이를 받아 호스트 물리적 메모리 페이지로 매핑
  • VM 에서 앱이 종료되면 운영체제는 해당 메모리를 '사용하지 않음'으로 표시
  • 그러나 운영체제는 하이퍼바이저에게 메모리를 반환하지 않으므로
    • 하이퍼바이저가 스스로 주기적으로 검사하고 회수
  1. 초과 할당 (Overcommit)
  • 호스트가 보유한 메모리보다 VM 에 더 많은 메모리를 할당 가능
    • 예: 호스트 메모리 10GB
    • VM1: 4GB, VM2: 8GB → 총 12GB 할당
  • VM 은 실제 필요한 시점에만 물리 메모리를 사용
  • 효율적인 자원 활용 가능
  1. 메모리 예약 (Memory Reservation)
  • 특정 VM 에 물리 메모리를 고정 예약하는 기능
    • 예: VM 에 4GB 메모리 예약 → 항상 4GB 확보
  • 예약된 메모리는 다른 VM 이 사용할 수 없음
  • 대부분의 경우 비추천
    • 이유: 자원 비효율
    • 예약된 메모리가 사용되지 않아도 다른 VM 이 접근 불가

네트워크 가상화

  1. 네트워크 가상화
  • 가상 머신(VM)에서도 네트워크 자원이 필요하다.
  • VM 안에서 실행 중인 Windows는 자신이 가상 머신에서 실행 중이라는 사실을 모른다.
  • Windows VM은 마치 물리적인 서버에서 실행되는 것처럼 CPU, 메모리, 네트워크 자원을 기대한다.
  • CPU와 메모리는 이미 가상화 기술로 제공되는 것을 배웠음.
  1. vNIC (가상 NIC)
  • Windows VM은 가상 네트워크 인터페이스 카드(vNIC)를 사용한다.
  • vNIC는 실제 물리적인 NIC가 아니라, 가짜(가상) 하드웨어다.
  • Windows는 이를 실제 NIC라고 인식하고, 드라이버를 통해 사용한다.
  • 실제로는 하이퍼바이저가 이 vNIC를 통해 네트워크 연결을 제공한다.
  1. 가상 스위치 (Virtual Switch)
  • 물리적 서버가 물리적 스위치에 연결되듯, VM의 vNIC는 가상 스위치에 연결된다.
  • 가상 스위치는 하이퍼바이저 내부에 존재하며, 진짜 스위치처럼 동작한다.
  • 여러 VM이 같은 가상 스위치에 연결되어 있으면 서로 통신할 수 있다.
  • 같은 VLAN에 있으면 VM 간 트래픽이 가상 스위치 내에서 처리되고 물리적 네트워크를 통과하지 않는다.
  • VLAN을 통해 논리적으로 네트워크를 분리할 수 있음.
  1. 업링크 (Uplink)
  • 외부 네트워크(예: 인터넷, 다른 물리적 서버)와 통신하려면 업링크 필요.
  • 업링크는 호스트 서버의 물리적 NIC를 의미한다. 가상 스위치(Virtual Switch)와 물리적 네트워크(pNIC → Physical Switch)를 연결하는 통로.
  • VMware에서는 pNIC 또는 VMnic 이라고 부른다.
  • 물리적 NIC는 물리적 스위치에 연결되고, 스위치는 다시 라우터나 다른 네트워크로 연결된다.
  1. 트래픽 흐름
  • VM 간 통신은 가상 스위치 내부에서 처리 가능.
  • 외부 통신이 필요하면 VM → 가상 스위치 → 업링크(pNIC) → 물리적 스위치 → 라우터/인터넷/다른 서버로 트래픽이 전달됨.
  • 물리적 스위치는 MAC 주소 테이블을 조회해서 패킷을 적절한 포트로 전달.

Storage 가상화

  • VM 은 물리적 하드웨어가 없음
    • 실제 하드디스크 없음
    • 가상 하드디스크 사용
  • 게스트 OS (ex. Windows)
    • 실제 물리 디스크가 있다고 믿고 동작
    • OS 는 SCSI 명령을 사용해 디스크에 접근
  • 자신이 가상 머신 안에서 돌아가는지 모름
  1. 가상 스토리지의 동작 방식
  • VM 은 가상 SCSI 컨트롤러 (vSCSI controller) 를 사용
  • OS 가 디스크 읽기/쓰기 시 SCSI 명령을 발생
  • vSCSI 컨트롤러가 이를 하이퍼바이저 로 전달
  • 하이퍼바이저가 가상 디스크 (VMDK 등) 로 명령을 전달
  • 가상 디스크는 로컬 디스크이거나, 스토리지 어레이 (SAN, iSCSI 등) 에 위치

** SCSI (Small Computer System Interface) 컨트롤러는 컴퓨터랑 하드디스크 사이에서 데이터 전송을 관리하는 중간 관리자

  1. 동작 플로우
  • Windows VM → SCSI 명령 생성
  • vSCSI 컨트롤러 → 하이퍼바이저 전달
  • 하이퍼바이저 → 실제 저장소로 명령 전달
  • 데이터 저장 / 읽기 수행

** Storage Adator 는 SCSI 명령을 하이퍼바이저에게 받아서, storage array로 전달한다

  1. 하이퍼바이저의 역할
  • 스토리지 경로 관리
    • 로컬 디스크
    • 파이버 채널 스토리지 어레이
    • iSCSI 스토리지 어레이
    • 네트워크 기반 스토리지
  • VM 은 스토리지의 물리적 위치를 몰라도 됨
  • 하이퍼바이저가 모든 스토리지 명령을 중계
  1. 가상 스토리지의 장점 : 이동성 (Mobility)
  • VM 의 스토리지 파일(VMDK 등)을 다른 스토리지로 이동 가능
    • 예: 파이버 채널 → iSCSI 이동
  • VM 은 중단 없이 그대로 동작 가능
  • 하이퍼바이저가 새로운 스토리지 위치로 명령을 리디렉션
  1. 가상화의 분리 (Decoupling) 효과
  • 하드웨어와 VM 의 강한 의존성 해소
    • 한 물리 서버에서 다른 서버로 이동 가능
    • 한 스토리지 시스템에서 다른 시스템으로 이동 가능
  • VM 은 특정 하드웨어에 묶이지 않음

요약: "가상 머신은 물리적 환경으로부터 완전히 분리되어, 자유롭게 이동 가능하다."

가상화의 장단점

  1. 가상화의 가장 큰 장점: 통합 (Consolidation)

🏋️ 체육관 비유

  • 평소에는 적당한 기구 수로 충분하지만, 바쁜 시기 (예: 1월 신년 다짐 시즌) 에는 더 많은 자원이 필요
  • 필요할 때 확장, 필요 없으면 축소하는 유연성 필요

🖥️ 데이터센터도 동일

  • 특정 시기에는 리소스 사용이 폭발적으로 늘어남
  • 가상화를 통해 서버를 쉽게 늘리고 줄일 수 있음
  • 클라우드로 가기 위한 필수 단계 ("클라우드는 가상화 위에서 동작")
  1. 가상화가 제공하는 유연성

탄력성 (Elasticity)

  • 사용량이 많을 때 빠르게 리소스를 확장하고
  • 사용량이 줄면 빠르게 리소스를 축소할 수 있음
  • 가상화 없이는 불가능

작업 부하 통합

  • 물리 서버마다 하나의 OS 를 돌리던 방식 → 가상화로 하나의 물리 서버에서 여러 OS, 여러 작업 수행
  • 서버당 20~30개 이상의 OS 인스턴스를 실행 가능
  1. 가상화의 효율성 (Efficiency)
  • 기존 물리 서버의 문제
    • CPU, 메모리 사용률이 낮음 (20% 수준)
    • 서버당 하나의 워크로드만 실행하면 대부분 자원 낭비
  • 비효율적 자원 사용
    • CPU 20% 사용하고도 전체 서버 비용 지불
    • 자원 낭비 → 비용 낭비
  • 물리 서버에 여러 앱 설치?
    • 가능하지만 문제 생김:
      • 서버 재부팅 시 모든 앱 중단
      • 애플리케이션 간 의존성 문제
  • 가상화 솔루션
    • 물리 서버 제거 → 하이퍼바이저로 통합
    • 하이퍼바이저가 여러 VM 을 구동
    • 초과 구독 (Over-subscription) 으로 자원 활용률 극대화
    • CPU, 메모리 자원 사용률 60~70% 이상으로 최적화
  • 결론 : 비용 절감 + 운영 유연성 + 리소스 효율화
  1. 가상화의 장점 : 이동성 (Mobility)
  • 리소스 최적화
    • VM 을 한 호스트에서 다른 호스트로 이동하여 작업 부하 균등화
    • 예: 호스트 1 메모리 부족 → VM 을 호스트 2 로 옮김
    • 목표: 다운타임 없이 이동 (실시간 마이그레이션 / vMotion)
  • 유지보수 시
    • 물리적 호스트에 메모리 추가, 패치 설치, 재부팅 등 유지보수 필요 시
    • VM 을 사전에 다른 호스트로 이동 → 작업 완료 후 다시 복귀
    • 가상 환경이기 때문에 유연하게 이동 가능
  1. 이동을 위한 전제 조건
  • 공유 스토리지
    • VM 의 모든 파일(가상 디스크, 구성 파일, 스냅샷 등)에 접근 가능해야 함
    • 모든 호스트가 동일한 스토리지에 접근 가능해야 VM 이동 가능
  • 네트워크 호환성
    • VM 의 가상 NIC 가 vSwitch 에 연결되어 있어야 함
    • VLAN 및 포트 그룹 구성이 일치해야 함
    • VM 이 이동해도 동일한 네트워크 환경 유지
  • 호환 가능한 CPU
    • 호스트 간 CPU 아키텍처 (Intel ↔ Intel, AMD ↔ AMD 등) 일치
    • CPU 명령어 세트가 호환되어야 이동 후 정상 동작 가능
  • 메모리 복사
    • VM 실행 중 메모리 상태를 복사해야 함
    • "메모리 비트맵" 을 사용해 실시간 복사
    • 복사가 완료되면 새 호스트에서 실행
  1. 이동성 + 자동화 → 자동 로드 밸런싱
  • 클러스터 구성
    • 여러 호스트를 하나의 "클러스터" 로 묶음
    • 클러스터의 모든 자원을 공유하는 구조
  • 자동 워크로드 최적화
    • 워크로드 분산을 위해 VM 을 자동으로 이동
    • VMware 용어: DRS (Distributed Resource Scheduler)
    • 클러스터 내에서 자동으로 VM 을 마이그레이션해 로드 밸런싱