[백엔드] 가상화(Virtual Machine / Docker)

Hyo Kyun Lee·2021년 8월 1일
0

백엔드

목록 보기
2/11
post-custom-banner

1-1. 가상화

물리적인 컴퓨터 자원을 논리적인 객체로 표현하는 기술

하나의 하드웨어를 여러 하드웨어가 있는 것처럼 동작하거나, 여러 하드웨어를 하나의 하드웨어처럼 묶어 동작하는 방법이 있다.

1-2. 가상화 등장배경

CPU, memory, server, storage, DB 등 HW자원 및 OS 등의 효율적인 활용을 위함

기존의 시스템 자원 및 서버의 경우 물리적으로 별도의 장치를 구성하였고, 이를 확장하기위해선 1:1 대응관계의 물리장치의 추가구성이 필요하여 한계가 있었다.

즉 하드웨어의 성능이 좋아져도 하나의 서버, 물리장치에서 하나의 어플리케이션이 동작하고 요청을 처리하는 비효율적인 상황이 발생하게 되었다.

이러한 문제를 해결하기위해 가상화 개념이 등장하고, 이 개념을 활용한 다양한 방안 중 하나로 Virtual Interface solution이 등장하게 되었다(가상화시대의 도래).

물리적인 저장소나 자원의 가상화로 별도의 물리장치의 추가없이 기존의 자원을 공유하는 개념으로, 자원절약 및 효율적인 데이터 처리가 가능하게 되었다.

1-3. 가상화의 종류

컴퓨팅(Server) 가상화

  • 컴퓨터 자원을 가상화하여 논리객체로 이용하는 기술로, 하나의 체계(컴퓨터) 안에서 논리객체화된 자원을 사용하여 여러 대의 컴퓨터(OS)가 있는 효과를 얻을 수 있다.
  • 이렇게 추상화된 객체, 운영체제는 하나의 컴퓨터와도 같기 때문에 Virtual Machine이라고도 한다.

쉽게 말하면 하나의 체계안에서 마치 여러 OS(=컴퓨터, Vitrual Machine)가 동시 실행하는 효과를 얻을 수 있는 기술이다.

물론 추상화된 여러 대의 운영체제와 이 운영체제에서 실행되는 Application은 모두 독립적이다(Indepedent).

컴퓨팅가상화에는 두가지 type이 존재한다.

기본적으로 컴퓨팅가상화는 HW, 즉 컴퓨터 자원을 추상화하는 것부터 시작한다.

이를 기억하면서 컴퓨팅가상화의 종류를 알아보자.
특히 이 부분은 매우 중요한 개념이므로 반드시 잘 이해하고 있어야 한다!

첫째, Hypervisor Architecture

Hyper는 "건너편의, 초월의"라는 뜻이고, visor는 "덮는다"라는 뜻이다.

즉 개념자체가 초월적으로 덮는다라는 개념인데, HW level을 추상화한다의 개념이해가 쉽지않다면, HW자원을 논리객체로 만들어서 그 객체로 실제 자원에 덮개처럼 덮는다고 이해하면 좋을 것이다.

이 덮개, 즉 객체층(Virtualization layer)의 특징을 살펴보면 흥미롭다.

  • 실제로는 SW이고, 별도의 설치가 필요하다(AWS이용을 위해 설치하는 리눅스 체계가 대표적).
  • 이 덮개층은 아래 도식과 같이 실제 시스템 자원을 덮는 layer 형태로 표현할 수 있고, 실제 자원에 직접적으로 접근할 수 있어 자원활용에 효과적이고 시스템적 확장에 용이하다.

둘째, Host-Guest Architecture(Hosted Archi-)

Hosted는 "주인을 맡다"라는 뜻이다.

여기서는 Virtual layer가 실제OS(운영체제)에 의해 역으로 주인을 맞이한다(Hosted, 주인을 맡아진 상황)는 의미로, 추상화한 HW객체를 실제자원이 아닌 OS위에 덮는 방식이다.

따라서 위 hypervisor 방식처럼 시스템자원에 직접적으로 접근할 수는 없다. 다시 말해 시스템 자원을 사용하는 주체는 실제 운영체제이고, Virtual layer는 마치 guest처럼 있는 형태이다.

여기서 중요한 점은, 위 두가지 기술 모두 HW Virtualization의 일종이고, 추상화된 객체위에 여러 guest OS(=server)를 실행할 수 있다는 점이다.

물리적인 server 장치의 추가없이도, 여러 server를 구성하여 자원이용 및 비용측면에서 획기적인 절약을 할 수 있게 되었다.

Docker, Container

  • 하나의 실행파일(=Docker image, instance)이 단일 운영체제 내부(=container)에서 실행되도록 하는 기술
  • 단일 운영체제는 Container라 불리우고, 이 Container를 동작하기위해 여러 프로그램이 존재하는데 이 중 대표적인 것이 Docker이다.
  • Docker API가 따로 존재하여, DB처럼 C(생성)/R(읽기)/U(수정)/D(삭제) 할 수 있다.

Container들은 서로 독립적이고, host OS와도 독립적으로 운영되는 단일 운영체제로 운영체제단(OS level)을 추상화한 기술이다.

여러 container들은 독립적이면서 동시에 서로 접근이 가능하고, 이 외 subsystem이나 storage의 control이 유용하다.

이처럼 container들은 독립적이면서, OS level이 추상화된 상태이므로 실제 OS kernel을 control하여 시스템자원 및 시스템함수를 직접적으로 활용할 수 있다(HW level의 추상화보다 더 효율적인 접근 및 사용이 가능).

또한 OS의 종류에 상관없이 어느 운영체제에서나 실행이 가능하다.

Storage 가상화

Storage와 서버사이에 SW/HW 논리계층을 추가하여 DB의 효율적인 제어와 활용을 하도록 하는 기술

I/O 가상화

I/O device와 서버사이에 SW/HW 논리계층을 추가하여 마치 middleWare의 역할을 한다.

서버의 I/O 자원을 물리적으로 분리하고, 효율적인 연결을 하도록 하는 기술.

네트워크 가상화

물리적으로 떨어진 다양한 장비들을 연결하기 위해 사용하는 기술.

라우터, 스위치를 가상화하여 가상 네트워크를 통해 네트워크 연결을 구현한다(SDN/NFV).

2. 백엔드 관점에서 Docker의 중요성

DB관리의 대안이 될 수 있다.

Server처리와 함께 중요한 사항은 Database의 관리이다.

Data 및 사용자가 증가하여 Database의 용량이 커진 상황에서, database 구축(serverless 및 물리적인 저장공간 등)이 힘들 경우 Docker가 그 대안이 될 수 있다.

이러한 Database의 용량한계와 serverless를 통한 관리가 힘들 경우, Data를 image화하여 container를 통해 관리하는 것도 하나의 방법이 될 수 있다.

3. 참조링크

Docker
https://data-flair.training/blogs/docker-container/

Virtualization
https://data-flair.training/blogs/virtualization-in-cloud-computing/

Virtualization layer
http://en.dwhwiki.info/concepts/virtualization-layer

가상화 개념 및 종류
https://gaebom.tistory.com/59
https://kim-dragon.tistory.com/5

post-custom-banner

0개의 댓글