Cloud Computing
- 서버의 자원/공간/네트워크 환경을 빌려서 사용하는 것
- 기존의 On-premise(온프레미스) 방식과는 달리 물리적인 컴퓨터가 아닌 가상 컴퓨터를 대여하는 방식
- IT 리소스를 인터넷을 통해 제공하고, 사용한 만큼 비용을 지불하는 방식으로 운영
- 필요에 따라 빌리는 환경의 성능을 조절 가능
- 컴퓨터의 스냅샷(이미지)을 이용해 다른 컴퓨터로 즉시 이주(migration) 가능
- On-demand(주문형) 방식
단점
- 운영 환경 자체가 클라우드 제공자에게 종속되기 때문에, 클라우드에 문제가 생길 경우 사용자가 배포 중인 서비스에도 영향이 미친다.
- 백엔드 구성이 특정 회사의 기술로만 구성되어야만 하는 경우가 생길 수도 있다.
On-demand 방식
- 사용자의 요구 사항에 따라 즉시 제공/공급하는 방식
- 수요에 초점을 맞춘 서비스로, 소비자가 원하면 언제든 제공할 수 있다.
On-premise
- 클라우드 같은 원격 서비스를 사용하는 것이 아닌, 기업에서 자체적으로 보유한 데이터 센터에 서버를 직접 설치해 운영하는 것
대표적인 클라우드 서비스의 형태
SaaS(Software as a Service)
- 호스팅되는 소프트웨어를 웹 브라우저 등의 클라이언트로 사용 가능하게 하는 서비스
- Paas와 Iaas의 위에 올라가게 되는 소프트웨어
PaaS(Platform as a Service)
- 웹에서 개발 플랫폼을 빌려 쓸 수 있게 하는 서비스
IaaS(InfraStructure as a Service)
웹 서버나 애플리케이션 서버로 사용할 환경을 호스팅 업체에서 빌리는 것
Deployment
- 개발한 프로그램 등의 서비스를 사용자가 사용할 수 있게 하는 일련의 과정
사전적 의미: 전개, 배치
개발적(?) 의미: 배포
Development | 1. local 컴퓨터 환경에서 개발 및 테스트 2. Sample Data 사용 3. 변경 사항이 생겨도 큰 문제 없음 |
Integration | 1. 각 환경에서 개발된 부분 취합 2. 코드 간 충돌발생 여부 확인 |
Staging | 1. Production 단계와 가장 유사한 환경에서 테스트 2. 복제된 실제데이터로 사용 3. 모든 관계자들(마케팅팀, 디자인팀 등)이 검증 |
Production | 1. 서비스를 출시하는 단계 2. 개발환경과는 구분된 사용자가 접속할 수 있는 환경 이용 3. 실제 데이터 사용 |
- Development와 Production 환경은 서로 다를 수 있기 때문에, 환경의 차이를 이해하고 환경 설정을 코드와 분리해서 사용하는 것이 중요하다.
- 작성한 코드가 다른 환경에서 정상적으로 작동하게 하려면,
- 설정을 environment variable(환경변수)에 저장해야 한다.
환경변수는 설정파일과는 달라서 코드 저장소에 딸려 올라갈 확률도 적고, 코드 변경 없이 쉽게 수정할 수 있다. - 절대경로 대신 상대경로를 사용한다.
- Docker 등과 같은 가상화 도구를 통해 환경 자체를 메타데이터로 담아 모든 개발환경을 통일시킨다.
- 설정을 environment variable(환경변수)에 저장해야 한다.
- 어떠한 인증정보의 유출 없이 코드가 오픈 소스가 될 수 있다면, 이 애플리케이션은 모든 설정이 정상적으로 코드와 분리되어 있다고 할 수 있다.
Amazon EC2(Elastic Compute Cloud)
- AWS(Amazion Web Service)에서 제공하는 클라우드 컴퓨팅 서비스
= 아마존에서 컴퓨터 한 대 빌리기 - AWS에서 비용, 성능, 용량 측에서 탄력적인(elastic) 클라우드 컴퓨터를 제공하는 서비스
- AWS에서 빌리는 PC를 Instance라고 한다.
- OS/CPU/RAM/용량 등을 손쉽게 구성 가능
- 빠르게 PC 구성 가능(클릭 몇 번이면 뚝딱)
AMI(Amazon Machine Image)
- Instance를 생성하는데 필요한 소프트웨어 구성이 기재된 템플릿
- OS/RAM/런타임 등이 정해져 있는 PC setting(image)을 사용용도에 맞게 선택할 수 있다.
AWS EC2 인스턴스 생성하기 = AMI를 토대로 구성된 컴퓨터를 빌리는 것
RDS(Relational Database Service)
- AWS에서 제공하는 관계형 데이터베이스 서비스
- EC2 인스턴스에 데이터베이스를 설치해서 데이터를 관리하려면 엔진 설치, 버전 관리, 데이터 백업 등을 사용자가 직접 해야 하지만, RDS를 사용하면 데이터베이스 유지 보수와 관련된 작업들을 RDS에서 자동 관리해준다.
- ORACLE, MySQL, MariaDB 등 필요한 데이터베이스 엔진 선택 가능
S3(Simple Storage Service)
- AWS에서 제공하는 클라우드 스토리지 서비스
- 높은 확장성(필요한 만큼 스토리지 규모 확장 가능)
- 효율적인 비용 지불(스토리지를 사용한 만큼만 비용 지불)
- 높은 내구성(저장된 파일 유실 가능성 낮음)
- 높은 가용성(저장된 파일을 정상적으로 이용할 수 있는 시간이 길다)
- 목적에 따른 다양한 스토리지 클래스 제공
- Standard 클래스
- 범용적인 목적에 사용
- 빠른 속도로 데이터에 접근 가능
- 보관 비용이 높아 데이터를 오래보관하기에는 부적합
- Glacier 클래스
- 데이터 보관 비용이 상대적으로 매우 저렴하기 때문에 장기관 보관에 사용
- 데이터 엑세스 속도 느림
- Standard-IA, One Zone-IA, S3 Glacier Deep Archive ...
- Standard 클래스
- 정적 웹 호스팅 가능
- 버킷에 정적 파일을 업로드하고 버킷을 정적 웹사이트 호스팅 용도로 구성해서 정적 웹사이트 배포 가능
정적(static) 파일: 서버의 개입 없이 생성된 파일
동적(dynamic) 파일: 클라이언트의 요청에 따라 생성해주는 파일
호스팅(hosting): 서버의 한 공간을 임대해 주는 서비스
버킷(bucket)
- 파일(객체)을 담는 바구니(파일을 저장하는 최상위 디렉토리)
- 많은(무한한) 양의 파일 저장 가능
- 각 Region에서 버킷의 이름은 고유해야 함
- 버킷 정책을 생성해서 다른 유저의 접근 권한 수정 가능
객체
- 버킷에 담기는 파일
- 파일과 메타데이터로 구성
- 모든 파일은 고유한 키를 가짐(key-value 쌍으로 데이터 저장), 키를 통해 파일 검색 가능
- 파일에는 실제 데이터, 메타데이터에는 객체의 생성일/크기/유형 등의 정보를 저장
- 모든 객체는 "http://[버킷이름].S3.amazonaws.com/[객체의 키]" 의 형태로 URL 주소를 가짐
- URL 주소로도 원하는 데이터에 접근 가능
IDC(Internet Data Center)
EC2, RDS, S3 모두 높은 가용성/내구성을 가질 수 있는 이유를 지도에서 찾아볼 수 있다.
- 주황색 동그라미: Region(AWS에서 클라우드 서비스를 제공하기 위해 운영하는 물리적인 서버의 위치)
- 주황색 동그라미 속 숫자: region에 위치한 가용 영역(Availability Zone - region 안에 존재하는 IDC)의 수
가용 영역은 각각 개별적인 위치에 존재하기 때문에 한 곳에 문제가 생기더라도 다른 가용 영역에서 백업해둔 데이터를 활용해 문제없이 서버가 돌아가게 된다.
3 Tier-Architecture(Client, Server, Database) deploy strategy
로컬 환경에서 클라이언트/서버/데이터베이스를 확인하는 것에서 그치는게 아닌, 외부 사용자가 개발된 서비스에 접속할 수 있게 하기 위해서는 서비스를 배포해야 한다.
클라이언트
- AWS의 S3 서비스를 통해 사용자들에게 제공 가능
- 로컬 환경에서 자체 개발 서버를 통해 클라이언트 앱을 실행 시키는 것처럼 EC2 Instance를 사용해야 한다. ❌
클라이언트 앱을 정적 파일로 만들어서 배포한다.⭕ - Build(불필요한 데이터 제거, 데이터 통합/압축을 통해 배포하기에 최적화된 상태를 만드는 것) 필요
(빌드를 통해 데이터 용량이 줄고 웹 사이트 로딩속도가 빨라짐) - CloudFront를 통해 더 빠른 배포 가능
CloudFront
- AWS에서 제공하는 CDN(Content Delivery Network) 서비스
- 각 region의 데이터센터에 데이터를 분산시켜 저장해 두었다가 가까운 지역에서 데이터를 넘겨주는 방식
서버
- AWS EC2 서비스를 통해 사용자들에게 제공 가능
데이터베이스
- RDS 서비스를 이용해 데이터베이스(EC2를 통해 배포된 Server Application의 데이터를 저장/제공하는) 배포 가능
Route53
- AWS에서 제공하는 DNS
- 더찾아봐야함
'🌩️Cloud' 카테고리의 다른 글
Scale up & Scale out (0) | 2022.12.09 |
---|---|
Forward Proxy & Reverse Proxy (0) | 2022.12.09 |
배포 자동화 with AWS (0) | 2022.12.07 |
Docker 基本 (0) | 2022.12.06 |
AWS를 통한 애플리케이션 배포 - 튜토리얼 (0) | 2022.12.05 |