이번 유닛에서는 AWS를 이용한 배포에 대하 학습하고 실습을 진행했다. 학생 때는 마이크로소프트의 Azure를 사용해서 클라우드를 사용해봤는데 AWS를 통해 하는 것은 처음이었다. 실습하면서 어려움을 많이 겪긴 했지만 꽤 좋은 시간이었다. 학습하면서 배운 개념을 정리해보도록 하려고 한다.
AWS (Amazon Web Service)
클라우드 컴퓨팅
기존 방식의 한계
- 주기적인 유지 관리 필요
- 공간의 한계
- 기존 방식의 한계로 데이터 센터가 등장했고, 유휴자원을 대여하는 서비스가 등장하여 클라우드 컴퓨팅이 시작됐다.
Cloud의 특징
- 데이터 센터에서는 서버의 자원과 공간 및 네트워크 환경을 제공하는 이를 온프레미스라고 한다.
- 현대의 클라우드 컴퓨팅은 물리 컴퓨터가 아닌, 가상 컴퓨터를 대여한다는 점이 과거와는 다른데, 이는 가상화 기술의 발전으로부터 비롯됐다. 가상화 기술을 사용하는 클라우드 서비스의 장점 또한 클라우드의 장점이라고 할 수 있으며, 온프레미스 형식과는 다르다.
- 필요할 때마다 컴퓨팅 능력을 유연하게 조절한다
- 사용한 만큼의 요금만 지불한다.
- 다른 컴퓨터로 스냅샷을 이용해, 즉시 이주(migration)가 가능하다
Cloud의 단점
- 클라우드 서비스에 종속되어, 서비스에 영향을 미친다. 클라우드 서비스가 먹통이 되면 우리의 서비스도 먹통이 된다는 말이다.
클라우드 서비스의 형태
- SaaS(Software as a Service) : 클라우드 제공자가 당장 사용가능한 소프트웨어를 제공하는 경우
- PaaS(Platform as a Service) : 클라우드 제공자가 데이터베이스, 개발 플랫폼까지 제공하는 경우
- IaaS(Infrastructure as a Service) : 클라우드 제공자가 가장 컴퓨터까지 제공하는 경우
Deploy(배포)
Deployment
- 개발한 서비스를 사용자가 이용가능하게 하는 과정
- 기본적으로 4단계를 걸쳐서 개발한 서비스를 배포한다.
배포 단계
-
Developement
- Local 컴퓨터 환경에서 개발 및 테스트
- Simple Data(더미데이터)를 이용해 테스트
- 변경사항이 있어도 문제가 없다.
- 모든 구성원이 각자의 환경에서 진행
-
Intergration
- 각자의 컴퓨터에서 개발된 부분을 취합
- 코드 간 conflict가 없는지 확인하는 단계
- 작성한 코드가 다른 코드에 문제를 발생시키지 않는지 확인
-
Staging
- 실제 출시 단계인 Production 단계와 가장 유사한 환경에서 테스트
- 복제된 실제 데이터를 이용해서 테스트
- 모든 관계자들에게 검증하는 단계
-
Production
- 개발된 서비스를 출시하는 단계(개발환경과는 구분된 환경)
- 실제 데이터를 가지고 실제 서비스가 제공되는 단계
환경설정
- 배포에서는 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요하다.
- 작성 코드가 다른 환경에서도 정상 작동하기 위한 것
- 설정을 환경변수(envvars or env)에 저장한다.
- 절대 경로 대신 상대 경로를 이용한다.
- 환경에 따라 포트를 분기할 수 있도록 환경변수를 설정한다.
- Docker와 같은 개발 환경 자체를 통일시키는 솔루션을 사용한다.
EC2
Amazon EC2 (Elastic Compute Cloud)
-
AWS에서 제공하는 클라우드 컴퓨팅 서비스
-
AWS에서 원격으로 제어할 수 있는 가상 컴퓨터를 한 대 빌리는 것
-
EC2는 비용, 성능, 용량 면에서 탄력적인 클라우트 컴퓨터를 제공하는 서비스다.
-
AWS에서 빌리는 컴퓨터 1대를 인스턴스라고 한다.
EC2의 장점
- 구성하는데 필요한 시간이 짧다
- AMI를 통해서 필요한 용도에 따라 다양한 운영체제에 대한 선택이 가능하다. 뿐만아니라 CPU, RAM, 용량까지 쉽게 구성이 가능하다.
AMI(Amazone Machine Image)
- 소프트웨어 구성이 기재된 템플릿
- 이미지 종류로는 단순히 운영체제만 깔려있는 이미지 템플릿을 선택할 수도 있고, 아예 특정 런타임이 설정돼있는 템플릿이 제공되는 경우도 있다.
EC2 -> AMI -> Instance : AMI를 토대로 setting된 PC를 대여한다는 것이다.
본인 같은 경우에는 서버를 돌리기 위해 사용할 것이기 때문에 보안 규칙에서 인바운드 규칙을 잘 세워주는 것이 좋다.
RDS (Relational Database System)
이점
- 데이터 유지보수와 관련된 일들을 RDS에서 전적으로 자동관리한다.
- 사용자가 하는 일은 초기 설정과 데이터베이스의 데이터를 관리하는 일 밖에 없기 때문에 편의성이 좋다.
- 다양한 데이터 베이스 엔진 선택지가 제공된다.
S3(Single Storage Service)
클라우드 스토리지
- 인터넷 공간에 데이터를 저장하는 저장소
- 뛰어난 접근성
- S3는 AWS에서 제공하는 클라우드 스토리지 서비스다.
이점
- 높은 확장성 : 데이터를 무한히 저장 가능하다.
- 강력한 내구성
- 리전에 의한 가용성 보장
- 다양한 스토리지 클래스를 제공한다.
- S3 Standard
- 가장 일반적인 스토리지 클래스
- 데이터에 자주 액세스 해야할 경우 사용
- 보관 비용이 높기 때문에 데이터를 오래 보관하기에는 비효율적이다.
- S3 Glacier
- 데이터의 장기보관 목적
- 데이터의 보관 비용이 저렴
- 정적 웹사이트 호스팅이 가능하다.
- 정적 파일 : 서버의 개입없기 클라이언트에 제공될 수 있는 파일
- 웹 호스팅 : 서버의 한 공간을 빌려주어 웹 사이트의 배포, 운영이 가능하게 해주는 서비스
- S3에서는 버킷을 통해 정적 웹사이트 호스팅이 가능하다.
리전(region)
- AWS에서 클라우드 서비스를 제공하기 위해 운영하는 물리적인 서버의 위치
- 리전 안에 적힌 수는 가용 영역의 수다.
- 가용 영역이란 각 리전 안에 존재하는 데이터 센터(IDC)이다.
S3의 핵심 개념
버킷
- 파일은 담는 바구니(최상위 디렉토리)
- 무한이 많은 파일 저장 가능
- 버킷의 이름은 각 리전에서 고유해야 한다.
- 버킷의 정책을 생성하여 액세스 권한 부여가 가능하다.
객체
- 버킷에 담기는 파일
- 파일과 메타데이터(객체의 생성일, 크기, 유형과 같은 객체의 정보가 담긴 데이터)로 구성
- 모든 객체는 고유한 키를 갖는다.
- URL 주소를 통해서 객체에 접근이 가능하다.
- URL 주소형식 :
https://[버킷이름].s3.amazonaws.com/[객체의 키]
deploy strategy(배포 전략)
클라이언트 배포
- S3를 이용해서 제공가능하다. 클라이언트를 정적 파일로 빌드하여 배포하기 때문
- 빌드
- 불필요한 데이터를 없애고, 통합/압축하여 배포하기 최적화된 상태를 만드는 것
- 데이터의 용량이 줄어들고 웹 사이트 로딩 속도가 빨라진다.
- 웹 앱은 배포 가능한 정적 파일의 형태로 만들어 줘야한다.
- Aws에서 제공하는 CDN 서비스인 CloudFront를 통해서 사용자에게 콘텐츠를 더 빠르게 배포할 수 있다.
Server Application 배포
- 안정적으로 서비스를 제공학시 위해 가상의 PC(Aws EC2)를 빌려 서버 코드를 구동한다.
데이터베이스 배포
- RDS 서비스를 통해 EC2로 배포된 Server Application의 데이터를 저장, 제공하는 데이터 베이스를 배포할 수 있다.
DNS
- AWS의 Route 53 서비스를 이용하면 직관적인 도메인 주소를 통해서 서비스에 접근하도록 할 수 있다. 이와 CloudFront를 같이 이용해 https의 우리가 아는 주소형태로 만들 수 있다.
배포 실습은 프리티어로 실습을 진행했으나, 오래 사용하거나 까먹으면 요금 폭탄이 나올 수 있기 때문에 모두 삭제를 해두었다. 결제 내역을 잘 확인하는 것이 요금 폭탄을 방지하는 방법이다.
Reference