🌩️Cloud

AWS 학습을 위한 기본 학습

코딩베이비 2022. 12. 2. 08:56

Cloud Computing

  • 서버의 자원/공간/네트워크 환경을 빌려서 사용하는 것
  • 기존의 On-premise(온프레미스) 방식과는 달리 물리적인 컴퓨터가 아닌 가상 컴퓨터를 대여하는 방식
  • IT 리소스를 인터넷을 통해 제공하고, 사용한 만큼 비용을 지불하는 방식으로 운영
  • 필요에 따라 빌리는 환경의 성능을 조절 가능
  • 컴퓨터의 스냅샷(이미지)을 이용해 다른 컴퓨터로 즉시 이주(migration) 가능
  • On-demand(주문형) 방식

단점

  • 운영 환경 자체가 클라우드 제공자에게 종속되기 때문에, 클라우드에 문제가 생길 경우 사용자가 배포 중인 서비스에도 영향이 미친다.
  • 백엔드 구성이 특정 회사의 기술로만 구성되어야만 하는 경우가 생길 수도 있다.
On-demand 방식
- 사용자의 요구 사항에 따라 즉시 제공/공급하는 방식
- 수요에 초점을 맞춘 서비스로, 소비자가 원하면 언제든 제공할 수 있다.
On-premise
- 클라우드 같은 원격 서비스를 사용하는 것이 아닌, 기업에서 자체적으로 보유한 데이터 센터에 서버를 직접 설치해 운영하는 것

 

대표적인 클라우드 서비스의 형태

https://www.artifakt.com/blog/paas/paas-vs-iaas-vs-saas-differences-pros-and-cons/

SaaS(Software as a Service)

- 호스팅되는 소프트웨어를 웹 브라우저 등의 클라이언트로 사용 가능하게 하는 서비스

- Paas와 Iaas의 위에 올라가게 되는 소프트웨어

 

PaaS(Platform as a Service)

- 웹에서 개발 플랫폼을 빌려 쓸 수 있게 하는 서비스

 

IaaS(InfraStructure as a Service)

웹 서버나 애플리케이션 서버로 사용할 환경을 호스팅 업체에서 빌리는 것

 

https://krauser085.github.io/SaaS-PaaS-IaaS/

 

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 등과 같은 가상화 도구를 통해 환경 자체를 메타데이터로 담아 모든 개발환경을 통일시킨다.
  • 어떠한 인증정보의 유출 없이 코드가 오픈 소스가 될 수 있다면, 이 애플리케이션은 모든 설정이 정상적으로 코드와 분리되어 있다고 할 수 있다.

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 ...
  • 정적 웹 호스팅 가능
    • 버킷에 정적 파일을 업로드하고 버킷을 정적 웹사이트 호스팅 용도로 구성해서 정적 웹사이트 배포 가능
정적(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
  • 더찾아봐야함