AWS(Amazon Web Service)의 주요 서비스 EC2, RDB, S3
Amazon Web Service(AWS)
온라인 서점으로부터 출발한 아마존(Amazon)이 이렇게 거대한 기업으로 성장할 수 있었던 이유는 바로 AWS(Amazon Web Service) 덕분입니다. AWS는 클라우드 컴퓨팅 서비스와 어플리케이션 배포관련 인프라 서비스(IaaS, Infrastructure as a Service)를 주 사업군으로 두고 있습니다.
클라우드 컴퓨팅은 아주 쉽게 말해 ‘컴퓨터’ 또는 ‘특정 작업에 특화된 컴퓨터’를 웹으로 제공하는 것입니다. 마치 구름같이 떠다닌다고 해서 클라우드라는 이름이 붙여졌습니다
백엔드 개발자가 만드는 서버도 일종의 컴퓨터입니다. 특정 서비스에 특화된 세팅이 되어있는 컴퓨터인 것이죠. 이러한 클라우드 컴퓨팅 기술이 없던 예전에는 서버 운영을 위해서 각 회사마다 물리적인 서버를 설치하였습니다.
따라서 서버 증설시 비싼 서버를 새롭게 구매해야하고 서비스 위축시 서버를 다시 헐값 팔아야하는 단점이 생기기도 하고, 고급 운영 관리 인력 구인, 장소 임대, 전기료, 냉방 온도 유지 등 수 많은 문제가 함께 생깁니다. 이렇게 직접 서버를 운영하는 방식을 ‘부지(장소)의 크기에 따라’ 영향을 받는다고 하여 온프레미스(On-premises) 방식이라고 합니다.
클라우드 컴퓨팅은 서버를 ‘수요에 따라’ 사용하는 온디맨드(On-Demand) 구독형 서비스로 필요한 자원만큼만 구독해서 사용할 수 있습니다. 사용자는 다른 걱정없이 사용한만큼 돈을 지불하는 형태로 사용 가능합니다. 이 클라우드 컴퓨팅 서비스 분야의 강자가 바로 AWS입니다.
AWS는 애플리케이션 전반 개발에 이용 가능합니다. 예를 들어, 애플리케이션의 기본 구조인 3 Tier Architecuture에 해당하는 클라이언트-서버-데이터베이스 관련 서비스를 모두 이용할 수 있습니다.
* 3-Tier Architecture에 대해 자세한 이야기는 아래 글 참조
2022.05.10 - [컴퓨터 사이언스] - 프론트엔드와 백엔드가 나눠진 이유?
AWS의 대표적인 서비스인 EC2(Elastic Compute Cloud 서버 담당), S3(Simple Storage Service, 웹 스토리지 담당), RDS(Relational-Database Storage, 데이터베이스 담당)에 대해 알아보겠습니다.
1. EC2(Elastic Compute Cloud)
아마존 웹 서비스에서 제공하는 클라우드 컴퓨팅 서비스. 네트워크를 통해서 웹서버를 구성하기 위한 원격 컴퓨터를 제공합니다. Elastic은 '유연성 있는, 탄력적인'이라는 뜻으로 필요에 따라 유연하게 컴퓨터를 빌릴 수 있다는 의미입니다. EC2는 필요에 따라 CPU나 RAM성능과 용량을 탄력있게 조정할 수 있습니다. 일반 사용자는 EC2 서비스로 운영되는 서비스 서버를 통해 서비스를 제공받습니다.
EC2 주요 용어 인스턴스(Instance): 클라우드 컴퓨터의 단위, 1개의 컴퓨터는 1개의 인스턴스로 표현 AMI(Amazon Machine Image): 소프트웨어 구성이 탑재된 템플릿. 운영체제나 런타임을 선탑재한 형태
2. RDS(Relational Database Service)
AWS에서 제공하는 관계형 데이터베이스 서비스. 데이터베이스 유지 보수와 관련된 일들을 RDS에서 전적으로 자동 관리합니다. 사용자가 해야 할 일은 초기 설정을 제외하고 데이터베이스에 저장된 데이터를 관리하는 일 밖에 없기에 편의성이 높습니다. RDS는 다양한 데이터베이스 엔진을 제공하여 필요와 목적에 맞게 데이터베이스 엔진을 선택하여 효율성을 높일 수 있습니다.
RDS 주요 용어
- 데이터베이스 엔진(Database Engine): 데이터베이스를 다루는 관리시스템(Mysql, OracleSql 등)
RDS와 EC2에 설치된 데이터베이스의 차이
RDS는 데이터베이스 운영, 보안 관련 서비스에 더욱 특화된 서비스이다. RDS를 사용할 경우에 EC2에서 데이터베이스를 관리하는 경우보다 안전하고 효율적인 데이터베이스 운영이 가능하다. 즉 통제권을 RDS에게 넘기고 비즈니스에 집중하는 방식을 지원한다.
3. S3(Simple Storage Service)
AWS에서 제공하는 클라우드 스토리지 서비스. 정적 웹 호스팅에 주로 쓰이며 웹을 통한 데이터 접근성과 용량 확장성이 뛰어납니다. S3는 전세계의 여러 데이터센터(리전)에 데이터를 백업 보관하여 굉장히 높은 내구성과 가용성을 가지고 있습니다. 또한 다양한 스토리지 클래스(Glacier, Standard)를 제공하여 주로 보관만 하는 데이터와 자주 쓰는 데이터를 나누어 저장할 수 있습니다. 또한 이는 효율적인 비용전략을 구성하도록 돕습니다.
S3 관련 용어
- 클라우드 스토리지(Cloud Storage): 클라우드 스토리지란 쉽게 말해서 인터넷 공간에 데이터를 저장하는 저장소(like HDD, SSD). 대표 서비스로는 Google Drive, DROPBOX, OneDrive 등이 있습니다. 웹으로 데이터에 접근할 수 있어 접근성이 뛰어납니다.
- 가용 영역(Availability Zone): AWS의 각 리전 안에 존재하는 데이터 센터 또 다른 특징으로 S3는 다양한 스토리지 클래스를 제공합니다. 저장소를 어떤 목적으로 활용할지에 따라 효율적으로 선택할 수 있는 스토리지 클래스가 달라집니다.
- Standard Class: 범용적인 목적으로 사용하는 데이터 스토리지 클래스. 데이터의 빠른 접근을 보장합니다.
- Glacier Class: 장기적인 보관 목적으로 사용하는 데이터 스토리지 클래스. 비용이 저렴
- 정적 파일(Static file): 서버의 개입 없이 생성된 파일
- 웹 호스팅(Web Hosting): 서버의 한 공간을 임대해 주는 서비스
- 정적 웹 사이트 호스팅(Static Web Hosting): 서버의 개입 없이 생성되는 정적 파일로 웹을 호스팅하는 방법
- 버킷(Bucket): 버킷이란 S3에 저장되는 파일 컨테이너이자 파일을 저장하는 최상위 디렉터리. S3에서 정적 웹 사이트를 배포할 수 있는 공간으로 저장 공간에 정적 파일을 업로드하고 버킷을 정적 웹 사이트 호스팅 용도로 구성하면 정적 웹 사이트를 배포할 수 있습니다. S3에서 저장되는 모든 파일은 버킷 안에 저장되어야 하고, 버킷에는 무한한 양의 파일을 저장할 수 있습니다. 버킷의 이름은 리전(버킷이 속한 지역)에서 유일합니다. S3에서 저장소에 데이터를 저장할 때 키-값 페어 형식으로 데이터를 저장하기 때문에 버킷에 담기는 파일을 '객체'라고 합니다. 이 객체의 키는 메타데이터에 해당하며, 값은 파일(최대 5TB)에 해당합니다. 이 객체는 모두 고유한 URL을 가집니다.
정리
AWS(Amazon Web Service)
아마존에서 운영하는 클라우드 컴퓨팅 서비스와 어플리케이션 배포관련 인프라 서비스(IaaS, Infrastructure as a Service)
클라우드 컴퓨팅(Cloud Computing)
클라우드 컴퓨팅은 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공하는 서비스. 클라우드 컴퓨팅은 서버를 ‘수요에 따라’ 사용하는 온디맨드(On-Demand) 구독형 서비스로 필요한 자원만큼만 구독해서 사용할 수 있습니다.
클라우드 컴퓨팅 서비스의 장점은 다음과 같습니다.
- 신속한 인프라 구축
- 유연한 인프라 관리
- 예상치 못한 트래픽 폭주 대응
- 손쉬운 글로벌 서비스
- 강력한 보안과 장애 없는 서비스
- 합리적인 요금제
배포(Deployment)
개발한 서비스를 사용자들이 이용 가능하게 하는 일련의 과정. 소프트웨어를 단독으로 사용 가능하게 만드는 과정이자 최종 사용자에게 소프트웨어를 전달하는 과정으로 볼 수 있습니다.
작성한 코드가 다른 환경에서도 동작하려면 환경 설정을 환경 변수(environment variable)에 저장해야 합니다. (환경변수는 코드 변경 없이 배포 때마다 쉽게 변경 가능합니다.)
애플리케이션의 모든 설정이 정상적으로 비즈니스 코드 바깥으로 분리되어 있는지 확인할 수 있는 간단한 방법은 어떠한 인증정보도 유출시키지 않고 코드가 지금 당장 오픈 소스가 될 수 있는지 확인하는 것입니다. 환경 변수를 코드 상의 모든 곳에 절대 경로가 아닌 상대 경로를 사용해야 하며, .properties 등을 이용해 환경 변수를 설정해야 합니다. 참고로 docker와 같은 가상화 도구는 환경 자체를 메타데이터로 담아서 아예 모든 개발 환경을 통일시킵니다.
Deployment는 Development, Integration, Staging, Production 4단계로 나뉩니다.
Development 단계: 각자 코드를 작성하고 테스트하는 과정. 실제 데이터를 이용하지 않고 더미 데이터를 이용해서 테스트함.
Integration 단계: 각자 작성한 코드를 합치는 과정.
Staging 단계: 실제 상황과 가장 유사한 환경에서 테스트를 진행하는 과정. 실제 데이터를 복사해서 문제가 있지 않은지 등 다양한 환경에서 테스트를 진행함. 관련 실무자(기획자, 디자이너)들의 최종 컨펌 단계 포함
Production 단계: 서비스를 출시하는 단계. 사용자가 접속할 수 있는 환경에서 코드를 구동하고 서비스 제공