[TIL] Day62- AWS

공부중인 개발자·2021년 7월 7일
0

TIL

목록 보기
62/64
post-thumbnail

Cloud Computing

  • 기존 서버 방식(온프레미스)

전산실같은 곳에 컴퓨터를 배치 서버 수용능력 한계 도달 시 새로운 서버(하드웨어)구매로 증설

한계

  1. 주기적인 관리 필요
    • 고장 시 인력 및 비용 투입
    • 서버 컴퓨터의 증설 시 인력 및 비용 증가
  2. 공간의 한계
    • 전산실, 서버실에 서버 하드웨어를 놓는데 서버 수용능력 한계 도달 시 새로운 서버 증설로 인해 공간이 부족해지는 현상이 발생할 수 있음 -> 컴퓨터의 성능을 높이고 부피를 줄여 공간의 효율을 높일 수는 있지만 한계는 존재

-> 추가적인 서버 증설이 어렵게 되자 데이터 센터라는 거대 전산실,서버실 같은 건물을 만듬 -> 데이터센터의 유휴 자원을 대여하는 서비스 등장 -> 클라우드 컴퓨팅의 시작

  • 클라우드 방식

물리적인 컴퓨터가 아닌 가상 컴퓨터를 대여함으로써 서버역할을 맡기는 방식

서버의 자원과 공간, 네트워크 환경 제공
필요할 때마다 컴퓨팅 능력을 유연하게 조절
사용한 만큼의 요금만 지급
다른 컴퓨터로 즉시 이주 가능

단점으로 클라우드 서비스에 종속되어 클라우드 서비스에 문제가 생기면 종속되어있는 서비스 역시 바로 문제가 생김

클라우드의 서비스 범위

SaaS Software as a Service 클라우드 제공자가 당장 사용 가능한 소프트웨어를 제공하는 경우 대부분 SaaS

Paas Platform as a Service 클라우드 제공자가 데이터 베이스, 개발 플랫폼까지 제공하는 경우 대부분 PaaS

IaaS Infrastructure as a Service 클라우드 제공자가 가상 컴퓨터까지 제공하는 경우 대부분 IaaS

SaaS의 경우 어플, 플랫폼/DB, 운영체제, 하드웨어, 네트워크 모두를 서비스 해줌
Paas의 경우 플랫폼/DB, 운영체제, 하드웨어, 네트워크까지 서비스
Iaas의 경우 하드웨어와 네트워크만을 서비스

Deploy

배포란 개발한 서비스를 사용자가 이용가능하게 하는 과정(물건을 만들고 난뒤 매장에 물건을 진열하는 행위라고 볼 수 있음)
4가지 단계가 존재

  1. Development

자의 컴퓨터에서 코드를 작성하고 테스트 하는 과정
개발단계이기 때문에 실제 데이터를 이용하지 않고 더미데이터를 이용해서 테스트

  1. Intergration

각자의 컴퓨터에서 작성한 코드를 합치는 과정
내가 작성한 코드가 다른 코드를 침범해서 오류를 일으키지 않는지, 코드간에 conflict가 있지는 않는지 확인하는 과정

  1. Staging

실제 출시단계인 Production단계와 가장 유사한 환경에서 테스트를 진행
실제 데이터를 복사해서 문제가 있지 않은지 등 다양한 환경에서 테스트를 진행
또한 서비스와 관련된 부서 혹은 인원의 확인 과정

  1. Production

개발된 서비스를 출시하는 단계
Production환경에서 코드를 구동하고 서비스를 제공

  • 작성한 코드를 정상 작동하기 위해선

작성한 코드가 다른 환경에서 정상 작동할 수 있게 하려면, 설정을 환경 변수 (envvars나 env라고도 불림)에 저장해야함

환경 변수는 코드 변경 없이 배포 때마다 쉽게 변경가능

환경 설정을 코드로부터 분리하는 방법론
절대경로 대신 상대경로 사용
환경에 따라 포트를 분기할 수 있도록 환경변수 설정
Docker와 같은 개발 환경 자체를 통일시키는 솔루션 사용

AWS Service

EC2

Elastic Compute Cloud

AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터를 빌리는 것

장점
구성하는데 필요한 시간이 짧다.
다양한 운영체제에 대한 선택 가능

아마존 EC2를 통해서 할 수 있는 가장 기본적인 일
웹서버를 설치하고 웹 서버를 통해서 사용자가 웹 브라우저를 통해 요청하는 서비스를 제공하는 것
인스턴스는 1대의 컴퓨터를 의미하는 단위이고 AWS에서 컴퓨터를 빌리는 것을 인스턴스를 생성한다고함

AMI는 소프트웨어 구성이 기재된 템플릿
이미지 종류로는 단순히 운영체제(윈도우, 우분투 리눅스 등)만 깔려있는 템플릿을 선택할 수도 있고, 아예 특정 런타임이 설치되어있는 템플릿이 제공되는 경우도 있음( 우분투+node.js, window+JVM 등)
AWS에서 빌릴 PC는 용도에 맞게 운영체제, 런타임등이 구성된 Setting 선택 가능

RDS

Relational Database Service

약자로 AWS에서 제공하는 관계형 데이터베이스 서비스

장점
RDS를 이용하면 데이터베이스 유지보수와 관련된 일들을 RDS에서 전적으로 자동 관리
사용자가 해야할 일은 초기 설정을 제외하고 데이터베이스에 저장된 데이터를 관리하는 일 밖에 없음
다양한 데이터베이스 엔진 선택지를 제공
실무자는 회사에 필요한 데이터베이스 엔진을 취사선택하여 이용할 수 있음

S3

Simple Storage Service

클라우드 스토리지란? 인터넷 공간에 데이터를 저장하는 저장소(Google Drive, One Drive등)

AWS에서 제공하는 클라우드 스토리지 서비스
뛰어난 접근성을 가지고 있음

장점

  1. 확장성 - 데이터를 무한히 저장 가능(비용만 지불되면)
  2. 강력한 내구성 - 파일 유실 가능성낮음
  3. 99.99%의 가용성 - 가용성이 높으면 스토리지에 저장된 파일을 정상적으로 사용할 수 있는 시간이 길어짐

높은 가용성과 강력한 내구성을 보장하는 이유

리전 - 리전이란 AWS에서 클라우드 서비스를 제공하기 위해서 운영하는 물리적인 서버의 위치
한 곳의 가용 영역이 재난이나 사고로 인해 가동이 불가능해지더라도 다른 가용 영역에 백업을 해놓은 데이터를 활용하여 문제 없이 서버가 가동
이런 가동 방식 덕분에 AWS에서 제공하는 서비스들은 높은 가용성과 내구성을 보장

  1. 다양한 스토리지 클래스 제공 - 저장소를 어떤 목적으로 활용할지에 따라 효율적으로 선택할 수 있는 스토리지 클래스가 달라짐

대표적인 스토리지 클래스 - Standard 클래스와 Glacier 클래스
Standard 클래스는 범용적인 목적으로 사용하기 좋음, 데이터에 빠른 속도로 접근할 수 있고, 데이터 액세스 요청에 대한 처리 속도가 빠름, 데이터를 오래보관 하는 목적으로는 효율적인 선택지X 보관비용이 높음
Glacier 클래스는 데이터 장기보관 목적일때 용이, 저장된 데이터에 액세스하는 속도는 느리지만, 데이터를 보관하는 비용이 매우 저렴하다는 장점

  1. 정적 웹 사이트 호스팅이 가능 - 정적 파일은 서버의 개입 없이 생성된 파일, 클라이언트가 서버에 요청을 보내면, 서버가 요청에 맞추어 그 자리에서 생성한 파일을 '동적' 파일

S3에서는 버킷이 사용자들이 정적 웹 사이트를 배포할 수 있는 공간을 제공
버킷이라는 저장 공간에 정적 파일을 업로드하고 버킷을 정적 웹 사이트 호스팅 용도로 구성하면 정적 웹 사이트를 배포할 수 있음

버킷이란 S3에 저장되는 파일들이 담기는 바구니, 무한히 많은 파일을 저장 가능, 버킷의 이름은 각 리전에서 고유해야 하므 버킷의 정책을 생성하여 액세스 권한을 부여 가능

S3에서 버킷에 담기는 파일을 객체라고 부름
S3에 저장되는 객체는 파일과 메타데이터로 구성
파일은 키-값 페어 형식으로 데이터를 저장
파일의 값에는 실제 데이터를 저장, 파일의 키는 각각의 객체를 고유하게 만들어주는 식별자 역할
파일의 키를 이용하여 원하는 객체를 검색할 수 있음
메타데이터는 객체의 생성일, 크기, 유형과 같은 객체에 대한 정보가 담긴 데이터, 객체를 설명하는 데이터로 이해하는 편이 좋음
모든 객체는 고유한 URL 주소를 가지고 있음, URL 주소는 http://[버킷의 이름].S3.amazonaws.com/[객체의 키]의 형태를 띠고, URL 주소를 통해서도 원하는 데이터에 접근할 수 있음

배포 전략

  • Client 배포

AWS에서 제공하는 서비스인 S3라는 서비스를 통해 사용자들에게 Client를 제공할 수 있음
클라이언트를 정적파일로 빌드하여 배포 -> S3를 이용해 배포 -> 이때 필요한 것이 빌드

빌드

불필요한 데이터를 없애고, 통합/압축하여 배포하기 최적의 상태로 만드는 것
데이터의 용량이 줄고 웹 사이트 로딩속도가 빨라짐
일반적인 의미의 빌드는 소스코드를 실행 가능한 번들로 변환하는 컴파일 과정을 의미
웹 앱은 배포 가능한 정적 파일(static files)의 형태로 만들어 줘야함
asset 자체가 정적인 경우, 있는 그대로 배포하면 되지만 React의 경우 npm run build와 같은 명령을 사용해서, 정적 파일 형태의 결과물을 만들어 낸 후 배포

AWS에서 제공하는 CDN 서비스인 CloudFront를 통해서 각지의 데이터센터에 데이터를 분산시켜서 저장해 뒀다가 가까운 지역에서 데이터를 주는 방식으로 사용자에게 더 빠르게 서비스를 제공

  • server 배포

AWS EC2 서비스를 통해 서버를 구성하고 서비스를 제공
RDS 서비스를 이용하여 EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스를 배포

DNS를 이용하여 서비스에 접속하려면 AWS 서비스 중 Route53 이용가능


지난 섹션2에서 배운 배포를 할때는 생각보다 굉장히 쉬웠다고 느꼈는데 본격적인 배포를 배우고 나니 굉장히 어렵고 많은 작업들을 해야하는 것을 느낌
배워야할게 산더미처럼 느껴짐

profile
열심히 공부하자

0개의 댓글