Deployment & Packaging - Virtual Server

Violet_Evgadn·2023년 4월 24일
0

Cloud Native Architecture

목록 보기
10/16
post-custom-banner

Virtual Server

Virtual Server란?

Virtual Server, Virtual Machine(VM)이라고도 불리는 가상 서버를 말한다.

기존 Physcial Server에서는 Resource의 경계를 한정 지을 수 없어 Resource 할당에 대한 단점이 존재하였다.

이런 문제점을 해결하기 위해 "1대의 물리적 서버가 있더라도 마치 여러 개의 물리적 서버가 있는 것처럼 설정하면 되지 않을까?"라는 생각으로 나온 해결책이 바로 Virtual Server이다.

VM에서는 1개의 Physical Server 위에 여러 개의 Virtual Layer를 두어 실제로는 1개의 HW만 존재하지만 마치 Virtual Layer 개수만큼의 컴퓨터가 존재하는 것처럼 활용할 수 있게 하는 방식이다.

VM에서는 위 사진처럼 1개의 Main OS 위에 Hypervisor를 두고 1개의 Virtual Layer마다 각자의 OS를 가지고 있어 User가 마치 여러 개의 OS가 있는 것처럼 보이게 된다.

이런 특징 때문에 Physical Server와는 달리 1개의 HW에서 여러 개의 OS 및 환경들을 활용할 수 있게 되고 이는 1개의 Physical Server에 여러 개의 Application을 올리는 데에 있어 부담감이 크게 줄어든다는 장점을 가지고 온다.

일반적으로 모든 VM을 관리하는, 메인 컴퓨터에 활용하고 있는 OS를 Host OS라고 정의하며 각각의 Virtual Machine에 설치된 OS를 Guest OS라고 정의한다.

가상 머신의 종류

System 가상 머신

우리가 VM을 공부할 경우 일반적으로 배우는 VM 종류이다.

Hypervisor를 통해 가상화를 제공하며 1개의 Host OS에 여러 개의 VM을 설치하고, VM별로 각자의 Guest OS가 존재하여 완벽히 고립된 상태로 같은 컴퓨터에서 여러 개의 OS를 활용할 수 있게 되는 것이다.

Process 가상 머신(응용프로그램 가상 머신)

Platform과는 독립적이게 컴퓨터 프로그램을 실행하기 위해 고안된 가상 머신이다.

시스템 가상 머신과는 다르게 1개의 단일 프로그램(프로세스)를 실행하도록 설계되었다.

Java의 JVM이 대표적이며 Guest OS를 사용자가 직접 만든다기보다는 Process 가상 머신 내부에 Guest OS 역할을 하는 가상 머신이 이미 존재하고 Runtime 시 가상 머신이 동작하여 컴퓨터가 어떤 OS를 가졌든 Application이 동작할 수 있는 OS 형태로 변경시켜주는 역할을 수행한다.

Hypervisor

VM을 공부할 때 빠뜨릴 수 없는 것이 Hypervisor이다.

Hypervisor란 Host OS에서 다수의 Guest OS를 동시에 실행시킬 수 있게 하는 논리적 플랫폼을 말하며, VMM이라고도 한다.

이 Hypervisor는 Host OS의 자원을 파악하고 일부분을 할당 받아 Guest OS에 알맞게 분배해준다.

Virtual Machine은 할당받은 자원에 따라 Guest OS를 실행시키게 되며 User는 Host OS를 보는 것이 아닌 Guest OS를 보게 되어 마치 여러 개의 컴퓨터가 실행되는 것처럼 인지하게 되는 것이다.

즉, 메인 컴퓨터의 자원을 VM에 분배하여 VM이 각자 가지고 있는 Guest OS에 자원이 할당되어 실행할 수 있게 만들어주는 관리자 역할을 하는 것이 Hypervisor라고 할 수 있겠다.

Hypervisor은 2개의 유형이 존재한다.

먼저 Native, Bare-Metal이라고도 부르는 유형의 Hypervisor이다. 이 Hypervisor는 HW에서 직접 Guest OS들을 관리한다.

이 경우 Guest OS 중에 1개에서 문제가 발생하더라도 Guest OS들을 모두 관리하는 Hypervisor는 HW에서 실행 중이기 때문에 다른 Guest OS까지에는 영향을 미치지 않는다.

두 번째 유형은 Host OS 상에서 구동되는 Hypervisor이다.

이 Hypervisor는 다른 응용 프로그램과 마찬가지로 메인 컴퓨터의 OS에서 실행되기 때문에 Guest OS는 사실상 Host OS의 프로세스처럼 구동되는 것이다.

두 번째 유형의 경우 Hypervisor는 Host OS에 매우 의존적이며 만약 Host OS에 문제가 발생하였을 경우 전체 Guest OS에 영향을 끼치게 된다.

대표적인 두 번째 유형의 Hypervisor는 VirtualBox, VMware Workstation 등이 존재한다.


Virtual Machine 장점

Application 프로비저닝 옵션 제공

Provisioning이란 제공하고자 하는 서비스를 사용자의 요구에 맞는 시스템으로 제공하는 것을 말한다.

이 때 제공해줄 수 있는 것은 Infra 자원이나 Service, 장비가 될 수 있을 것이다.

VM에서는 Guest OS에 대한 여러 설정을 수행할 수도 있고 VM에 독립적으로 라이브러리나 필요한 기능들을 설치할 수 있다.

즉, Application마다 다른 고객의 요구사항에 맞도록 필요한 기능들을 적절하게 제공해 줄 수 있다는 장점을 가지게 된다.

이런 장점은 Physical Server에서 발생했던 Resource 할당 문제를 해결해 줄 수도 있다.

VM에서는 Provisioning을 통해 VM이 활용할 수 있는 자원의 최대 범위를 지정해 줄 수 있다. 따라서 VM은 설정된 자원보다 더 많은 자원이 요구되더라도 설정 자원의 최대 범위를 넘도록 활용할 수는 없으며 1개의 VM이 다른 VM의 성능에 영향을 끼치는 문제가 발생하지 않는 것이다.

유지보수가 편함

Physical Server를 활용했을 경우 Host OS와 Web Server가 직접적으로 연동되어 있기 때문에 Web Server에서 발생한 문제가 Physical Server의 OS에 직접적으로 타격을 줄 수 있는 위험성이 커진다.

즉 Physical Server와 Web Server가 물리적으로 분리되어 있지 않기 때문에 보안적으로 위험성이 커지는 것이다.

하지만 VM에서는 Guest OS는 VM으로 둘러싸여 있으며 VM들은 Hypervisor라는 중간 단계를 거치고 나서야 Host OS에 도달할 수 있다.

따라서 Guest OS에서 발생한 에러가 실제 컴퓨터에 영향을 끼칠 위험성이 줄어들기 때문에 보안적인 위험성이 줄어든다.

또한 각각의 VM들이 모두 완벽히 분리되어 있기 때문에 문제가 발생하였을 경우 어떤 VM에서 문제가 발생하였는지 파악하기 쉬어지고, 문제가 발생한 VM을 수정하는 과정에서 다른 VM에 영향을 끼칠 가능성이 현격히 적기 때문에 유지보수에 대한 위험성도 줄어든다.


Virtual Machine 단점

유동적인 자원 Balancing의 어려움

VM은 Provisioning 설정을 활용할 수 있다.

이는 Resource 할당 문제를 해결한다는 장점이 될 수도 있지만, 동시에 유동적으로 자원을 Balancing 할 수 없다는 단점을 가져오기도 한다.

예를 들어 A 기능이 아침에는 2의 Traffic만 가지지만 저녁에는 15의 Traffic을 가진다고 가정하자.

하지만 VM은 어디까지나 "최대 사용 자원"을 기준으로 Provisioning을 수행해야 하므로 15 Traffic을 처리할 수 있는 자원을 기준으로 범위를 설정해야 할 것이다.

즉, 아침에는 13의 Traffic을 처리할 수 있는 자원이 놀게 되는 것이다.

가상 머신의 개수가 많아지면 성능이 불안정해질 수 있음

VM은 Hypervisor에서 메인 컴퓨터의 자원을 할당하는 방식으로 여러 개의 OS를 활용할 수 있다.

이는 VM이 추가될수록 자원을 할당해야 하는 OS가 더 많아짐을 알 수 있고, 자연스럽게 Guest OS를 위해 사용되는 메인 컴퓨터의 자원 또한 증가할 것이다.

즉 VM의 개수가 많아질수록 HW의 성능은 무조건 높아져야 하며, 만약 VM이 필요로 하는 자원의 총합이 Host OS의 자원보다 높을 경우 모든 VM에서 성능 하락이 발생하는 문제가 있는 것이다.

낮은 Porable(휴대성)

VM은 각자의 Guest OS를 가지고 있는 소규모 컴퓨터라고 할 수 있다.

즉, Application을 VM에 실행시키기 위해선 VM에 대한 환경 설정이 선행적으로 요구되는 것이다.

당연히 이 과정에서 "Local에서는 정상 작동하였으나 VM에서는 정상 작동하지 않는다"라는 문제가 발생할 수도 있다.

왜냐하면 VM의 설정과 Local 컴퓨터나 개발 서버에 대한 설정값이 동일하다는 것을 보장할 수는 없기 때문이다.

따라서 VM은 Portable이 낮은 Server가 되는 것이다.

낮은 관리 효율성

유지보수가 편하다는 장점과 모순되는 단점이 아닐까 싶기도 하겠지만, 이유를 듣다보면 이해가 될 것이다.

VM의 장점은 Virtual Machine마다 다른 설정값을 줄 수 있으며, 다른 OS 및 기능들을 활용할 수 있다는 점이다.

그런데 관리 측면으로 넘어오자면 이는 효율성의 감소로 이어진다.

관리를 위해서는 VM 별 설정값 및 OS들을 알아야 할 것이며 VM이 많아질수록 그에 따라 관리해야 할 VM 설정값이 더욱 많아지는 것이다.

즉 관리자가 익혀야할 기술들이 늘어날뿐더러 VM별 설정값들을 한 번에 파악하기 어려워지기 때문에 관리가 어려워지는 것이다.

Physical Server같은 경우 OS에 문제가 생겼다면 1번만 수정하면 됐겠지만 VM은 문제가 생긴 OS마다 따로 관리를 해줘야 하며 Host OS에 문제가 생겼을 경우 유지보수 과정에서 Guest OS에 영향을 끼치는지도 파악해야 하기 때문에 관리의 효율성이 낮아지는 것이다.

자원의 낭비 발생

VM은 내부에 Guest OS가 존재하고, 이외에도 1개의 컴퓨터가 수행되기 위해 필요한 여러 기능들이 필요하다.

Application은 당연히 필요할 것이고 이를 실행하기 위한 bin/library 또한 존재해야 할 것이다.

그런데 만약 Application이 사용하는 Resource가 적을 경우 Applicatoin 보다는 bin/library와 Guest OS가 사용하는 Resource가 더 많아지는 경우가 발생할 수 있다.

이 경우에는 Application보다 환경에 투자되는 Resource가 더 많아지는 배보다 배꼽이 커지는 경우가 발생할 것이며, 이는 Application에 특화된 자원 할당이 불가능해지는 단점으로 이어진다.

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!
post-custom-banner

0개의 댓글