IT 정보/기타 정보
[Cloud] 배포 기본 개념
개발하는 동그리
2022. 8. 2. 13:03
728x90
반응형
데이터 센터
- 자체적으로 보유한 전산실 서버에 직접 설치해 운영하는 방식
- 즉 서버의 자원과 공간, 및 네트워크 환경을 제공을 빌려 사용하는 클라우드 컴퓨팅이 시작된 순간입니다.
- 데이터 센터의 유휴 자원을 대여하는 서비스
- 온프레미스라고 부름
현대 클라우드란!?
- 데이터 센터와 비슷하지만 가상 컴퓨터를 대여한다
- 가상화 기술의 발전으로부터 비롯됨
- 온프레미스 형식과는 다른 장점을 보유
- 필요할 때마다 컴퓨터 능력을 유연하게 조절
- 고정적인 비용이 들어가는 온프레미스와 달리 사용한 만큼의 요금만 지불
- 컴퓨터의 스냅샷(이미지)를 이용해 다른 컴퓨터로 즉시 이주가 가능
- 클라우드의 단점
- 운영환경이 클라우드 제공자에게 종속되어 클라우드 서비스에 문제 발생 시 영향을 받음
- 운영환경이 사업자(vendor)에 종속되므로, 백엔드 구성이 특정회사의 기술로만 구성됨
- 대표적 클라우드 서비스 형태
- 서비스 범위 : 1. 네트워크 / 2. 하드웨어 / 3. 운영체제 / 4. 플랫폼&데이터베이스 / 5. 애플리케이션
- SaaS
- 1 ~ 5 범위
- Software as a Service (당장 사용 가능한 소프트웨어를 제공받는 경우 대부분)
- PaaS
- 1 ~ 4 범위
- Platform as a Service (클라우드 제공자가 데이터베이스, 개발 플랫폼까지 제공하는 경우 대부분)
- IaaS
- 1 ~ 2 범위
- Infrastructure as a Service (클라우드 제공자가 가상 컴퓨터까지 제공하는 경우 대부분)
- ex ) AWS
- SaaS
AWS 리소스가 설치되어 있는 장소
- Regions
- AWS 인프라를 지리적으로 나누어 배포
- 사용자와 리전이 가까울 수록 네트워크 지연 최소화
- Availability Zone
- 각 리전 내(대략 3개~ 5개)에 물리적으로 격리되어 있는 개별 데이터 센터 (5만~ 8만대 서버)
- 각 AZ는 고속 프라이빗 네트워크로 논리적인 연결되어 있음
- Edge Location
- CDN(Cloud Front) 캐싱 콘텐츠가 위치
- 리전(20개정도)이랑 별개로 존재하고, 전세계에 2만개 정도 있음
EC2
- 인스턴스
- 가상 컴퓨팅 환경 (서버)
- AMI (Amazon Machine Image)
- OS, 애플리케이션 서버, 애플리케이션 등에 대한 세부 정보를 담고 있는 기본 설계도
- 인스턴스 유형
- 인스턴스를 시작할 때 인스턴스 유형에 따라 사용되는 호스트 컴퓨터의 하트웨어가 결정됨 ( T2, T3...?? )
- SSH 프로토콜을 통한 연결
- .PEM 파일을 사용
- 키 페어 생성
- 세션 매니저(Session Manager)를 통한 연결 (최신)
S3 (Simple Storage Service)
- 스토리지
- 객체 스토리지
- 객체 = 문서, 이미지, 비디오 등 비교적 단순한 구조의 데이터
- 블록 스토리지
- 서버 인스턴스에 디스크 볼륨의 형태로 제공되는 데이터
- 파일 스토리지
- 파일 스토리지에서의 데이터
- 객체 스토리지
- 버킷(Bucket)
- 객체를 저장하는 컨테이너, 폴더 역할
- 버킷의 이름은 유일한 이름을 사용
- 객체(Object)
- 버킷에 저장한 모든 것
- 그 외 특징
- 정적 웹 사이트 호스팅으로 사용 가능
- 강한 내구성, 확장성, 저렴
RDS
- 다양한 RDBMS 엔진 사용 가능 ( MySQL / Oracle .. )
- 확장성
- 데이터베이스 인스턴스의 타입을 변경하여 스케일업, 스케일 다운 가능
- RDS 장점
- 비지니스 가치에 집중
- 데이터 베이스 관리 업무를 원하지 않는 경우
- 회사 내 데이터 베이스 관리 역량이 충분하지 않은 경우
- 데이터 베이스에 여러 (AZ)가용 영역이 복제되어 있는 경우
- EC2 장점
- 데이터 베이스 인스턴스의 완전한 통제권을 원하는 경우
- 백업, 복제, 클러스터링 등에 대한 통제권 포함
- 기업의 RDBMS 엔진의 주요 기능이 RDS와 맞지 않는 경우
Cloud 배포 4단계 (Development / Intergrating / Staging / Product )
Development 1단계
- 각자의 컴퓨터에서 코드를 작성하고 테스트하는 과정
- 더미테이터 사용
Intergrating 2단계
- 각자의 컴퓨터에서 작성한 코드를 합치는 과정
- 코드 간 오류나 충돌 여부 확인
Staging 3단계
- 실제 출시 단계 Production 단계와 가장 유사한 환경에서 테스트 진행
- 모든 관계자에게 확인을 거치는 과정
Product 4단계
- 개발된 서비스를 출시하는 단계
- 서비스가 운영중으로 절대 문제가 발생하면 xx
Development와 Production 환경/ 개발자 간의 환경도 다를 수 있다. 그러므로 배포에서는 환경의 차이를 이해하고 환경 설정을 코드와 분리하는 것이 중요하다.
- 절대 경로 x / 상대 경로 o
- .properties 등을 이용해 환경 변수 설정
- 환경에 따라 포트를 분기할 수 있도록 환경변수 설정
- (Advanced) Docker와 같은 개발 환경 자체를 통일시키는 솔루션 사용
- 가상화 도구로 환경을 메타 데이터로 담아 모든 개발환경을 통일
- 어플리케이션의 설정이 코드 바깥으로 분리되어 있는지 확인
- 인증정보 유출시키지 않고 오픈 소스가 될 수 있는지 확인
클라우드 서비스 벤더사(Vendor) 종류
- heroku
- DigitalOcean
- Microsoft Azure
- Firebase
- AWS
Amazon EC2(Elastic Compute Cloud)
- AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터 한 대 빌리는 것
- 클라우드를 통해 서버, 스토리지, 데이터베이스 등의 컴퓨팅 서비스를 제공하는 서비스
- Elastic이란 단어가 사용된 이유는 비용, 성능, 용량을 사용자가 원하는 만큼 자유롭게 조절이 가능함
- 구성하는데 필요한 시간이 짧다.
- AMI를 통해서 필요한 용도에 따라 운영체제 선택이 가능 ( + CPU, RAM, 용량 )
- (기본적인 역할) 웹서버를 설치하고 웹서버를 통해 사용자의 요청에 대한 서비스를 제공
- 인스턴스는 1대의 컴퓨터를 의미하는 단위이며, 1대를 빌린 상태 (컴퓨터를 1대 대여 = 인스턴스 생성)
- AMI(Amazon Machine Image)
- 소프트웨어 구성이 기재된 템플릿으로 운영체제만 설치되어 있을 수 있고, 런타임이 설치되어있는 템플릿도 있음
- Amazon EC2 -> AMI -> Instance
RDS (Relational Database Service)
- AWS에서 제공하는 관계형 데이터 베이스 서비스
- 데이터 베이스를 설치해서 사용할 경우 👎
- 설치, 버전관리, 데이터 백업 등 자원이 소모
- 가용성과 내구성이 확보되지 않기 때문에 데이터의 유실, 또는 정상 작동하지 않을 확률 상승
- 데이터베이스의 규모를 확장하기가 어려움
- RDS를 사용할 경우 👍
- 데이터 베이스의 유지 보수와 관련된 일을 RDS에서 전적으로 자동 관리
- 사용자는 초기 설정과 데이터베이스 저장된 데이터 관리만 하면 끝!
- RDS 사용시 다양한 데이터 베이스 엔진을 선택할 수 있다.
- ORACLE
- Amazon Aurora
- SQL Server
- MySQL
- MariaDB
- PostgreSQL
클라우드 스토리지란!?
- 인터넷 공간에 데이터를 저장하는 저장소 ex.) Onedrive, Google Drive
- 뛰어난 접근성을 가짐
S3 (Simple Strorage Service)
- AWS에서 제공하는 클라우드 스토리지 서비스
- 데이터를 무한히 저장이 가능 (확장성) (사용한 만큼만 비용 지불)
- 강력한 내구성 (파일 유실될 가능성 거의 희박)
- 높은 가용성 보장 (99.99%)
- 다양한 스토리지 클래스 제공
- Standard 클래스
- 범용적인 목적으로 데이터에 대한 빠른 접근과 액세스 처리 속도가 빠름
- but 비용이 많이 발생하므로 오래 보관하기에는 비 효율적
- Glacier 클래스
- 장기적 보관 목적에 효율적
- 엑세스 속도는 느리지만 보관하는 비용이 저렴
- Standard 클래스
- 정적 웹 사이트 호스팅 가능
- 정적 파일 : 서버의 개입 없이 클라이언트에 제공될 수 있는 파일
- 웹 호스팅 : 서버의 한 공간을 빌려 웹 사이트 배포, 운영이 가능하게 만드는 서비스
- S3에서는 버킷을 통해 웹 사이트 호스팅이 가능
- 버킷!?
- 무수히 많은 파일 저장 가능
- 버킷의 이름은 속해있는 리전에서 유일해야 함
- 버킷 정책을 생성하여 다른 유저의 접근 권한을 수정할 수 있음
- 객체!?
- 버킷에 담기는 파일을 객체라 부름
- S3에서 데이터를 저장할 때 Key + Value 페어 형식으로 저장하기 때문에 객체라 부름
- 객체 = 파일 + 메타 데이터
- 파일
- key + value 페어 형식
- 데이터 최대 크기 5TB
- 실제 데이터 저장
- 객체를 고유하게 만들어주는 식별자 역할
- 파일의 키를 이용해서 원하는 객체 검색 가능
- 메타 데이터
- 객체 생성일, 크기, 유형과 같은 정보를 담고 있는 데이터 (객체를 설명하는 데이터)
- 파일
- 모든 객체는 고유한 URL 주소를 가지고 있음
- URL주소는 http://[버킷의 이름].S3.amazonaws.com/[객체의 키]
- URL을 통해 데이터에 접근 가능
- 버킷!?
3 Tier-Architecture ( Cient 배포 / Server Application 배포 / Database 배포 )
Client 배포
- S3 서비스를 이용해서 이용자들에게 Client application을 제공
- S3 서비스를 통해 클라이언트 앱을 정적파일로 빌드하여 제공
- AWS에서 제공하는 CDN 서비스 CloudFront 이용
- 각 데이터센터에 분산해서 저장해 두고, 가까운 지역에서 데이터를 전송하는 방법으로 빠른 서비스 제공 가능
- 빌드란!?
- (일반적인 의미의 빌드) 소스코드를 실행 가능한 번들로 변환하는 컴파일 과정을 의미
- 불필요한 데이터를 없애고, 통합/압축하여 배포에 최적화 상태로 구성
- 데이터의 용량도 줄고, 로딩 속도가 빨라짐
- 웹앱에서와 같이 HTML, CSS, JS의 형태로 배포하는 경우에는 정적 파일의 형태로 만들어 줘야 함
- React의 경우 rpm run build와 같은 명령을 사용해서, 정적 파일 형태의 결과물을 만들어 낸 후 배포할 수 있음
Server Application 배포
- AWS EC2를 통해 서버 코드를 구동
Database 배포
- AWS에서 Database 특화 서비스 RDS 서비스 이용
- EC2를 통해 배포된 Server Application의 데이터를 저장, 제공할 수 있는 데이터베이스를 배포
도메인 설정
AWS에서 제공하는 Route 53 서비스를 이용하면 직관적인 도메인 주소를 통해 서비스에 접근할 수 있음
728x90
반응형