가상 머신
가상 머신은 클라우드의 기반 기술이다.
전통적인 배포 방식은 물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식인데, 계정을 나눈다면 여러명의 사용자가 이용할 수 있지만, 어떤 프로그램을 설치했냐에 따라 다른 앱에 영향을 미친다.
가상화 배포방식은 가상머신을 기반으로 배포하는 것을 말하며, 가상 머신이란 컴퓨터의 하드웨어를 소프트웨어적으로 구현한 것을 말한다. 그러니까 계정을 나누는게 아니라 한 대의 컴퓨터로 여러개의 OS를 구동할 수 있게 되어 CPU, RAM을 물리적으로 갈아끼는 것이 아니라 설정만으로 수행할 수 있게 된것이다. 다만 OS가 공유가 안되기 때문에 가상머신에 일일히 OS를 설치해야 하는 단점이 있긴 하다 ^^*
클라우드
클라우드 서비스는 내가 아닌 다른 회사의 공급자가 호스팅하고 인터넷을 통해 사용자에게 제공되는 인프라, 플랫폼 또는 소프트웨어를 말한다.
호스팅(Hosting)이란 서버 컴퓨터의 전체 또는 일정 공간을 이용할 수 있도록 임대해 주는 서비스를 말한다.
Iaas ( Intrastructure as a Service )
서버의 물리적인 부분은 기업에 돈을 내고 이용하며 소프트웨어를 직접 관리하는 방식이다. 즉, 클라우드가 단지 인프라를 제공한다. Node.js, MongoDB 등을 개발자가 직접 설치해야 하는 대신 특정 서비스에 종속되지 않는다.
아마존 AWS의 EC2, S3나 구글의 GCP 등이 있다.
장점 (+)
- 트래픽에 따라 서버의 가용량을 직접 증감시킬 수 있으므로 자유도가 높으며 호스팅 지식이 높아지면 다른 툴과의 전환이 쉽다는 장점이 있다.
단점 (-)
- 사용자를 예상하고 그에 맞는 용량의 서비스를 사전에 구매하여 지불해야 하므로 손실이 날수도 있다.
컨테이너
컨테이너는 애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 코드와 모든 종속성을 패키징하는 소프트웨어의 표준 단위이다.
컨테이너는 OS를 공유하기 때문에 빠르고, 경량화되어있으며 격리성도 훌륭하다. 그러나 OS에 문제가 생기면 다른 앱에도 영향을 미칠 수 있다.
도커 ( Docker )
도커는 컨테이너에 필요한 기능을 거의 모두 제공하는 플랫폼이다. 애플리케이션 구동에 필요한 환경설정관련 절차를 도커파일(Dockerfile)에 작성하고 그 후 빌드를 하면 도커이미지가 생성되고 도커이미지를 실행시키면 도커 컨테이너가 만들어진다.
패키지, 환경변수설정 등을 기록한 파일인 도커파일을 빌드하면 도커이미지로 변환되고 이 도커이미지는 컨테이너 실행에 필요한 파일과 설정값, 데이터 등을 포함된 상태값으로 불변한다. 하나의 이미지에서 여러개의 컨테이너를 생성할 수 있다. 컨테이너가 실행되면 도커이미지에 설정된 프로그램, 데이터 등이 실제 컴퓨팅자원과 연결된다.
AWS (Amazon Web Service)
아마존에서 제공하는 클라우드 서비스이다.
AWS같은 클라우드 서비스는 직접 물리적 기기를 관리할 필요가 없이 사용량에 따른 유연한 비용과 서버의 스펙을 원격으로 조절할 수 있는 등의 편리한 점이 있다.
S3 (simple storage service)
S3는 정적 웹사이트 호스팅으로 클라우드 공간에 데이터(파일)를 저장하고 사용자에게 제공해주는 온라인 스토리지 웹 서비스이다.
AWS 콘솔을 통해서 업로드, 다운로드가 가능하고 http를 통한 접근이 가능하기 때문에 브라우저를 통한 서비스가 가능하다. 일반적인 시스템과는 파일(또는 데이터) 다르게 key, value 조합인 객체 타입의 구조로 구성된다. key는 파일 혹은 데이터 이름 value 파일 혹은 데이터 그 자체를 말한다.
장점 ( + )
1. 정적인 html이나 이미지 등을 제공하는데 용이하다.
2. 대량 트래픽에 대응하기 위한 시스템 구축이 필요없다.
3. 권한 및 캐싱 전략을 쉽게 추가 할수 있다.
정적 웹 사이트 호스팅
- 언제, 어디서 , 누가 접속해도 항상 정해진 리소스만을 보여주는 웹 사이트.
- 프로그래머가 미리 작성해놓은 파일들을 서버에 저장해놓고, 요청이 들어올때마다 별도의 가공 없이 그대로 클라이언트의 브라우저에 전달해주는 것이다.
동적 웹 사이트
-변화하는 데이터를 받아와서 상황에 따라 매번 다른 내용을 보여주는 웹 사이트이다.
EC2 (Elastic compute cloud)
AWS 에서 제공하는 가상 컴퓨터 머신이라고 생각하면 된다. EC2라는 가상의 공간에 원하는 OS나 프로그램을 설치하고 서버를 구축할수 있다. 기존의 웹 서버를 구축하기 위해서 사용한다.
기존에는 웹서비스를 제공하기 위해서 직접 물리적인 서버를 구축하거나 호스팅 업체에서 제공하는 서버의 서비스를 사용한다. 컴퓨터의 용량이나 트래픽을 시작부터 정하고 특정 공간을 임대하는 방식이다 보니 사용량이 몰릴때 유연하게 대처하기 어렵다. ( 프리티어인은 환경구축 다했는데 용량 부족하다고 하면 진짜 눈물남 )
AWS 에서 EC2를 사용하게 되면 웹 서비스 제공자들은 실제 물리적 서버나 시스템에 대해서 구축하고 신경 쓸 필요가 없다. 트래픽이 몰리거나 컴퓨터 머신의 업그레이드가 필요하면 AWS 웹 콘솔에서 바로 기능을 올리거나 용량을 증가하는 등의 유연한 대처가 가능하다. 인스턴스라는 것은 EC2 내부 1대의 가상 컴퓨터를 말한다.
S3가 거대한 하드디스크라면, EC2는 하나의 거대한 컴퓨터를 빌린다고 생각하면 된다.
EC2에다가 특정 소프트웨어나 어플리케이션을 설치하여 실행시킬 수 있다.
EC2는 말 그대로 컴퓨터를 하나 통째로 빌리는 것이므로 서버를 밑바닥부터 설정할 수 있다.
그래서 보통 서버 로직을 올려놓고 구동시켜놓는 서버 컴퓨터 용도로 사용한다.
프론트 서버를 EC2로 구성하는 경우는 대개 프론트 서버에서 로직을 돌려야 하는 경우, 즉 SSR이다.
SSR을 위해서는 렌더링 로직을 프론트 서버에서 구동하여 그 결과로 생성되는 HTML 파일과 JS파일을 클라이언트(브라우저)에게 전송해야 하기 때문이다.
■ 클라이언트 사이드 렌더링(CSR)의 경우는
웹 페이지 기본 화면(정적 웹 페이지)을 받아올 때는 클라이언트(브라우저) ↔ 프론트엔드 서버가,
API 요청을 할 때는 클라이언트(브라우저) ↔ 백엔드 서버 ↔ 데이터베이스가 소통을 한다.
■ 서버 사이드 렌더링(SSR)을 할 때는
클라이언트(브라우저) ↔ 프론트엔드 서버 ↔ 백엔드 서버 ↔ 데이터베이스 구조로 소통을 한다.
요약
S3 = 거대한 하드디스크
EC2 = 하나의 거대한 컴퓨터
SSR = 서버쪽에서 렌더링 준비를 끝마친 상태로 클라이언트에 전달
CSR = 렌더링이 클라이언트에서 일어남
참고
https://iborymagic.tistory.com/m/94