Amazon Web Service
Cloud Computing
- Cloud Computing 이전에는 직접 서버를 배치하고 인터넷을 연결하여 서비스를 제공하였음
- 서버의 수용 능력이 한계에 도달하면, 컴퓨터 한 대의 성능을 높이거나, 컴퓨터 자체를 추가하여 해결
- 기존 방식의 한계
- 주기적인 관리 필요, 서버의 관리 및 확충에 인력 및 비용이 투입되야 함
- 공간의 한계, 서버실에 컴퓨터를 추가적으로 배치하다보면 공간이 부족해 질 수 있음
- 일부 거대 기업은 데이터 센터라는 거대한 건물을 세우고, 유휴 자원을 대여하는 서비스가 등장하기 시작
- 데이터 센터는 서버의 자원과 공간 및 네트워크 환경을 제공함(온프레미스)
- 현대의 클라우드 컴퓨팅은, 물리적 컴퓨터가 아닌 가상의 컴퓨터를 대여하는 방식(가상화 기술, Virtualization)
- 가상화 기술을 사용하는 클라우드 서비스는 기존의 온프레미스 형식과 달리 다음과 같은 장점이 있음
- 필요할 때마다 컴퓨팅 능력을 유연하게 조절할 수 있음
- 고정적인 비용이 들어가는 온프레미스와는 달리, 사용한 만큼의 요금만 지불하면 됨
- 컴퓨터 스냅샷(이미지)를 이용해 다른 컴퓨터로 즉시 이주(migration)가 가능함
- 클라우드의 단점
- 클라우드 서비스에 종속, 클라우드 서비스에 문제가 생기면 내 서비스 운영에도 영향이 미침
- 운영 환경이 특정 클라우드 사업자(vendor)에 종속된다면, 벡엔드 구성 자체 기술도 특정 회사 기술로만 구성해야만 하는 경우가 발생
- 클라우드 사업자의 기술 및 인프라 자체에 대한 이해가 필요해짐
- 클라우드 서비스의 형태
- Saas(Software as a Service): 당장 사용 가능한 소프트웨어를 제공하는 경우
- Paas(Platform as a Service): DB, 개발 플랫폼까지 제공하는 경우
- Iaas(Infrastructure as a Service): 가상 컴퓨터까지 제공하는 경우
- Iaas: AWS의 EC2
- Paas: Google App Engine, GitHub
- Saas: Google Cloud, Naver Colud
Deploy
- Deployment: 배포, 개발한 서비스를 사용자가 이용가능하게 하는 과정, 보통 4단계로 진행
- Development: 각자 로컬에서 코드를 작성하고 테스트하는 과정, 개발 단계, 실제 데이터가 아닌 더미 데이터를 이용해서 테스트 진행
- Intergration: 각자 작성한 코드를 합치는 과정, 코드가 다른 코드를 침범해서 오류를 일으키지 않는지, 코드 간에 conflict가 있지는 않은지 확인하는 과정을 거침
- Staging: 실제 출시 단계와 가장 유사하고 다양한 환경에서 테스트 진행, 서비스 관련 부서(마케팅팀 또는 디자인팀)의 확인 과정을 거침
- Production: 개발된 서비스를 출시하는 단계, 사용자가 접속할 수 있는 Production 환경에서 코드를 구동하고 서비스를 제공함, 실제 데이터를 가지고 서비스가 운영, 문제가 생기면 안 되는 단계
- Development 환경과 Production 환경은 서로 다를 수 있음, 팀 프로젝트인 경우 각자 node버전도 다를 것이고, 인증 정보나 데이터베이스 접근 엔드포인트, 비밀번호도 제각각일 것,
- 배포에서는, 환경 설정을 코드와 분리하는 것이 중요함
- 작성한 코드가 다른 환경에서 정상 작동할 수 있게 하려면
- 절대경로 대신 상대경로를 사용
- 환경에 따라 포트를 분기할 수 있도록, 환경변수(envvars or env)를 설정해줌
- (Advanced) Docker와 같은 개발 환경 자체를 통일시키는 솔루션을 사용
EC2(AWS)
- Amazon EC2(Elastic Compute Cloud): AWS에서 제공하는 클라우드 컴퓨팅 서비스
- AWS EC2 인스턴스를 생성한다는 것은 AMI를 토대로 운영체제, CPU, RAM 혹은 런타임 등이 구성된 컴퓨터를 빌리는 것
- 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공
- 원격으로 제어할 수 있는 가상의 컴퓨터 한 대를 빌리는 것
- 사용한 만큼 비용을 지불, 필요에 따라 성능, 용량을 자유롭게 조절할 수 있음
- EC2의 장점
- 구성하는데 필요한 시간이 짧음
- AMI를 통해 필요한 용도에 따라 다양한 운영체제의 선택이 가능(CPU와 RAM, 용량까지도 구성 가능)
- Instance: AWS에서 빌리는 컴퓨터 1대를 의미하는 단위, 인스턴스를 생성한다
- 컴퓨터를 네트워크를 통해 제어한다는 차이점 이외에 컴퓨터와 동일하게 사용
- 가장 기본적인 사용법은 웹서버를 설치하고, 사용자가 웹 브라우저를 통해 요청하는 서비스를 제공
- AMI(Amazon Machine Image): 소프트웨어 구성이 기재된 템플릿
- 이미지 종류로는 단순히 운영체제만 깔려있거나, 아예 특정 런타임이 설치되어 있는 템플릿이 제공
- 윈도우, JVM / 리눅스 우분투, node.js
RDS
- RDS(Relational Database Service): AWS에서 제공하는 관계형 데이터베이스 서비스
- RDS 사용의 이점
- 데이터베이스 유지보스: DB 엔진 설치 및 버전 관리, 데이터 백업 등의 관리를 해줌
- 가용성과 내구성이 확보됨: 데이터 유실 위험이 적고, 데이터베이스의 확장이 용이하다
- 다양한 데이터베이스 엔진 선택지를 제공, 서비스에 맞게 골라서 사용할 수 있음
S3(Simple Storage Service)
- 클라우드 스토리지: 네트워크에 데이터를 저장하는 저장소(Googld Drive, Naver MYBOX)
- S3: AWS에서 제공하는 클라우드 스토리지 서비스
- 뛰어난 접근성, 인터넷이 가능한 기기에서 언제 어디서든 접근이 가능함
- 확장성: 데이터를 무한히 저장 가능하다, 사용한 만큼만 비용을 지불, 비용적 측면에서 매우 효율적
- 내구성: 유실 가능성이 0%에 가깝다
- 가용성: 저장한 파일들을 정상적으로 사용할 수 있는 시간이 길다
- Region: AWS의 클라우드 서비스를 제공하는 물리적 서버의 위치
- 가용 영역(Availability Zone): 리전 안에 존재하는 데이터센터(IDC)
- 한 곳에 재난이나 사고로 가동이 불가능해져도, 다른 가용 영역에 백업을 해놓은 데이터를 활용
- S3 Standard: 가장 일반적인 스토리지 클래스, 데이터에 자주 엑세스할 경우 사용
- 데이터 접근 속도 빠름, 엑세스 요청 처리 빠름, 보관 비용이 높음
- S3 Glacier: 데이터의 장기보관 목적
- 데이터 접근 속도 느림, 엑세스 요청 처리 느림, 보관 비용이 저렴
- S3 사용 시 이점
- 정적 웹 사이트 호스팅이 가능
- 정적 파일: 서버의 개입 없이 클라이언트에 제공될 수 있는 파일
- 웹 호스팅: 서버의 한 공간을 빌려주어, 웹 사이트의 배포, 운영이 가능하게 만들어주는 서비스
- S3에서는 버킷을 통해 정적 웹 사이트 호스팅이 가능
- 버킷: 파일을 담는 바구니(최상위 디렉토리)
- 무한히 많은 파일을 저장 가능
- 버킷의 이름은 각 리전에서 고유해야 함
- 버킷의 정책을 생성하여 다른 유저의 엑세스 권한을 부여 가능함
- 객체: 버킷에 담기는 파일, 파일과 메타데이터로 구성, 최대 5TB
- 모든 객체는 고유한 키를 가짐, 키-값 페어 형식으로 데이터를 저장
- URL 주소를 통해서 객체에 접근 가능
- URL 주소 형식: http://<버킷의 이름>.S3.amazonaws.com/<객체의 키>
배포 전략
- 작성한 Client 코드를 사용자들에게 어떻게 제공할까
- AWS에서 제공하는 S3 서비스를 통해 사용자들에게 Client를 제공할 수 있음
- 클라이언트 앱을 정적 파일로 빌드하여 제공하면, S3를 이용할 수 있음
- 빌드: 불필요한 데이터를 줄이고, 통합/압축하여 배포하기 최적화된 상태를 만드는 것
- 데이터의 용량은 줄어들고 웹 사이트 로딩 속도는 빨라짐
- 일반적인 의미의 빌드는 소스코드를 실행 가능한 번들로 변환하는 컴파일 과정을 의미함
- 웹 앱에서처럼 HTML, CSS, JS의 형태로 배포하는 경우는, 배포 가능한 정적 파일의 형태로 만들어줘야함
- asset 자체가 정적인 경우, 있는 그대로 배포하면 됨(React의 경우 npm run build로 처리하고 배포하면 됨), 사용하고 있는 환경에 따라 빌드 과정이 다를 수 있음
- S3로 서비스를 제공할 때, AWS의 CDN 서비스인 CloudFront를 통해 사용자에게 더 빠르게 서비스를 제공할 수 있음
- Client Application과 요청과 응답을 주고 받을 Server Application은 AWS EC2를 통해 서버를 구성하고 서비스를 제공할 수 있다
- RDS 서비스를 이용하여 EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스를 배포할 수 있음
- 도메인을 통해 서비스에 접속하려면, AWS의 Route53을 이용해야 함