[배포] 클라우드 서비스 AWS를 이용한 배포

somin·2021년 9월 15일
1

배포

목록 보기
2/4

배포

  • 개발한 서비스를 사용자가 이용가능하게 하는 과정

1. 배포 단계

1) Development 단계

  • Local 컴퓨터 환경에서 개발 및 테스트
  • 개발단계이기 때문에 실제 데이터를 이용하지 않고 더미데이터를 이용해 테스트
  • 변경사항이 있어도 문제가 되지 않음
  • 모든 구성원이 각자의 환경에서 진행

2) Intergration 단계

  • 각자의 환경에서 개발된 부분을 취합
  • 코드간 Conflict가 없는지 확인하는 단계
  • 작성한 코드가 다른 코드에 문제를 발생시키지 않는지 확인

3) Staging 단계

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

4) Production 단계

  • 개발환경과는 구분된 환경
  • 실제 데이터를 이용
  • 실제로 서비스가 제동되는 단계로 문제가 생기면 안됨

2. 환경 변수

1) 필요성

  • Development 환경과 Production 환경은 서로 다를 수 있음
    *로컬에 설치된 데이터베이스 비밀번호는 1q2w3e!인 데, 클라우드에 설치된 데이터베이스 비밀번호는 a12345!일 수 있음
  • 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요
  • 작성한 코드가 다른 환경에서 정상 작동할 수 있게 하려면 설정을 환경 변수(envvars나 env)에 저장해야 함
    *환경 변수는 코드 변경 없이 쉽게 배포 때마다 쉽게 변경 가능

2) 방법

  • 코드상의 모든 곳에 절대 경로가 아닌 상대 경로를 사용
  • 환경에 따라 포트를 분기할 수 있도록.env 등을 이용해 환경 변수를 설정
  • Docker와 같은 가상화 도구를 이요왜 환경 자체를 메타데이터로 담아 모든 개발 환경 통일

AWS(Amazon Web Service)

1. EC2

1) 개념

  • Elastic Computer Cloud의 약자로 사용한 만큼비용을 지불하며, 필요에 따라 성능, 용량을 자유롭게 조절할 수 있음
    *비용, 성능, 용량면에서 탄력적인 클라우드 컴퓨터를 제공하는 서비스
  • AWS에서 제공하는 클라우드 컴퓨팅 서비스로 AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한 대 빌리는 것
    *클라우드 컴퓨팅 : 인터넷(클라우드)을 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공하는 서비스
  • 인스턴스는 1대의 컴퓨터를 의미하는 단위이고 AWS에서 컴퓨터를 빌리는 것을 인스턴스를 생성한다고 함
  • 빌린 컴퓨터는 일반적인 컴퓨터와 다르게 아마존이 전 세계에 만들어 놓은 데이터 센터(인프라)에 만들어져 있어 컴퓨터를 조작하기 위해 네트워크(인터넷)를 통해서 컴퓨터를 제어해야 한다는 차이점이 있을 뿐 일반적인 컴퓨터와 다른 점은 없음
  • EC2 : 웹서버를 설치하고 웹 서버를 통해서 사용자가 웹 브라우저를 통해 요청하는 서비스를 제공하는 것이 가장 기본적인 사용방법

2) 장점

  • 구성하는 데 필요한 시간이 짧음
  • AMI를 통해서 필요한 용도에 따라 다양한 운영체제에 대한 선택이 가능
    *AMI라는 다양한 템플릿을 제공하고 있어서 필요에 따라 손쉽게 운영체제를 선택하고 구성할 수 있음
  • 운영체제뿐만이 아니라 CPU와 RAM, 용량까지도 손쉽게 구성 가능

AMI(Amazon Machine Image)

  • 인스턴스를 생성하는데 필요한 소프트웨어 구성(운영 체제, 어플리케이션 서버, 어플리케이션)이 포함된 템플릿
    *Instance는 선택한 AMI를 토대로 구성
  • AWS EC2 인스턴스를 생성한다는 것은 AMI를 토대로 운영체제, CPU, RAM 혹은 런타임 등이 구성된 컴퓨터를 빌리는 것을 의미
  • 이미지 종류로는 단순히 운영체제(윈도우, 우분투 리눅스 등)만 깔려있는 템플릿을 선택할 수도 있고, 아예 특정 런타임이 설치되어있는 템플릿이 제공되는 경우도 있음
    *우분투 + node.js, 윈도우 + JVM 등

2. RDS

  • Relational Database Service의 약자로 AWS에서 제공하는 관계형 데이터베이스 서비스를 의미
  • 다양한 데이터베이스 엔진 선택지를 제공 : 필요와 목적에 맞게 데이터베이스 엔진을 선택하여 효율성을 높일 수 있음
  • RDS를 이용하면 데이터베이스 유지보수와 관련된 일들을 RDS에서 전적으로 자동 관리
    *사용자가 해야할 일은 초기 설정을 제외하고 데이터베이스에 저장된 데이터를 관리하는 일 밖에 없기에 편리함

3. S3

1) 개념

  • Simple Storage Service의 약자로 AWS에서 제공하는 클라우드 스토리지 서비스

클라우드 스토리지

  • 인터넷 공간에 데이터를 저장하는 저장소
  • 뛰어난 접근성 : 웹 환경이라면 언제 어디서나 저장된 파일에 접근할 수 있음
    *컴퓨터뿐만 아니라 웹에 접속이 가능한 다른 전자기기를 활용하여 클라우드 스토리지에 저장된 데이터에 접속할 수 있음

2) 장점

(1) 확장성

  • 데이터를 무한히 저장 가능
  • 많은 시간과 수고를 들이지 않고 스토리지 규모를 확장/축소할 수 있음
  • 사용한 만큼만 비용을 지불하면 되기 때문에 비용적인 측면에서 매우 효율적

(2) 내구성

  • 저장된 파일을 유실할 가능성이 적음
  • S3는 99.999999999%의 내구성을 보장

(3) 가용성

  • 스토리지에 저장된 파일들을 정상적으로 사용할 수 있는 시간이 길어짐
  • S3는 연간 99.99%의 스토리지 가용성을 보장하도록 설계됨
    *1년 동안 S3에 파일을 저장했을 시, 8.76 시간 동안만 스토리지를 이용하는 데 있어서 장애가 발생한다는 뜻

높은 가용성과 높은 내구성

  • 리전(Region) : AWS에서 클라우드 서비스를 제공하기 위해서 운영하는 물리적인 서버의 위치
    *리전 속 숫자 : 리전에 위치한 가용영역의 수
  • 가용 영역(Availability Zone) : 각 리전 안에 존재하는 데이터 센터(IDC)를 의미
    *가용 영역은 각각 개별적인 위치에 떨어져서 존재
  • 한 곳의 가용 영역이 재난이나 사고로 인해 가동이 불가능해지더라도 다른 가용 영역에 백업을 해놓은 데이터를 활용하여 문제 없이 서버가 가동되게 함
    *이런 가동 방식 덕분에 AWS에서 제공하는 서비스들은 높은 가용성과 내구성을 보장

(4) 다양한 스토리지 클래스를 제공

  • 저장소를 어떤 목적으로 활용할지에 따라 효율적으로 선택할 수 있는 스토리지 클래스가 달라짐
  • S3 사용자들이 대표적으로 많이 선택하는 스토리지 클래스 : Standard 클래스와 Glacier 클래스
    *이 외에도 Standard-IA, One Zone-IA, S3 Glacier Deep Archive 등등 여러 가지 스토리지 클래스가 존재

S3 Standard

: 가장 일반적으로 사용되는 스토리지 클래스로, 데이터에 자주 액세스해야할 경우 사용
: 데이터에 빠른 속도로 접근할 수 있고, 데이터 액세스 요청에 대한 처리 속도가 빨라 범용적인 목적으로 사용하기 좋음
: 데이터를 오래 보관하는 목적으로는 보관 비용이 높게 발생하기 때문에 비효율적

S3 Glacier

: 장기적인 보관 목적으로 스토리지를 사용할 때 효율적
: 저장된 데이터에 액세스하는 속도는 느리지만, 데이터를 보관하는 비용이 매우 저렴

(5) 정적 웹 사이트 호스팅 가능

  • 정적 파일 : 서버의 개입 없이 클라이언트에 제공될 수 있는 파일
    *동적 파일 : 클라이언트가 서버에 요청을 보내면, 서버가 요청에 맞추어 그 자리에서 생성한 파일
  • 웹 호스팅 : 서버의 한 공간을 빌려주어 웹 사이트의 배포, 운영이 가능하게 만들어주는 서비스
  • S3에서는 버킷을 통해 정적 웹 사이트 호스팅이 가능
  • 버킷 : 파일을 담는 바구니로 최상위 디렉토리
    *사용자들이 정적 웹 사이트를 배포할 수 있는 공간을 제공
  • 버킷에 정적 파일을 업로드하고 버킷을 정적 웹 사이트 호스팅 용도로 구성하면 정적 웹 사이트 배포 가능
  • S3에서 저장되는 모든 파일은 버킷 안에 저장되어야 함
    *버킷에는 무한한 양의 파일 저장 가능
  • 버킷의 이름은 각 리전(버킷이 생성된 지역)에서 고유해야 함
  • 버킷의 정책을 생성하여 액세스 권한을 부여 가능(버킷에 대한 다른 유저의 접근 권한을 수정 가능)

객체

  • 버킷에 담기는 파일로 S3에서 저장소에 데이터를 저장할 때 키-값 페어 형식으로 데이터를 저장하기 때문에 객체라 함
  • 모든 객체는 고유한 URL 주소를 가지고 있
  • URL 주소는 http://[버킷의 이름].S3.amazonaws.com/[객체의 키]의 형태를 띠고, URL 주소를 통해서도 원하는 데이터에 접근할 수 있음
  • S3에 저장되는 객체는 파일과 메타데이터로 구성

1) 파일

  • 키-값 페어 형식으로 데이터를 저장
  • 파일의 값에는 실제 데이터를 저장하며, S3 객체의 값으로써 저장될 수 있는 데이터의 최대크기는 5TB
  • 파일의 키는 각각의 객체를 고유하게 만들어주는 식별자 역할을 하며, 파일의 키를 이용하여 원하는 객체를 검색할 수 있음

2) 메타데이터

  • 객체의 생성일, 크기, 유형과 같은 객체에 대한 정보가 담긴 데이터로 객체를 설명하는 데이터

4. AWS 배포

1) Client 배포

  • AWS에서 제공하는 서비스인 S3라는 서비스를 통해 사용자들에게 Client를 제공
    *클라이언트 앱을 정적 파일로 빌드하여 제공하므로 S3를 이용해서 클라이언트를 배포
  • AWS에서 제공하는 CDN 서비스인 CloudFront를 통해서 각지의 데이터센터에 데이터를 분산시켜서 저장해 뒀다가 가까운 지역에서 데이터를 주는 방식으로 사용자에게 더 빠르게 서비스를 제공할 수 있음

빌드

  • 불필요한 데이터를 없애고, 여러 갈래로 퍼져있는 데이터들을 통합/압축하여 배포하기에 최적화된 상태를 만드는 것
  • 빌드 과정을 진행하기 전과 비교했을 때 데이터의 용량이 줄어들고, 웹 사이트의 로딩 속도가 빨라짐
  • 일반적인 의미의 빌드는 소스코드를 실행 가능한 번들로 변환하는 컴파일 과정을 의미하는데, 웹 앱에서와같이 HTML, CSS, JS의 형태로 배포하는 경우는 다름
    *웹 앱을 배포 가능한 정적 파일(static files)의 형태로 만들어 줘야 합
  • React의 경우 npm run build와 같은 명령을 사용해서, 정적 파일 형태의 결과물을 만들어 낸 후 배포
    *사용하고 있는 환경에 따라 빌드 과정은 다를 수 있음

2) Server Application 배포

  • 안정적으로 서비스를 제공하기 위해 가상의 PC를 빌려 서버 코드 구동 가능
  • AWS EC2 서비스를 이용 손쉽게 서버를 구성하고 서비스를 제공할 수 있음

3) Database 배포

  • AWS에서는 제공하는 RDS(Database 특화 서비스)를 이용하여 데이터베이스를 사용 가능
    *RDS : AWS가 유지 보수 작업을 담당
  • RDS 서비스를 이용하여 EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스를 배포할 수 있음

4) DNS

  • S3, EC2를 이용해서 배포된 서비스는 IP주소 혹은 AWS에서 제공하는 여러분의 서비스와는 전혀 상관없는 긴 도메인주소를 통해 접근하게 됨
  • AWS에서 제공하는 Route 53 서비스를 이용하면 직관적인 도메인 주소를 통해서 서비스에 접근하도록 할 수 있음
profile
✏️

0개의 댓글