Chapter1. Amazon Web Service
📌 클라우드 컴퓨팅
✨ 등장배경
- 기존 서버의 방식 : 서버실에 컴퓨터 배치하고 인터넷을 연결하여 서비스 제공
- 서버 요청 수용 능력이 한계에 도달했다면? 같은 공간에 컴퓨터를 추가
- 단점
- 서버실 주기적인 관리 필요 = 인력 및 비용 증가
- 공간의 한계
- 온프레미스(On-premise) : 이러한 이유로 데이터 센터 건물 증축 & 데이터 센터의 유휴 자원을 대여하는 서비스 등장
→ 서버의 자원과 공간, 및 네트워크 환경을 제공을 빌려 사용하는 클라우드 컴퓨팅의 시초
✨ 클라우드 등장
-
서버의 자원과 공간 및 네트워크 환경 제공
-
장점
- 필요할 때마다 컴퓨팅 능력을 유연하게 조절
- 고정적인 비용이 들어가는 온프레미스와 달리 사용한 만큼의 요금 지불
- 컴퓨터의 스냅샷(이미지)을 이용해 다른 컴퓨터로 즉시 이주 가능
-
단점
- 운영 환경이 클라우드 사업자(vendor)에게 종속됨 = 백엔드 구성을 특정 회사의 기술로만 구성해야하는 경우 발생
-
클라우드 목표 : 모든 것을 서비스화 한다.
-
대표적 클라우드 서비스
- SaaS(Software as a Service) : 클라우드 제공자가 당장 사용가능한 소프트웨어를 제공하는 경우
- PaaS(Platform as a Service) : 클라우드 제공자가 데이터베이스, 개발 플랫폼까지 제공하는 경우
- IaaS(Infrastructure as a Service) : 클라우드 제공자가 가상 컴퓨터까지 제공하는 경우
📌 Deploy
배포 : 개발한 서비스를 사용자들이 이용 가능하게 하는 일련의 과정
- Development 환경과 Production 환경은 서로 다를 수 있다.
- 여러 명이 작업하는 프로젝트, 각자 다른 node 버전, 엔드포인트도 제각각...
- 따라서 배포에선 환경 설정을 코드와 분리하는 것이 중요.
- 작성한 코드가 다른 환경에서 작동할 수 있게 하려면?
- 절대경로 대신 상대경로 사용
- 설정을 환경 변수(env)에 저장
- 환경 변수 : 코드 변경 없이 배포 때마다 쉽게 변경 가능
설정 파일과 달리, 코드 저장소에 잘못 올라갈 가능성 낮음
- Docker와 같은 가상화 도구로 개발 환경을 통일 시키기
📌 Amazon EC2(Elasic Compute Cloud)
Elastic : 탄력(신축성)있는, 유연한.
아마존 웹 서비스에서 제공하는 클라우드 컴퓨팅 서비스
💡 웹서버를 설치하고 이를 통해 사용자가 요청하는 서비스를 제공
- 클라우드 컴퓨팅 : 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공하는 서비스
- AWS에서 가상의 컴퓨터를 한 대 빌리는 것과 같은 이치
- 장점
- 구성하는데 필요한 시간이 짧음 : 클릭만으로 PC 구성 가능
- 다양한 운영체제 선택 가능 : AMI 템플릿 제공으로 필요에 따라 손쉽게 운영체제 선택
- CPU, RAM, 용량 구성 가능
- Instance : AWS에서 빌리는 1대의 컴퓨터를 의미하는 단위
- 인스턴스 생성 : AWS에서 컴퓨터를 빌리는 것
즉, EC2 인스턴스 생성은 곧 AMI를 토대로 setting된 PC를 빌리는 것,
AMI(Amazon Machine Image)
- 인스턴스를 생성하는데 필요한 소프트웨어 구성이 포함된 템플릿
- 사용용도에 따라 운영체제, 런타임 등이 구성된 Setting 선택 가능
📌 RDS(Relational Database Service)
AWS에서 제공하는 관계형 데이터베이스 서비스
다양한 데이터베이스 엔진을 선택하여 이용 가능
| EC2 | RDS |
---|
It's like... | 개인 소유 차량 | 렌터카 회사에서 대여한 차량 |
데이터 관리방식 | 인스턴스에 관계형 데이터베이스 엔진을 설치해서 관리 | RDS를 통해 관리 |
데이터베이스 규모 확장 | 직접 관리 | AWS가 관리 |
가용성, 내구성 확보 | 직접 관리 | AWS가 관리 |
데이터 백업 | 직접 관리 | AWS가 관리 |
운영체제 설치/관리 | 직접 관리 | AWS가 관리 |
기반 시설 구축 | 직접 관리 | AWS가 관리 |
📌 S3(Simple Storage Service)
- 클라우드 스토리지 : 인터넷 공간에 데이터를 저장하는 저장소
- ex. 구글의 Google Drive, 네이버의 MYBOX 같은 서비스
AWS에서 제공하는 클라우드 스토리지 서비스
장점
- 필요한 만큼 스토리지 규모 확장/축소 가능
- 사용한 만큼만 비용 지불하므로 효율적
- 높은 내구성 : 저장된 파일 유실 가능성 적음
- 높은 가용성 : 스토리지에 저장된 파일을 정상적으로 사용할 수 있는 시간이 길어짐
다양한 스토리지 클래스 제공
- Standard 클래스 : 일반적으로 사용되는 스토리지 클래스.
데이터 액세스 요청 처리속도가 빠름 / 보관목적은 비효율적
- Glacier 클래스 : 데이터 장기보관 목적.
저장된 데이터에 액세스하는 속도는 느림 / 데이터 보관 비용은 저렴
버킷을 통해 정적 웹 사이트 호스팅 가능
- 정적 파일 : 서버의 개입 없이 클라이언트에 제공될 수 있는 파일
- 웹 호스팅 : 서버의 한 공간을 빌려줘 웹 사이트 배포, 운영이 가능하게 만들어주는 서비스
- 버킷과 객체
AWS가 높은 가용성, 내구성을 보장할 수 있는 이유
- 리전(Region) : AWS에서 클라우드 서비스를 제공하기 위해서 운영하는 물리적인 서버의 위치
- 가용 영역(Availability Zone) : 각 리전 안에 존재하는 데이터 센터(IDC)
- 각각 개별적인 위치에 떨어져서 존재
- 한 곳의 가용영역이 가동 불가능해져도 다른 가용영역에 백업을 해놓은 데이터를 활용해 문제없이 서버 가동 가능
📌 배포 전략
- 사용자에게 Client를 어떻게 제공할지
- Client를 받은 사용자가 서비스를 이용하기 위한 요청을 처리할 Server를 어떻게 제공할지
- Server의 데이터를 저장하고 제공할 Database는 어떻게 제공할지
✨ Client 배포
S3 이용
- 클라이언트 앱을 정적파일로 빌드하여 제공
- 빌드 : 불필요한 데이터를 없애고, 퍼져있는 데이터를 통합/압축하여 배포하기 최적화된 상태를 만드는 것
- 데이터의 용량이 줄어들고, 웹 사이트 로딩속도가 빨라진다.
- 일반적인 의미의 빌드 : 소스코드를 실행 가능한 번들로 변환하는 컴파일 과정
- 웹 앱은 배포 가능한 정적 파일의 형태로 만들어줘야 한다.
- React로 정적 파일 만들기 :
npm run build
CDN 이용
- AWS에서 제공하는 CDN 서비스인 CloudFront를 통해서 각지의 데이터 센터에 데이터를 분산시켜 저장해뒀다가 가까운 지역에서 데이터를 주는 방식으로 사용자에게 콘텐츠를 빨리 배포할 수 있다
✨ Server Application 배포
EC2 이용
- 가상의 PC(AWS EC2)를 빌려 서버를 구성하고 서비스 제공 가능
✨ Database 배포
RDS 이용
- RDS서비스를 이용해 EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스를 배포 가능
도메인 이름 시스템(DNS)
- AWS의 Route 53 : 직관적인 도메인 주소를 통해 서비스에 접근 가능.