가상 머신(Virtual Machine)
전통적 배포 방식
- 물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식. 계정을 나눠 여러명의 사용자가 이용할 수 있도록 할 수 있지만 어떤 프로그램을 설치했을 때 다른 앱에 영향을 미침
가상화 배포 방식
- 가상 머신을 기반으로 배포하는 것을 말함. 가상 머신이란 컴퓨터의 하드웨어를 소프트웨어적으로 구현한 것을 말함
- 계정을 나누는 것이 아니라 한대의 컴퓨터를 가지고 여러 개의 OS를 구동할 수 있게 되며 CPU, RAM을 물리적으로 갈아끼는 것이 아니라 설정만으로 이를 수행할 수 있게 됨
가상 머신 아키텍처
Hypervisor
- 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해 주는 중간 계층을 의미하며 이 위에 여러 개의 가상 머신을 구축할 수 있고 가상 머신 위에 OS, 그 위에 앱이 올라가는 형태로 가상 머신을 독립적으로 수행할 수 있음
- 클라우드는 이러한 가상화라는 기술 때문에 한 대의 하드웨어로 여러명의 사용자들에게 독립적으로 클라우드 서비스를 지원할 수 있음
- 독립적으로 가상 머신이 구축되어 서로 독립적이며, 한 가상 머신 위의 프로그램은 다른 가상 머신 위의 프로그램에서 볼 수 없는 형태를
샌드박스
되었다라고함
- 다만, OS가 공유 안되기 때문에 가상 머신에 각 각 OS를 설치해야 하는 단점이 있음
오프 프레미스(Off-Premise)
- 클라우드 서비스는 내가 아닌 다른 회사의 공급자가 호스팅하고 인터넷을 통해 사용자에게 제공되는 인프라, 플랫폼 또는 소프트웨어를 말함
- 이를 이용하면 자체 인프라나 하드웨어 설치 없이도 애플리케이션과 리소스를 쉽고, 싸게 이용 가능함
분산된 서버를 기반으로 클라우드를 이용하는 모습
이렇게 되면 서버를 직접 구매할 때 고려해야할 전력, 위치, 서버 세팅, 확장성을 고민하지 않고 서비스 운영에만 집중할 수 있음. 이를 오프 프레미스(Off-Premise)
방식이라고 함
온 프레미스(On-Premise)
- 기업이나 개인이 자체 시설에서 보유하고 직접 유지 관리하는 프라이빗 데이터 센터(IDC)를 의미
ex) 네이버 데이터 센터
IaaS, PaaS, SaaS
IaaS(Infrastructructur as a Service)
- 인프라형 클라우드 서비스로 클라우드가 단지 인프라를 제공함
- node.js, MongoDB 등을 개발자가 직접 설치해야하는 대신 특정 서비스에 종속되지 않음
- ex) AWS의 EC2, NCP
- 플랫폼형 클라우드 서비스로 Node.js, MongoDB 등이 설치되어있으며 그저 클릭을 통해 해당 서비스를 이용할 수 있음
- 모니터링, CI/CD를 제공함
- ex) heroku
SaaS(Software as a Service)
- 서비스형 클라우드 서비스로 완전한 서비스를 클라우드 서비스로부터 제공 받아 사용함
- ex) 구글 DOCS
IaaS와 PaaS 장・단점 비교
| IaaS | PaaS |
---|
유연성 | 높음 | 낮음 |
이식성 | 높음 | 낮음 |
운영비 효율 | 낮음 | 높음 |
컨테이너(Container)와 도커(Docker)
What is a Container?
- 애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 코드와 모든 종속성을 패키징하는 소프트웨어의 표준 단위
- 컨테이너는 OS를 공유하기 때문에 빠르고, 경량화되어 있으며 격리성도 뛰어남. 그러나 OS에 문제가 생기면 다른 앱에도 영향을 미칠 수 있음
What is Docker??
- 애플리케이션을 컨테이너(Container)라는 격리된 환경에서 실행할 수 있게 하는 오픈 소스 플랫폼
- 각각의 컨테이너는 소프트웨어를 실행하는데 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리 등)을 포함하고 있어, 어떤 환경에서도 일관된 방식으로 실행될 수 있음
도커의 특징
특징 | 설명 |
---|
경량성 | 컨테이너는 가상 머신(VM)보다 더 적은 자원을 사용하면서 격리된 환경을 제공. 이는 하나의 시스템에서 여러 컨테이너를 효율적으로 실행할 수 있음을 의미 |
이식성 | 컨테이너는 어디서든 동일하게 실행됨. 개발자가 로컬에서 개발하고 테스트한 컨테이너를, 서버나 클라우드에서도 변경 없이 실행할 수 있음 |
버전 관리와 재현성 | 도커 이미지는 애플리케이션과 모든 종속성을 포함하고 있어, 소프트웨어의 버전을 쉽게 관리하고 정확하게 재현할 수 있음 |
자동화된 배포 | 도커를 사용하면 애플리케이션의 배포 및 확장 과정을 자동화할 수 있음. 이는 CI/CD(지속적 통합/지속적 배포)와 같은 현대적인 소프트웨어 개발 방식과 잘 맞음 |
적용 분야 | 도커는 개발자들 사이에서 널리 사용되며, 마이크로서비스 아키텍처, 클라우드 네이티브 애플리케이션 등 현대적인 소프트웨어 개발과 운영에 필수적인 도구로 자리잡고 있음 |
도커가 컨테이너를 만드는 과정
- 도커 파일 : 패키지, 환경 변수 설정 등을 기록한 파일
👉🏻 이를 빌드해 도커 이미지로 변환
- 도커 이미지 : 컨테이너 실행에 필요한 파일과 설정값, 데이터 등을 포함한 상태값이며 불변함. 하나의 이미지에서 여러개의 컨테이너를 생성할 수 있으며 컨테이너의 상태와는 무관하게 이미지는 그대로 존재함
👉🏻 예를 들어, 1대의 서버에 환경설정해야 한다면 미리 만들어 놓은 도커 이미지를 다운받아서 이를 통해 컨테이너만 만들면 끝
- 도커 컨테이너 : 컨테이너가 실행시키면 도커 이미지에 설정된 프로그램, 데이터 등이 실제 컴퓨팅 자원과 연결됨