📌 아마존 웹 서비스(AWS)
아마존이 자사의 노하우를 살려 제공하는 있는 '클라우드 컴퓨팅 서비스'
AWS에는 컴퓨팅, 스토리지, 데이터베이스, 분석, 네트워킹, 모바일, 개발자 도구, 관리 도구, IoT, 보안, 엔터프라이즈 애플리케이션 등 다양한 서비스가 준비되어 있으며 AWS의 다양한 서비스를 조합하여 모든 애플리케이션과 인프라를 구축할 수 있음
- 서비스 조합의 용이성
- 서비스 양을 미리 생각하지 않고 현재 필요한 만큼만 사용하고 부족해지면 바로 추가 가능 (정액제와의 차별점을 둠)
- 네트워크 및 서버가 매우 큰 규모가 아니라면 네트워크 서버 전문가가 아니더라도 사용이 가능
- 전 세계 31개의 지리적 리전 내에 99개의 가용 영역은 운영중, 글로벌로 확장시 확장하고자 하는 지역과 지리적으로 가까운 리전에서 서비스 시작 가능
- 한국어 지원 및 원화 결제 가능
📌 Cloud Computing
기존 서버의 방식
클라우드 등장 이전에는 전산실과 같은 곳에 컴퓨터를 배치하고 인터넷을 연결하여 서비스를 제공함
서버가 요청에 대한 수용 능력이 한계 도달하면 어떤 대처를 했을까?
-> 같은 공간에 더 많은 컴퓨터 제공하여 여러 대가 나눠서 처리를 함
- 방식에 대한 한계점 도달
- 주기적인 관리가 필요 : 고장 및 인터넷 연결 이슈로 인력 및 비용 투입
- 공간읜 한계 : 처리해야되는 양이 많아질수록 컴퓨터의 양도 늘어나게 되면서 공간이 부족하게 됨
➡️ 이러한 한계를 극복하기 위해 데이터 센터의 유휴 자원을 대여하는 서비스가 등장
클라우드의 등장
현대의 클라우드 컴퓨팅은 앞서 설명한 데이터 센터와 비슷한 역할을 하지만, 물리적인 컴퓨터가 아닌 가상의 컴퓨터를 대여한다는 점
-> 가상화 기술의 발전으로 비롯
장점
- 서버의 자원과 공간 및 네트워크 환경 제공 => 온프레미스 방식
- 필요할때마다 컴퓨팅 능력을 유연하게 조절
- 사용한만큼의 요금만 지급
- 다른 컴퓨터롤 즉시 이주가 가능
단점
- 클라우드 서비스 종속 : 백엔드의 구성 자체가 특정 회사의 기술로만 구성해야만 하는 경우가 발생할 수 있다는 점
- 서비스에 영향을 미침
대표적인 클라우드 서비스 형태
- SaaS (Software as a Service)
: 클라우드 제공자가 당장 사용 가능한 소프트웨어를 제공하는 경우
- Paas (Platform asa a Service)
: 클라우드 제공자가 데이터베이스, 개발 플랫폼까지 제공하는 경우
- Iaas (Infrastructure as a Service)
: 클라우드 제공자가 가상 컴퓨터까지 제공하는 경우
=> AWS는 이와 제일 가깝
📌 Amazon EC2(Elastic Compute Cloud)
AWS에서 제공하는 클라우딩 컴퓨티 서비스로 AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한 대 빌리는 것
- 사용한 만큼 비용을 지불하고 성능,용량을 자유롭게 조절 가능 (Elastic)
- 구성하는 데 필요한 시간이 짧음
- AMI를 통해서 필요한 용도에 따라 다양한 운영체제에 대한 선택이 가능 (CPU,RAM,용량까지도 손쉽게 구성가능)
📍 AMI란
소프트웨어 구성이 기재된 템플릿
AWS에서 빌릴 PC는 사용용도에 맞게 운영체제(윈도우,우분투,리눅스), 런타임(우분투+node.js, 윈도우+JVM) 등이 구성된 Setting을 선택할 수 있음
EC2는 컴퓨터를 한 대 빌리는 것이므로 컴퓨터로 할 수 있는 모든 일을 할 수 있음
-> 빌린 컴퓨터는 직접 사용하는 컴퓨터와 다르게 아마존이 전 세계에 만들어 놓은 데이터 센터에 만들어져있기 때문에 컴퓨터를 조작하기 위해 네트워크를 통해서 컴퓨터를 제어해야 한다는 차이점만 있음
- 인스턴스는 1대의 컴퓨터를 의미하는 단위이고 AWS에서 컴퓨터를 빌리는 것을 인스턴스를 생성한다고 함

📌 RDS(Relational Database Service)
AWS에서 제공하는 관계형 데이터 베이스 서비스
EC2와 RDS의 차이
EC2 인스턴스에 관계형 데이터베이스 엔진을 설치해서 데이터를 관리할 때와 RDS를 통해 데이터를 관리할 때의 차이는 개인 소유 차량과 렌터카 회사에서 대여한 차량으로 비유할 수 있음


- EC2는 데이터베이스와 관련해서 자동으로 관리를 담당하는 부분이 매우 적기 떄문에, 사용자가 일일이 시간을 투자하여 데이터베이스 엔진의 설치와 버전 관리, 데이터 백업을 해야 함
-> 가용성과 내구성이 확보되지 않아서 데이터베이스에 저장된 데이터가 유실되거나 정상적으로 사용하지 못할 확률이 커지며, 후에 필요에 따라 데이터베이스의 규모를 확장하기 어려움
- RDS는 데이터베이스 유지 보수와 관련된 일들을 RDS에서 전적으로 자동관리를 해줌. 사용자는 초기 설정을 제외하고 데이터베이스에 저장된 데이터를 관리하는 일 밖에 없어서 편의성을 느낌
-> 다양한 데이터 베이스 엔진 선택지를 제공함
📌 S3 (Simple Storage Service)
AWS에서 제공하는 클라우드 스토리지(인터넷 공간의 데이터 저장소) 서비스
- 확장성이 높고 많은 시간과 수고를 들이지 않고 스토리지 규모를 확장/축속가 가능
-> 확장한 만큼의 비용을 지불하면 됨
- 내구성이 높아서 저장된 파일의 유실 가능성이 현저히 낮음
- 정적 웹사이트 호스팅이 가능
- 가용성(고장 x) 보장
📍 리전의 가용영역
: 각 리전안에 존재하는 데이터 센터를 뜻함
한 곳의 가용 영역이 재난이나 사고로 인해 가동이 불가능해지더라도 다른 가용 영역에 백업을 해놓은 데이터를 활용하여 문제없이 서버가 가동됨
-> 이러한 가동 방식으로 높은 가용성과 내구성이 보장됨
스토리지 클래스
- Standard클래스 : 범용적인 목적으로 사용
- 데이터에 따른 접근 가능
- 액세스 요청에 대한 처리 속도 빠름
- But, 데이터를 오래 보관 x -> 보관 비용 높게 발생
- Glacier
- 저장된 데이터에 액세스하는 속도는 느리지만, 데이터를 보관하는 비용이 매우 저렴 -> 장기적인 보관 목적으로 최상
정적 웹사이트 호스팅
서버의 한공간을 임대해주는 서비스
-> 개인 또는 단체가 웹 호스팅 업체가 제공하는 서버의 한 공간을 빌려서 원하는 서비스를 배포할 수 있음
📍 정적 파일 : 서버의 개입없이 생성된 파일
📍 동적 파일 : 클라이언가 서버에 요청을 보내면, 서버가 요청에 맞추어 그 자리에서 생성한 파일
S3 버킷
버킷을 통해 정적 웹사이트 호스팅이 가능
📍 버킷이란?
S3에 저장되는 파일들이 담기는 바구니 (파일을 저장하는 최상위 디렉터리)
- 많은 양의 파일들을 저장이 가능
- 버킷의 이름은 각 리전에서 유일
- 버킷의 정책을 생성하여 해당 버킷에 대한 다른 유저의 접근 권한을 수정
S3에서는 버킷에 담기는 파일을 객체라고 부름
-> 저장소에 데이터를 저장할때 키-값 페어 형식으로 데이터를 저장하기 때문에
S3에 저장되는 객체는 파일과 데이터로 구성됨
- 파일의 값에 실제 데이터 저장 (최대 5TB 저장가능)
- 파일의 키는 식별자 역할을 함 -> 파일의 키를 이용하여 원하는 객체를 검색 가능
- 메타데이터는 객체의 생성일, 크기, 유형과 같은 객체에 정보가 담긴 데이터 (객체를 설명하는 데이터라고 이해하면 됨)
- 모든 객체는 고유한 URL 주소를 가지고 있음
📌 Deploy (배포)
개발한 서비스를 사용자가 이용가능하게 하는 과정

- 작성된 코드가 다른 환경에서 정상 작동할 수 있게 하려면 설정을 환경변수에 저장해야함
-> 환경 변수는 코드 변경 없이 배포때마다 쉽게 변경 가능
- 절대 경로가 아닌 상대 경로 사용
📌 EC2 실습