1. 상황

Ubuntu 인스턴스에 CentOS 도커 컨테이너를 띄우고, 그 안에 PostgreSQL를 설치한 상태

 

그림으로 나타내보자면 아래와 같다.

 

내가 하고 싶은 것은

우분투에서 "CentOS에 설치된 PostgreSQL"에 접속해서 데이터를 추출해 MySQL(개발 DB)로 보내는 것!

 

그냥 접속하려고 했더니 계속 connection 에러가 나서 찾아보니..

이런 경우는 PostgreSQL에서 외부 접속을 허용해주어야 하고,

그러려면 바꿔야 할 설정과 설치해야 할 패키지들이 있어서 과정을 정리해보고자 한다 :)

 

 

2. 과정

 

0. 필요 패키지 설치

# Ubuntu에
sudo apt-get install -y postgresql-client
sudo apt-get install -y postgresql-client-common

# CentOS에
yum install -y firewalld net-tools

 

 

1. PostgreSQL이 CentOS 컨테이너의 네트워크 인터페이스에서 수신 대기 중인지 확인 - CentOS 컨테이너에서 실행

netstat -nlt | grep 5432

PostgreSQL이 0.0.0.0:5432에서 수신 대기 중이면 모든 IP 주소에서 연결을 수락할 준비가 되었음을 의미한다.

127.0.0.1:5432에서 수신하는 경우 외부 연결을 허용하도록 PostgreSQL 구성 파일을 수정해야 한다.

 

 

2. CentOS 컨테이너의 방화벽에서 PostgreSQL 포트(5432) 열기 - CentOS 컨테이너에서 실행

firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload

 

3. /var/lib/pgsql/{version}/data/pg_hba.conf 수정 - CentOS 컨테이너에서 실행

host    all             all             {인스턴스 퍼블릭 IP}/22     md5

 

우분투에서 CentOS에 있는 PostgreSQL로 접속하려는 것이기 때문에 우분투 IP를 허용해주어야 한다.

pg_hba.conf 가장 하단에 있는 허용 목록에 우분투 IP를 host로 추가해준다.

 

4. /var/lib/pgsql/{version}/data/postgresql.conf 수정 - CentOS 컨테이너에서 실행

#listen_addresses = 'localhost' 를 아래로 변경
listen_addresses = '*'

 

5. PostgreSQL 재시작 - CentOS 컨테이너에서 실행

sudo systemctl restart postgresql-{version}

 

6. 접속 - Ubuntu 인스턴스에서 실행

psql -h {인스턴스 퍼블릭 IP} -U postgres

접속에 성공한 것을 확인할 수 있다~!!

로드 밸런싱 (Load Balancing)

 

로드 밸런싱이란?

인프라를 운영한다면 쏟아지는 트래픽을 고려하지 않을 수가 없습니다. 아무리 성능이 뛰어난 서버라도 한 대의 서버로는 모든 트래픽을 감당하기 어렵기 때문에 다수의 서버를 구축하게 됩니다. 하지만 단순히 여러 대의 서버를 운영한다고 해서 모든 클라이언트의 요청에 일관성 있게 응답할 수 있을까요? 

 

로드 밸런싱이란 말 그대로 서버가 처리해야 할 업무 혹은 요청(Load)를 여러 대의 서버로 나누어(Balanding) 처리하는 것을 의미합니다. 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해 각각의 서버가 최적의 성능을 보일 수 있게 하는 것이 목적입니다.

 

서비스의 규모가 커지고, 사용자 수가 늘어나게 되면 기존의 서버만으로는 요청 처리가 어려워지기 때문에 다음과 같이 크게 두 가지 방법으로 대처할 수 있습니다.

  1. 기존의 서버 성능을 확장하는 Scale-up 방식
  2. 기존의 서버와 동일하거나 낮은 성능의 서버를 증설하는 Scale-out 방식

이 때 Scale-out 방식을 통해 증가한 트래픽에 대처하기로 했다면, 여러 대의 서버로 트래픽을 균등하게 분산해주는 로드 밸런싱이 필요합니다.

 

 

로드 밸런싱 기법

서버의 성능을 고려하여 분배해야 하기 때문에 서버의 상황에 맞춰 적절한 방법을 선택해야 합니다.

  • 라운드 로빈 방식(Round Robin Method)
    • 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식
    • 클라이언트의 요청을 순서대로 분배하기 때문에 여러 대의 서버가 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합
  • 가중 라운드 로빈 방식(Weighted Round Robin Method)
    • 서버마다 가중치를 매기고 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분
    • 주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 부하 분산 방식
    • 예를 들어 A라는 서버가 5라는 가중치를 갖고, B라는 서버가 2라는 가중치를 갖는다면, 로드 밸런서는 라운드로빈 방식으로 A 서버에 5개 B 서버에 2개의 요청을 전달
  • IP 해시 방식(IP Hash Method)
    • 클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식
    • 사용자의 IP를 해싱해 로드를 분배하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장
  • 최소 연결 방식(Least Connection Method)
    • 요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에 우선적으로 트래픽 배분
    • 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합
  • 최소 응답 시간 방식(Least Response Time Method)
    • 서버의 현재 연결 상태와 응답 시간을 모두 고려하여 트래픽 배분
    • 가장 적은 연결 상태와 가장 짧은 응답 시간을 보이는 서버에 우선적으로 로드를 배분하는 방식

 

L4 로드 밸런싱과 L7 로드 밸런싱

로드 밸런싱에는 L4 로드 밸런싱과 L7 로드 밸런싱이 가장 많이 활용됩니다.

먼저 L4와 L7이 무엇을 의미하는 지부터 알아봅시다.

 

L4는 Layer 4(전송 계층) 프로토콜과 Layer 7(응용 계층) 프로토콜의 헤더를 부하 분산에 이용하기 때문에 붙은 접두사입니다. 모든 요청을 L4 또는 L7 로드 밸런서가 받아 서버들에게 적절히 나누어 줍니다.

 

L4 로드 밸런서

  • 네트워크 계층(IP, IPX)이나 전송 계층(TCP, UDP)의 정보(IP주소, 포트번호, MAC주소, 전송 프로토콜)를 바탕으로 로드 분산

 

L7 로드 밸런서

  • 애플리케이션 계층(HTTP, FTP, SMTP)에서 로드를 분산하므로 HTTP 헤더, 쿠키 등과 같은 사용자의 요청을 기준으로 특정 서버에 트래픽 분산
  • 패킷의 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분배하는 것
  • URL에 따라 로드를 분산시키거나 HTTP 헤더의 쿠키 값에 따라 부하는 분산하는 등 클라이언트의 요청을 세분화해 서버에 전달
  • 특정한 패턴을 지닌 바이러스를 감지해 네트워크를 보호할 수 있음
  • DoS/DDoS와 같은 비정상적인 트래픽을 필터링 할 수 있어 네트워크 보안 분야에서 활용

 

 

 

 

 

 

 

참고링크

 

 

설치

  • VirtualBox 설치
  • Vagrant 설치
brew install vagrant ansible

# GUI툴 (선택사항)
brew install vagrant-manager

 

 

사용 방법

초기작업

1. vagrant 관련 파일이 만들어질 작업 폴더 구성 및 이동

mkdir -p /Users/nhn/workspace/VM/centos7
cd /Users/nhn/workspace/VM/centos7

 

2. 플러그인 설치

vagrant plugin install vagrant-vbguest vagrant-disksize

 

3. 초기 파일 생성

vagrant init

 

  • vi Vagrantfile
ENV["LC_ALL"] = "en_US.UTF-8"
Vagrant.configure("2") do |centos|

  # All servers will run cent 7
  centos.vm.box = "centos/7"
  centos.vm.box_check_update = false
  centos.disksize.size = "60GB"

  # Create the cent1 Server
  N = 1
  (1..N).each do |i|
    hostname = "cent7-#{i}"
    centos.vm.define hostname do |host1|
      host1.vm.hostname = hostname
      host1.vm.network "private_network", ip: "192.168.56.#{10 + i}"
      host1.vbguest.auto_update = false
      host1.vm.provider "virtualbox" do |v|
        v.name = hostname
        v.memory = "2048"
        v.cpus = "2"
        v.linked_clone = "true"
        v.gui = "false"
        v.customize ['modifyvm', :id, '--graphicscontroller', 'vmsvga']
        v.customize ['modifyvm', :id, '--vram', '20']
      end
    end
  end
  centos.vm.provision "ansible" do |ansible|
    ansible.playbook = "init.yml"
  end
  # centos.vm.provision "shell" do |shell|
  #   shell.path = "extend.sh"
  # end
end

centos.vm.box

  • 생성할 박스 이미지명
  • url에서 기본적으로 제공하는 이미지 선택가능

v.linked_clone

  • 해당 옵션을 줄 경우 박스에 대한 모든 이미지 파일을 만드는게 아니라 차이점만 추가로 생성함
  • 용량관리에 도움됨

centos.vm.provision

  • box로드 후 프로비저닝을 할 파일의 내용 추가 가능

 

  • vi init.yml
- name: init.yml
  hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: 사용자 이름 생성
      user:
        name: "{{ item }}"
        shell: /bin/bash
        home: "/home/{{ item }}"
        generate_ssh_key: true
        password_lock: yes
      with_items:
        - irteam
        - irteamsu
        - centos
    - name: sudoers.d 추가
      copy:
        content: |
          %{{item}} ALL=(ALL) NOPASSWD: ALL
        dest: "/etc/sudoers.d/{{item}}"
        owner: root
        group: root
        mode: 0440
        validate: "/usr/sbin/visudo -c -f '%s'"
      with_items:
        - irteam
        - irteamsu
        - centos
    - name: ssh내용 추가
      authorized_key:
        user: "{{ item }}"
        state: present
        key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
      with_items:
        - irteam
        - irteamsu
        - centos
        - vagrant
        - root
    - name: Make sure a service unit is restarting
      ansible.builtin.systemd:
        state: restarted
        name: sshd.service

 

ssh 관련 오류 발생

fatal: [cent7-1]: FAILED! => {"msg": "An unhandled exception occurred while running the lookup plugin 'file'. Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: ~/.ssh/id_rsa.pub. could not locate file in lookup: ~/.ssh/id_rsa.pub"}

 

해결방법

1. ssh키 생성

ssh-keygen

 

2. ssh키가 존재하는지 확인

cat ~/.ssh/id_rsa.pub

 

3. Vagrantfile 파일이 위치한 곳으로 이동

cd /Users/nhn/workspace/VM/centos7



4. 베이그런트 기존 명령어를 통해 ssh 접근

vagrant ssh


5. 인증키 등록여부 확인

cat ~/.ssh/authorized_keys
exit

아래처럼 ssh-rsa로 시작하는 내용이 뜬다면 키가 있는 것입니다!


6. 인증키 확인

cat ~/.ssh/id_rsa.pub


7. 키를 생성하고 vagrant provision을 수행

vagrant provision



8. ssh 키를 통해 접근

ssh centos@192.168.56.11

 

  • 프로비저닝까지 정상적으로 진행되면 위의 명령어로 어느 경로에서든 터미널에서 바로 VM에 접근 가능!
    • authorized_key 키를 등록했기 때문에 ssh를 통한 패스워드 미입력 접근이 가능해짐
    • ip는 Vagrantfile에 정의된 것에 따라 192.168.56.11부터 순차적으로 부여됨

 

명령어

# 아래의 명령어는 모두 컨트롤하려는 VM의 설정이 정의된 Vagrantfile이 위치한 경로에서 수행해야 정상작동함.

# VM기동
vagrant up 

# 생성한 VM에 ssh 접근, vagrant계정에 접근하게됨.
vagrant ssh

# 생성 스탭은 건너뛰고 프로비저닝만 진행.
vagrant provision

# VM 종료
vagrant halt

# 생성한 VM 삭제. f는 강제옵션.
vagrant destroy -f

 

 

 

참고링크

VirtualBox 설치 과정을 정리해보고자 한다.

 

설치 환경

  • MacBook Pro Intel i7 (2019)
  • Monterey

 

설치할 패키지

  • VirtualBox 7.0.6 platform packages
  • VirtualBox 7.0.6 Oracle VM VirtualBox Extension Pack

 

공식 도큐먼트에서 운영체제 맞는 파일을 다운로드 받아 설치를 진행한다!

 

Downloads – Oracle VM VirtualBox

Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By downloading, you agree to the terms and conditions of the respective license. If you're looking for the latest VirtualBox 6.1 packages, see Virt

www.virtualbox.org

 

 

VirtualBox 7.0.6 설치

1. 운영체제에 맞게 선택하여 다운로드

 

2. VirtualBox.pkg 더블 클릭

 

3. 설치 진행

 

4. 설치 완료

 

VirtualBoax 7.0.6 Extension Pack 설치

 

1. All supported platforms 클릭하여 다운로드

 

다운로드 받은 VirtualBox와 같은 버전인지 꼭 확인해야 한다.

Please install the same version extension pack as your installed version of VirtualBox.

 

2. 설치 진행

 

3. 라이선스 동의

4. 비밀번호 입력

5. 설치 완료

 

 

참고링크

IaaS vs. SaaS vs. PaaS

요즘, 클라우드 하면 IaaS, PaaS, SaaS 를 많이 들어보셨을텐데, 이는 클라우드 서비스를 분야별 특성으로 나눈 것입니다.

 

IaaS, PaaS, SaaS가 대체 무엇인지 비교를 통해 알아보겠습니다.

IaaS (Infrastructure-as-a-service)

시스템 인프라를 서비스로서 제공합니다. 네트워크, 스토리지, 서버 등을 가상화하여 제공하고 관리합니다. 즉, 가상머신을 빌려주는 서비스입니다.

NHN Cloud, AWS, MS Azure, GCE 등에서 제공합니다.

 

PaaS (Platform-as-a-service)

애플리케이션 실행 환경을 서비스로서 제공합니다. 소프트웨어 작성을 위한 플랫폼을 가상화하여 제공하고 관리합니다. 개발자는 운영체제, 소프트웨어 업데이트, 저장소 또는 인프라에 대한 관리없이 소프트웨어 개발에만 집중할 수 있습니다.

NHN Cloud PaaS-TA, AWS Elastic Beanstalk, Heroku, Google App Engine 등이 있습니다.

 

SaaS (Software-as-a-service)

애플리케이션을 서비스로서 제공합니다. 대부분의 SaaS 애플리케이션 웹 브라우저를 통해 직접 실행되므로 클라이언트 측에서 다운로드 설치가 필요하지 않습니다.

NHN Cloud Dooray!, Google Apps, Dropbox 등이 있습니다.

 

 

NHN Cloud

국내 NCP 중 하나인 NHN Cloud는 IaaS, PaaS, SaaS를 모두 아우르는 전 영역에서 각 산업 분야에 맞는 클라우드 솔루션을 직접 개발 및 출시하여 사업영역을 확장해나가고 있습니다.

 

NHN Cloud의 서비스를 나누어 보면 다음과 같습니다.

 

IaaS

  • Public Cloud
  • Private Cloud
  • Multi Cloud

 

PaaS

  • PaaS-TA

애플리케이션 개발과 운영을 위해 필요한 플랫폼을 온라인 환경에서 제공하는 공개형 PaaS 플랫폼입니다. 인프라 제어 및 관리 환경, 실행 환경, 개발 환경, 서비스 환경, 운영 환경으로 구성되며, 다양한 개발 언어와 프레임워크를 제공합니다.

국내 최초로 공공 클라우드 PaaS 부문 보안인증을 획득했습니다.

  • Gamebase
  • Security
  • Notification
  • Search
  • Dev Tools
  • 등등

 

SaaS

  • Dooray! : 메일과 프로젝트 단위의 업무 관리, 메신저를 통합한 협업도구
  • 그룹웨어 : 전자결재 및 게시판을 통합
  • ERP : 인사와 재무 서비스를 제공하는 ERP

 

 

 

 

참고링크

RAID (Redundant Array of Inexpensive Disks)

RAID란?

여러 개의 디스크를 묶어 하나의 디스크처럼 사용하는 기술이다.

 

과거에는 주로 용량이 작은 디스크들을 연결해 디스크 용량을 높이기 위해 사용했다. 오늘날에는 디스크 성능 향상에서 나아가 디스크 오류나 데이터 손실 등 장애에 대비하기 위한 용도로도 사용되고 있다. 서버에 저장되는 데이터의 경우, 손실 또는 유출에 대비해야 한다. 그래서 많은 서버 관리자는 RAID 구성을 통해 디스크의 가용성을 높이거나 서버 데이터의 안정성을 확보할 수 있다.

 

RAID의 장점

  1. 운용 가용성, 데이터 안정성 증대
  2. 디스크 용량 증설의 용이성
  3. 디스크 I/O 병렬화로 인한 성능 향상

 

앞으로 패리티(Parity)라는 단어가 자주 등장할 것인데, 패리티란 무엇일까?

디스크에 장애가 발생했을 때 데이터 복원을 위해 사용되는 부호이다.

RAID에 데이터를 쓸 때 자동적으로 생성되는데, 장애가 발생했을 때 남아있는 데이터와 패리티를 조합하여 데이터를 복구할 수 있다.

 

구성방식

자주 사용되는 RAID 구성방식별 특징을 알아보고자 한다.

 

RAID 0

Striping이라고도 부르는 방식이다.

최소 2개의 용량이 같은 디스크가 필요하며 RAID를 구성하는 모든 디스크에 데이터를 분할하여 저장한다.

전체 디스크를 동시에 사용하기 때문에 성능은 단일 디스크의 n배이며 용량도 n배이다.

하지만 하나의 디스크라도 문제가 발생할 경우 전체 RAID가 깨지는 일이 발생하기 때문에 안정성은 1/n로 줄어든다.

 

 

RAID 1

Mirroring이라고도 부르는 방식이다.

최소 2개의 디스크가 필요하며 모든 디스크에 데이터를 복제하여 기록한다. 즉, 동일한 데이터를 n개의 각 디스크로 복제하여 저장하는 방식이다.

여러 개의 디스크로 RAID를 구성해도 실제 사용 가능한 용량은 단일 디스크의 용량과 동일하다.

신뢰성이 높지만, 공간 효율이 좋지 않고, 비용 문제로 인해 거의 사용하지 않는다.

 

 

RAID 5

블록 단위로 striping을 하고 ECC를 위해 패리티를 1개의 디스크에 저장한다.

단, 패리티 저장은 고정된 디스크에 하지 않고, 매번 다른 디스크에 저장한다. (RAID 4의 단점을 개선한 것)

용량 및 성능이 단일 디스크 대비 n-1배 증가하며 최소 3개의 디스크가 필요하다.

 

 

RAID 6

RAID 5에서 성능과 용량을 줄이고, 안정성을 높은 방식이다.

블록 단위로 striping을 하고 ECC를 위해 패리티를 2개의 디스크에 저장한다.

단, 패리티 저장은 고정된 디스크에 하지 않고, 매번 다른 디스크에 저장한다.

용량 및 성능이 단일 디스크 대비 n-2배 증가하며 최소 4개의 디스크가 필요하다.

 

 

Nested RAID

Nested RAID는 Standard RAID를 여러개 중첩하여 사용하는 방식이다.

 

RAID 0+1

mirroring 전에 striping을 진행해 디스크가 불량이 나면 그룹핑된 RAID 0의 데이터 전체를 복구한다.

Disk0과 Dist2가 다운되면 모든 볼륨이 다운되어 사용할 수 없게 된다.

 

 

RAID 1+0

mirroring 후에 striping을 진행해 미러링으로 묶인 디스크를 통하여 손실된 데이터만을 복구한다.

Disk0과 Disk2가 다운되어도 복구하면 된다.

 

 

 

 

참고링크

이전 글에서 가상화와 하이퍼바이저에 대해서 알아보았다.

 

하이퍼바이저는 다시 가상화 방식에 따라 Full Virtualization과 Para Virtaulization으로 분류된다.

 

Full Virtualization (전가상화)

하드웨어를 완전히 가상화하는 방식이다. 전부 가상화하기 때문에 Guest OS가 Host 시스템과 완전히 분리되어 실행된다. 따라서 Guest OS는 자신이 VM의 OS인지 인지하지 못한다. 그러므로 Guest OS는 하이퍼바이저의 존재를 알 필요가 없다.

 

Hardware와 Guest OS 사이에 Hypervisor가 분명 존재하지만, VM 입장에서는 가상화된 하드웨어를 진짜(물리) 하드웨어로 생각하고 있기 때문에, 실제 물리 자원에 대해 요청을 보낸다고 생각하게 된다. 원래 system call에 의해 App → Kernel → Hardware 순서로 서비스를 요청하는데, 이 과정을 하이퍼바이저 단에서 처리해 주는 것이다. 하이퍼바이저 관리용 가상머신이 실행되며, 모든 가상머신들의 하드웨어 접근이 해당 관리 머신을 통해 이루어진다.

 

Hardware Assisted Full Virtualization vs Software Assisted Full Virtualization

Full Virtualization을 구현하는 방법을 하드웨어 지원 전가상화소프트웨어적 전가상화로 나뉜다. 사실 전가상화는 하드웨어 지원 전가상화와 동일한 개념으로 언급된다.

 

하드웨어 지원 전가상화의 경우, Trap과 Emulation을 이용해 Guest OS의 Application이 직접 하드웨어의 리소스를 요청해 사용하는 구조이다.

 

소프트웨어적 전가상화를 처리하는 경우, Binary Translation을 이용해 각 단계에서 모든 명령에 대해 일일히 가상화하는 방법으로 진행된다.

 

Dual-mode operation

OS는 Dual-mode operation(이중 동작 모드)라는 것을 지원한다. 사용자와 OS는 시스템 자원을 공유하는데, 사용자가 메모리 내의 주요 자원들을 망가뜨릴 수 있기 때문에 이를 보호하고자 마련된 장치이다.

이중 동작 모드는 사용자모드와 커널모드로 구성되어 있다.

사용자가 사용하는 application이 사용자모드에서 작동되거나 OS에게 system call을 하는 경우, 커널모드로 바꿔 요청된 서비스를 실행한 후에 다시 사용자모드로 전환되는 구조이다.

 

Trap & Emulation

일단 pass

 

Binary Translation

Guest OS는 다양한 종류의 OS가 올라갈 수 있기에, 가상화된 하드웨어 요청을 할 때 OS마다 인터페이스가 각기 다르다. 이런 다양한 형식을 하나의 형식으로 번역해주는 작업 Binary Translation이라고 한다. 당연히 이 과정에서도 오버헤드가 발생한다.

 

 

 

Para Virtualization (반가상화)

Full Virtualization의 경우 거쳐야 할 단계가 많아 오버헤드가 발생하며, 성능이 느려진다. 그래서 이를 해결하고자 Para Virtualization이 등장했다.

반가상화의 핵심은 Hypercall이다. 반가상화에 사용되는 Guest OS는 Hypercall이라는 인터페이스를 통해 하이퍼바이저에게 직접 요청을 날린다. 방식은 사실 OS에서 application이 kernel에게 system call로 서비스를 요청하는 방식과 동일하다. 요청을 날리는 주체가 Guest OS이고, 받는 대상이 하이퍼바이저라는 점이 다를 뿐이다.

 

 

전가상화에서 Guest OS는 자신이 Guest OS인지 모른다. 하지만 반가상화에서는 Guest OS가 Hypervisor에 직접 Hypercall을 날려야 되므로, 자신이 Guest OS라는 사실을 인지해야 한다. 따라서 반가상화 하이퍼바이저에 올라가는 Guest OS는 커널을 수정해, Guest용 OS를 따로 만들어야 한다.

 

 

정리

하이퍼바이저 가상화(Type1)

  • 전가상화 : Guest OS의 수정이 필요없도록 하드웨어 전체를 가상화하는 기술
  • 반가상화 : Guest OS를 수정하여 특정 명령이 수행될 때 Hypercall을 호출하여 하이퍼바이저가 실행되도록 하는 기술

 

 

 

 

 

 

 

참고링크

+ Recent posts