SEB[배포, AWS]

Jogi's 코딩 일기장·2021년 9월 16일
0


이번 유닛에서는 AWS를 이용한 배포에 대하 학습하고 실습을 진행했다. 학생 때는 마이크로소프트의 Azure를 사용해서 클라우드를 사용해봤는데 AWS를 통해 하는 것은 처음이었다. 실습하면서 어려움을 많이 겪긴 했지만 꽤 좋은 시간이었다. 학습하면서 배운 개념을 정리해보도록 하려고 한다.

AWS (Amazon Web Service)

클라우드 컴퓨팅

기존 방식의 한계

  • 주기적인 유지 관리 필요
  • 공간의 한계
  • 기존 방식의 한계로 데이터 센터가 등장했고, 유휴자원을 대여하는 서비스가 등장하여 클라우드 컴퓨팅이 시작됐다.

Cloud의 특징

  • 데이터 센터에서는 서버의 자원과 공간 및 네트워크 환경을 제공하는 이를 온프레미스라고 한다.
  • 현대의 클라우드 컴퓨팅은 물리 컴퓨터가 아닌, 가상 컴퓨터를 대여한다는 점이 과거와는 다른데, 이는 가상화 기술의 발전으로부터 비롯됐다. 가상화 기술을 사용하는 클라우드 서비스의 장점 또한 클라우드의 장점이라고 할 수 있으며, 온프레미스 형식과는 다르다.
    • 필요할 때마다 컴퓨팅 능력을 유연하게 조절한다
    • 사용한 만큼의 요금만 지불한다.
    • 다른 컴퓨터로 스냅샷을 이용해, 즉시 이주(migration)가 가능하다

Cloud의 단점

  • 클라우드 서비스에 종속되어, 서비스에 영향을 미친다. 클라우드 서비스가 먹통이 되면 우리의 서비스도 먹통이 된다는 말이다.

클라우드 서비스의 형태

  • SaaS(Software as a Service) : 클라우드 제공자가 당장 사용가능한 소프트웨어를 제공하는 경우
  • PaaS(Platform as a Service) : 클라우드 제공자가 데이터베이스, 개발 플랫폼까지 제공하는 경우
  • IaaS(Infrastructure as a Service) : 클라우드 제공자가 가장 컴퓨터까지 제공하는 경우

Deploy(배포)

Deployment

  • 개발한 서비스를 사용자가 이용가능하게 하는 과정
  • 기본적으로 4단계를 걸쳐서 개발한 서비스를 배포한다.

배포 단계

  1. Developement

    • Local 컴퓨터 환경에서 개발 및 테스트
    • Simple Data(더미데이터)를 이용해 테스트
    • 변경사항이 있어도 문제가 없다.
    • 모든 구성원이 각자의 환경에서 진행
  2. Intergration

    • 각자의 컴퓨터에서 개발된 부분을 취합
    • 코드 간 conflict가 없는지 확인하는 단계
    • 작성한 코드가 다른 코드에 문제를 발생시키지 않는지 확인
  3. Staging

    • 실제 출시 단계인 Production 단계와 가장 유사한 환경에서 테스트
    • 복제된 실제 데이터를 이용해서 테스트
    • 모든 관계자들에게 검증하는 단계
  4. Production

    • 개발된 서비스를 출시하는 단계(개발환경과는 구분된 환경)
    • 실제 데이터를 가지고 실제 서비스가 제공되는 단계

환경설정

  • 배포에서는 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요하다.
  • 작성 코드가 다른 환경에서도 정상 작동하기 위한 것
    • 설정을 환경변수(envvars or env)에 저장한다.
    • 절대 경로 대신 상대 경로를 이용한다.
    • 환경에 따라 포트를 분기할 수 있도록 환경변수를 설정한다.
    • Docker와 같은 개발 환경 자체를 통일시키는 솔루션을 사용한다.

EC2

Amazon EC2 (Elastic Compute Cloud)

  • AWS에서 제공하는 클라우드 컴퓨팅 서비스

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

  • EC2는 비용, 성능, 용량 면에서 탄력적인 클라우트 컴퓨터를 제공하는 서비스다.

    • 사용한 만큼의 비용을 지불한다.
  • AWS에서 빌리는 컴퓨터 1대를 인스턴스라고 한다.

EC2의 장점

  • 구성하는데 필요한 시간이 짧다
  • AMI를 통해서 필요한 용도에 따라 다양한 운영체제에 대한 선택이 가능하다. 뿐만아니라 CPU, RAM, 용량까지 쉽게 구성이 가능하다.

AMI(Amazone Machine Image)

  • 소프트웨어 구성이 기재된 템플릿
  • 이미지 종류로는 단순히 운영체제만 깔려있는 이미지 템플릿을 선택할 수도 있고, 아예 특정 런타임이 설정돼있는 템플릿이 제공되는 경우도 있다.
    • setting을 통해서 선택이 가능하다.

EC2 -> AMI -> Instance : AMI를 토대로 setting된 PC를 대여한다는 것이다.

본인 같은 경우에는 서버를 돌리기 위해 사용할 것이기 때문에 보안 규칙에서 인바운드 규칙을 잘 세워주는 것이 좋다.

RDS (Relational Database System)

  • AWS에서 제공하는 관계형 데이터베이스다.

이점

  • 데이터 유지보수와 관련된 일들을 RDS에서 전적으로 자동관리한다.
  • 사용자가 하는 일은 초기 설정과 데이터베이스의 데이터를 관리하는 일 밖에 없기 때문에 편의성이 좋다.
  • 다양한 데이터 베이스 엔진 선택지가 제공된다.

S3(Single Storage Service)

클라우드 스토리지

  • 인터넷 공간에 데이터를 저장하는 저장소
  • 뛰어난 접근성
  • S3는 AWS에서 제공하는 클라우드 스토리지 서비스다.

이점

  • 높은 확장성 : 데이터를 무한히 저장 가능하다.
  • 강력한 내구성
  • 리전에 의한 가용성 보장
  • 다양한 스토리지 클래스를 제공한다.
    • S3 Standard
      • 가장 일반적인 스토리지 클래스
      • 데이터에 자주 액세스 해야할 경우 사용
      • 보관 비용이 높기 때문에 데이터를 오래 보관하기에는 비효율적이다.
    • S3 Glacier
      • 데이터의 장기보관 목적
      • 데이터의 보관 비용이 저렴
  • 정적 웹사이트 호스팅이 가능하다.
    • 정적 파일 : 서버의 개입없기 클라이언트에 제공될 수 있는 파일
    • 웹 호스팅 : 서버의 한 공간을 빌려주어 웹 사이트의 배포, 운영이 가능하게 해주는 서비스
    • S3에서는 버킷을 통해 정적 웹사이트 호스팅이 가능하다.

리전(region)

  • AWS에서 클라우드 서비스를 제공하기 위해 운영하는 물리적인 서버의 위치
  • 리전 안에 적힌 수는 가용 영역의 수다.
  • 가용 영역이란 각 리전 안에 존재하는 데이터 센터(IDC)이다.

S3의 핵심 개념

버킷

  • 파일은 담는 바구니(최상위 디렉토리)
  • 무한이 많은 파일 저장 가능
  • 버킷의 이름은 각 리전에서 고유해야 한다.
  • 버킷의 정책을 생성하여 액세스 권한 부여가 가능하다.

객체

  • 버킷에 담기는 파일
  • 파일과 메타데이터(객체의 생성일, 크기, 유형과 같은 객체의 정보가 담긴 데이터)로 구성
  • 모든 객체는 고유한 키를 갖는다.
  • URL 주소를 통해서 객체에 접근이 가능하다.
  • URL 주소형식 : https://[버킷이름].s3.amazonaws.com/[객체의 키]

deploy strategy(배포 전략)

클라이언트 배포

  • S3를 이용해서 제공가능하다. 클라이언트를 정적 파일로 빌드하여 배포하기 때문
  • 빌드
    • 불필요한 데이터를 없애고, 통합/압축하여 배포하기 최적화된 상태를 만드는 것
    • 데이터의 용량이 줄어들고 웹 사이트 로딩 속도가 빨라진다.
    • 웹 앱은 배포 가능한 정적 파일의 형태로 만들어 줘야한다.
  • Aws에서 제공하는 CDN 서비스인 CloudFront를 통해서 사용자에게 콘텐츠를 더 빠르게 배포할 수 있다.

Server Application 배포

  • 안정적으로 서비스를 제공학시 위해 가상의 PC(Aws EC2)를 빌려 서버 코드를 구동한다.

데이터베이스 배포

  • RDS 서비스를 통해 EC2로 배포된 Server Application의 데이터를 저장, 제공하는 데이터 베이스를 배포할 수 있다.

DNS

  • AWS의 Route 53 서비스를 이용하면 직관적인 도메인 주소를 통해서 서비스에 접근하도록 할 수 있다. 이와 CloudFront를 같이 이용해 https의 우리가 아는 주소형태로 만들 수 있다.

배포 실습은 프리티어로 실습을 진행했으나, 오래 사용하거나 까먹으면 요금 폭탄이 나올 수 있기 때문에 모두 삭제를 해두었다. 결제 내역을 잘 확인하는 것이 요금 폭탄을 방지하는 방법이다.

Reference

  • 코드스테이츠 강의자료
profile
프로그래머로서의 한걸음

0개의 댓글