🐕 아마존 웹 서비스 (aws)
아마존 웹 서비스(AWS)란 아마존닷컴의 클라우드 컴퓨팅 사업부에서 제공하는 클라우드 컴퓨팅 서비스라고 할 수 있습니다.
AWS에는 컴퓨팅, 스토리지, 데이터베이스, 분석, 네트워킹, 모바일, 개발자 도구, 관리 도구, IoT 보안, 엔터프라이즈 애플리케이션 등 다양한 서비스가 제공되고 있고 필요에 따라 운영체제, 웹 서버, DB, 서버 등까지도 통째로 빌려 사용할 수 있는 서비스입니다.
또한 모든 서비스를 API로 제어할 수 있다는 점이 특징이며 기본적으로 HTTP, REST, SOAP로 이루어지게 됩니다.
Management Console이 제공되며 이것을 통하여 제품들을 클릭 몇번으로 간단하게 제어하는 것도 가능합니다.
이처럼 AWS에서 제공하는 다양한 기능들을 잘 활용하면 애플리케이션에 필요한 많은 것들을 얻을 수 있습니다.
👻AWS 특
1. 서비스 조합이 쉽습니다. AWS에서 제공하는 서비스만으로도 애플리케이션에 필요한 기능 대부분을 구축하는것이 가능합니다.
2. 필요한 만큼만 사용하고 부족해지면 그때마다 추가할 수 있습니다. 이는 사용량을 예상하기힘들고 유동적인 경우가 많은 애플리케이션에 매우 유용합니다.
3. 네트워크 및 서버가 매우 커다란 규모가 아니라면 네트워크나 서버 전문가가 아니더라도 쉽게 사용할 수 있습니다.
4. 31개의 region내에 99개의 가용 영역을 운영하고 있어 글로벌로 확장 시 지리적으로 가까운 리전에서 서비스를 시작할 수 있습니다. 추가로 한국에도 지사가 있습니다.
5. 한국어 지원 및 원화 결제가 가능하다는 특징이 있습니다.
🥶 온 프레미스?? (on premise)
온 프레미스는 기업의 서버를 클라우드와 같이 '가상의 공간'이 아니라, 자체적으로 보유하고 있는 서버에 직접 설치하고 운영하는 방식을 말합니다.
현대의 클라우드 컴퓨팅은 데이터 센터와 비슷한 역할을 수행하기는 하지만 물리적인 컴퓨터를 대여하는게 아니라 가상 컴퓨터를 대여한다는 점이 다릅니다.
🌞Saas / IaaS / PaaS
클라우드는 서비스의 형태에 따라 대표적으로 세가지로 나눌 수 있습니다.
SaaS IaaS PaaS가 바로 그것입니다.
이름 | 제공하는 서비스 범위 |
SaaS | 네트워크 하드웨어 운영체제 플랫폼/데이터베이스 애플리케이션 |
PaaS | 네트워크 하드웨어 운영체제 플랫폼/데이터베이스 |
IaaS | 네트워크 하드웨어 |
SaaS는 Software as a Service의 약자로 클라우드 제공자가 당장 사용 가능한 소프트웨어를 제공하는 경우 대부분 SaaS에 해당한다고 할 수 있습니다.
PaaS는 Platform as a Service의 약자입니다. 클라우드 제공자가 데이터베이스, 개발 플랫폼까지 제공하는 경우에는 대부분 PaaS에 해당합니다.
IaaS는 infrastructure as a Service의 약자입니다. 클라우드 제공자가 가상 컴퓨터까지 제공하는 경우 대부분 IaaS에 해당합니다.
😋EC2
EC2는 AWS에서 제공하는 서비스 중 하나입니다.
Elastic Compute Cloud의 줄임말로 "켜놓은 시간을 기준으로 과금하는 구조" 라고 이해할 수 있습니다.
Elastic은 탄력적인이라는 의미로 서비스를 사용한 만큼만 값을 지불하기도하고 필요에 따라 성능, 용량을 자유롭게 조절할 수도 있는 AWS의 구조에 잘 맞는 단어여서 들어가있는 것 같네요!
이러한 EC2는 성능 좋은 인스턴스를 사용할수록 과금액이 기하급수적으로 늘어나기 때문에
작은 서버 여러대로 분산처리를 하는 것이 거의 필수적입니다.
또한 새 서버 인스턴스를 생성하고 프로그램 올리고 구동하는게 전부 제공되는 API로 다 되기 때문에 auto scaling 서비스와 연계해서 트래픽이 몰리면 인스턴스를 자동으로 늘려서 대응하고 트래픽이 줄어들면 만들었던 인스턴스를 없애는 일 또한 할 수 있습니다.
이 EC2는 AMI라는 다양한 탬플릿을 제공하는 것을 통해 손쉽게 운영체제를 선택하고 구성할 수 있습니다.
거기다가 CPU와 RAM, 용량까지도 손쉽게 구성할 수 있어요!
인스턴스는 선택한 AMI를 토대로 구성됩니다. AWS에는 상당히 많은 AMI 세팅이 있기때문에 손쉽게 구성을 할 수 있습니다만 필요에 따라서 AMI를 커스터마이징 할 수도 있습니다.
그래서.. 즉 AWS EC2 인스턴스를 생성한다는 것은 AMI를 토대로 운영체제, CPU, RAM 혹은 런타임 등이 구성된 컴퓨터를 빌리는 것을 말한다고 볼 수 있습니다.
🤢인스턴스의 종류
On - Demand Instance | 사용한 만큼 과금 되며 과금 단위는 1분입니다. 즉 1초를 사용해도 1분어치가 과금됩니다. |
Spot Instance | 현재 사용되고 있지 않은 EC2 자원을 경매로 싸게 낙찰받아 이용하는 방법입니다. |
Reserved Instance | 사용할 기간 (1년 혹은 3년)과 사용량(No/Partial/All Upfront)을 정해서 초기 선납 비용을 내고 시간당 사용료를 할인 받는 방법입니다. |
🤮RDS(Relational Database Service)
RDS(Relational Database Service)는 AWS에서 제공하는 관계형 데이터 베이스 서비스를 의미합니다.
그런데 EC2는 하나의 가상 컴퓨터를 대여받는 서비스라고 했는데 데이터베이스도 그냥 EC2 인스턴스에 같이 설치해서 돌리면 되지 않을까요?
라고 생각했는데 EC2 인스턴스에 데이터 베이스를 설치하는 것은 문제가 있습니다.
예컨대 EC2 인스턴스 내에 데이터베이스를 구축한 경우 데이터베이스와 관련해서 자동으로 관리되는 부분이 적기 때문에 사용자가 일일이 데이터베이스 엔진의 설치, 버전 관리, 데이터 백업 등을 진행해줘야 합니다.
또한 가용성, 내구성이 확보되지 않기 때문에 데이터베이스에 저장된 데이터가 유실되거나 정상적으로 사용하지 못할 가능성이 커지게 되며 규모를 확장하기도 어려워집니다.
그에 반해 RDS를 사용하면 데이터베이스 유지 보수와 관련된 일들을 RDS에서 전적으로 자동 관리해주기 때문에 사용자는 초기설정을 해주는 일만 해주고 나면 데이터베이스에 저장된 데이터를 관리하기만 하면 되어서 매우 편리하게 이용이 가능합니다.
또한 RDS를 채택하는 경우 Oracle, Amazon Aurora, SQL Server, MySQL, MariaDB, PostgreSQL 등 다양한 데이터베이스 엔진 선택지를 제공한다는 장점이 있습니다.
🥰S3(Simple Storage Service)
S3는 AWS에서 제공하는 클라우드 스토리지 서비스입니다.
이 S3를 사용하게 되면
1. 높은 확장성(데이터 저장 공간을 쉽게 확장할 수 있습니다.)
2. 강한 내구성(저장된 파일이 유실될 가능성이 적습니다.)
3. 높은 가용성(스토리지에 저장된 파일들을 정상적으로 사용할 수 있는 시간이 길어집니다.)
4. 다양한 스토리지 클래스 제공
이 중 AWS가 높은 가용성을 보장할 수 있는 이유가 꽤나 흥미롭습니다.
앞서 살펴보았듯 AWS는 Region과 Availabillity Zone을 전세계적으로 엄청 많이 갖고 있다는 것을 알 수 있었습니다.
AWS는 수많은 AZ(Availabillity Zone)을 가지고 있어 한 곳의 가용 영역이 가동이 불가능해지더라도 다른 가용 영역에 백업해놓은 데이터를 활용하여 문제없이 서비스가 이루어지도록 합니다.
이런 방식 덕분에 AWS는 높은 가용성과 내구성을 보장할 수 있는 것이랍니다
스토리지 클래스는 다양한 클래스가 존재하지만 S3 사용자들이 가장 많이 선택하는 스토리지 클래스를 꼽아보라고하면 두가지가 있습니다.
Standard 클래스와 Glacier 클래스가 바로 그것입니다.
Standard 클래스 | 범용적인 목적으로 사용하기 좋습니다. 데이터에 빠른 속도로 접근할 수 있고 액세스 요청에 대한 처리속도도 빠릅니다. 대신 데이터를 오래 보관하고자하면 보관 비용이 높게 발생합니다. |
Glacier 클래스 | 장기적인 보관 목적으로 스토리지를 사용할 때 효과적인 플랜입니다. 저장된 데이터에 액세스하는 속도는 느리지만 데이터를 보관하는 비용은 매우 저렴합니다. |
이외에도 Standard-IA, One Zone-IA , S3 Glacier Deep Archive 등 여러가지 스토리지 클래스가 존재합니다.
또한 S3를 사용하면 정적 웹 사이트 호스팅이 가능해집니다.
S3에는 버킷이라는 개념이 존재합니다.
버킷은 S3에 저장되는 파일들이 담기는 바구니로 이해할 수 있으며
파일을 저장하는 최상위 디렉토리라고 정의할 수 있습니다.
S3에서 저장되는 모든 파일은 따라서 버킷 안에 저장되어야하고 버킷에는 엄청나게 많은 양의 파일을 저장할 수 있습니다.
또한 각각의 버킷은 이름을 갖고있는데 버킷이 속해있는 리전(버킷이 생성된 지역)에서 이름이 유일해야합니다.
S3에는 객체라는 개념도 존재합니다.
객체는 버킷에 담기는 파일을 일컫는 말입니다.
객체라고 부르는 이유는 저장소에 데이터를 저장할 때 키-값 쌍의 형태로 데이터를 저장하기 때문입니다.
S3에 저장되는 객체는 파일과 메타데이터로 구성됩니다.
파일 | 실제 데이터를 저장하며 S3 객체의 값으로써 저장될 수 있는 데이터의 최대 크기는 5TB입니다. 파일의 키는 각각의 객체를 고유하게 만들어주는 식별자의 역할을 하며 파일의 키를 이용해 원하는 객체를 검색하는 것이 가능합니다. |
메타데이터 | 메타데이터는 객체의 생성일, 크기 , 유형과 같은 객체에 대한 정보가 담긴 데이터입니다. 객체를 설명하는 데이터라고 요약할 수 있습니다. |
모든 객체는 고유한 URL 주소를 가지고 있으며 URL 주소는
http://[버킷 이름].S3.amazonaws.com/[객체 키]의 형태를 띱니다.
🙀배포(Deploy)
배포는 개발한 서비스를 사용자들이 이용할 수 있게 하는 일련의 과정을 뜻한다고 할 수 있습니다.
기본적으로는 4가지 단계를 거쳐서 개발한 서비스를 배포하게 되는데
Development | Integration | Staging | Production |
로컬 환경에서 테스트 변경사항 있어도 ㄱㅊ 각자의 환경에서 진행 |
개발한 것 취합 코드간 conflict 확인 충돌 문제 확인 |
프로덕션단계와 비슷한 환경에서 테스팅 복제된 실제 데이터를 이용해서 테스팅 모든 관계자들에게 검증하는 단계 |
개발환경과는 구분된 환경 실제 데이터를 이용 실제로 서비스가 제공되는 단계 |
이 4가지 단계를 거치게됩니다.
그런데 개발환경과 프로덕션 환경은 다를 수 있습니다.
이런 경우 다른 환경에서도 작성한 코드가 잘 작동할 수 있게 코드를 작성하는 것이 중요합니다.
그것을 도와주는 방법들을 몇가지 소개하겠습니다.
1. 절대 경로 대신 상대 경로 사용하기
2. 환경에 따라 포트를 분기할 수 있도록 환경 변수 설정하기
3. Docker와 같이 개발 환경 자체를 통일시키는 솔루션을 사용하기
🐶레퍼런스
https://web-front-end.tistory.com/74
https://namu.wiki/w/%EC%95%84%EB%A7%88%EC%A1%B4%20%EC%9B%B9%20%EC%84%9C%EB%B9%84%EC%8A%A4
https://opentutorials.org/module/328/3002
https://doitnow-man.tistory.com/278
https://aws.amazon.com/ko/getting-started/cloud-essentials/?nc2=h_ql_le_gs_awsf
'frontend' 카테고리의 다른 글
webpack proxy 설정 에러 해결방법.. (0) | 2023.06.07 |
---|---|
Github Action으로 S3 배포 자동화하기 (0) | 2023.06.05 |
AWS EC2에서 git ssh key 생성하고 사용하기.. (0) | 2023.06.04 |
aws ec2 인스턴스에 node.js/ nvm 설치방법 (0) | 2023.06.03 |
CI/CD와 무중단 배포 (1) | 2023.05.10 |