AWS TechCamp [기초 과정] : AWS 서버리스로 서버 고민 없이 웹 애플리케이션 구축하기
요즘 서버 구성하는 데 있어서 거의 필수라고 할 수 있는 것이 바로 클라우드가 아닐까 싶다.
서버를 구성하는 데 있어서 초기 자본이 거의 안 들기도 하거니와, 각종 서비스를 클라우드 서비스 플랫폼에서 해결해 주어서 온전히 개발에만 집중한다든지 등등 서버 개발 환경 또한 커스터마이징 할 수 있기 때문이다.
그래서 구글의 GCP, 아마존의 AWS, 마이크로소프트의 Azure 뿐만 아니라 국내에서도 네이버 클라우드 등 IT 쪽으로 한가닥 한다는 기업들은 저마다 클라우드 서비스를 운영하고 있다.
그중에서 오늘날 널리 사용되기도 하고, 이번 글에서 중점적으로 다루기도 할 클라우드 플랫폼은 바로 AWS다.
AWS는 Amazon Web Services의 약자로, 글로벌 회사인 아마존에서 운영하는 클라우드 플랫폼이다.
점유율이 제일 높고, 특히 우리나라에서는 압도적으로 AWS 사용 비율이 높은 편이다.
(공정거래위원회에 의하면, 2019년 - 2021년 국내 클라우드 시장에서 AWS 점유율이 70%에 달한다고 한다: 참고-> https://www.kcloudnews.co.kr/news/articleView.html?idxno=13359)
그래서 취업할 때도 클라우드 관련 요구 사항으로는 AWS 사용 경험 유무를 물어본다. 혹은 AWS 자격증이 있다든지.
나 또한 AWS에 대한 관심이 점점 많아지고 있는데, 마침 AWS에서 무료 교육을 진행한다고 해서 잽싸게 신청했다.
AWS TechCamp에서 기초 과정으로 진행하는 [AWS 서버리스로 서버 고민 없이 웹 애플리케이션 구축하기]이었다.
오전 9시부터 3시간 정도 진행되는 교육이었고, 온라인 줌 수업으로 진행했다.
강사는 AWS 교육 담당 직원이 나와서 진행했고, 교육 듣는 인원은 대략 600명 정도 되었던 거로 기억한다.
강의 방식은 초반에 ppt와 함께 간단하게 서버리스 아키텍처에 대해 알려준 후, 실습을 진행했다.
이제부터 본격적으로 교육 내용에 관해서 얘기하도록 하겠다.
---
3-tier 서버리스 아키텍처로 구성하는데, s3에서 정적 웹페이지 호스팅을 했고, api gateway 에서 rest api를 세팅했고, lambda에서 실행할 스크립트를 세팅, db로는 NoSQL 기반의 DynamoDB를 사용했다.
학원에서 기본적인 구성인 ec2-rds-s3 조합으로 프로젝트를 진행해본 적이 있어서, 이번에 서버리스 아키텍처로 실습을 진행하면서 두 아키텍처의 차이점과, 서버리스로 하면 얼마나 관리하기 편해지는지 어느 정도 체감할 수 있었다.
예를 들어, 장애가 나더라도 자동으로 고쳐지거나, 백업 등의 기능을 수행하려면 원래 복잡한 세팅을 해줘야 하는데, 서버리스 아키텍처로 구성하면 버튼 딸깍으로 간편하게 세팅할 수 있어서 많은 시간을 절약할 수 있다.
이런 세팅 관련하여 잘 모르는 사람들이라면 수월하게 도움 받으면서 애플리케이션을 개발할 수 있을 것이고, 잘 아는 개발자에게는 시간 단축과 관리의 용이성으로 생산성이 증가되는 효과를 볼 수 있을 것이다.
특히 간단한 테스트나 별 용량이 없거나, 초기 프로토타입 같은 경우에는 서버리스가 더욱 유용하겠단 생각이 들었다.
빠르게 세팅할 수 있는 것은 물론, ec2처럼 인스턴스 유지 시간만큼 비용이 나가는 게 아니라 사용한 만큼만 비용이 청구되는 방식이어서 초기 운영에 안성맞춤이어서다.
나는 실습을 하면서 바로 적용해 볼 만한 아이디어가 하나 생각났는데, 바로 이력서 페이지를 업로드하는 것이다.
이력서 페이지는 간단한 정적 웹페이지로 한 두장의 html로만 이루어지면 되는 구조여서, 굳이 복잡한 세팅이 필요하지 않았다.
ec2 인스턴스를 만들고 세팅하는 작업 자체가 배보다 배꼽이 더 큰 격이다.
ec2를 만들기엔 좀 애매해서 고민했었는데, 이렇게 서버리스를 구성할 수 있으면 별 비용이나 힘을 들이지 않고 간단히 유지할 수 있을 것 같다.
이외에도 서버리스가 모바일 게임 서버 같은 간단한 웹 서버를 운영하기도 좋을 것 같다는 생각이 들었다.
실시간으로 운영되어 성능에 민감하다면 따로 C++ 기반으로 서버를 구성해야겠지만, 단순 API 호출 용도로 구성된 비동기식 서버라면 간단하게 AWS의 서버리스 아키텍처로 구성할 시 서버에 대한 큰 지식 없이 간단히 운영할 수 있을 것 같다.
---
수업은 조금 일찍 끝나서 2시간 30분 정도의 분량이었다.
아침 9시부터 시작한 거라 그냥 안 듣고 잘까 고민했었는데, 그래도 듣길 잘했단 생각이 들었다.
---
아래부터는 실습하면서 정리한 내용이다.
---
physical machines > Virtual machines > containerization
container까지는 관리의 대상.
serverless >>
지속적인 스케일링(auto-scaling)
빌트인된 내결함성(작업 필요 x)
사용한 만큼만 과금
zero 유지보수
비즈니스 가치에 집중
서버리스의 장점 >>
서버 관리 필요 없음
사용한 만큼만 지불
요청에 맞게 스케일링
높은 보안 수준(많은 보안 관련 커버)
다양한 범주의 서버리스 서비스 >>
compute: Aws Lambda
data stores : Amazon s3, Amazon Aurora Serverless(아마존 자체 데이터베이스), Amazon DynamoDB(key value로 저장)
3-tier 서버리스 아키텍처 구성
webpage 호스팅: s3
webpage의 기능을 호출하는 통로: amazon api gateway
webpage의 기능을 가지고 있는 lambda: service(Lambda)
Member의 내용을 저장하는 데이터베이스: amazon dynamodb
--
aws lambda의 특성
불필요한 서버 관리
자동 확장
고가용성 및 보안(고가용성: 장애가 안 나는 아키텍처, 장애가 나더라도 자동으로 고쳐지는 아키텍처(보통 이중화를 많이 함. 쉬운 작업이 아니지만 lambda를 사용하면 자동으로 세팅됨))
사용한 만큼만 지불(실제 인스턴스는 초당 과금. 람다는 요청당 비용 과금. 요청 들어오는 것과 실행 시간 계산하여 과금)
---
API Gateway는 API 기반 아키텍처의 관문
사용자의 트래픽을 여러 서비스(람다 포함)들로 트래픽 전달
다양한 API 유형 지원(RESTful: HTTP APIs & REST APIs, websocket)
---
Amazon DynamoDB
대규모 성능에 최적화된 완전 관리형 NoSQL 데이터베이스 서비스.(인스턴스를 만들지 않음.(인스턴스를 만들게 되면 관리의 대상이 된다는 것임))
서버리스(유지관리 불필요, 오토 스케일링, 고가용성 및 내결함성)
높은 성능(Known access pattern이 있는 애플리케이션에서 이상적 성능, 초당 수백만의 요청 처리 및 짧은 지연시간, 자동화된 글로벌 복제, 다른 AWS 서비스와 통합)(사람들이 많이 들어오더라도 안정적인 지연시간 유지)
보안 및 액세스(전송 중 및 저장 시 암호화, API/ORM을 통한 세부적인 액세스 제어, IAM을 통한 승인)
---
데이터베이스 확장
SQL(수직적 확장)(수직적인 확장은 성능을 높이는 데에 한계가 있음)
NoSQL(다수의 샤드로 수평 확장. 성능의 한계가 없음)
수평으로 확장 가능하도록 데이터가 설계되었다는 것을 기본 전제로 한다.
---
DynamoDB에서는 column대신 attribute를 쓴다.
row 대신 Item를 쓴다.
---
S3
어디서나 원하는 양의 데이터를 저장하고 검색할 수 있도록 구축된 객체 스토리지
특징: 확장성, 데이터 가용성(총 6개의 데이터가 복제되어 안전성이 늘어남.), 보안, 성능
웹 호스팅 기능 제공(정적 웹사이트 호스팅 제공: 서버 측 스크립팅은 지원하지 않음)
버킷은 기본적으로 퍼블릭 액세스(외부 접속)가 차단되어 있음.(차단 비활성화 세팅해 줘야 외부에서 접속 가능)
버킷의 권한과 오브젝트의 권한이 별도이기 때문에 오브젝트도 별개로 외부 권한을 허용하는 세팅 해줘야 함.
(버킷 정책 사용)
---
웬만하면 root를 사용하지 않는다.
사용자를 만들어서 사용.
-----
EC2 >>
---
하나의 리전은 고가용성, 확장성과 내결함성을 위해 3개 이상의 AZ로 구성된다.(Availability Zone)
AZ(가용 영역) >>
모든 AWS 리전은 지리적 영역 내에서 격리되고 물리적으로 분리된 최소 3개의 AZ로 구성된다.
모든 가용 영역은 AWS 리전의 중복 전력, 네트워크 및 연결이 제공되는 하나 이상의 개별 데이터 센터로 구성된다.
AZ 간에는 높은 대역폭, 10ms 이하의 짧은 지연 시간의 네트워크로 구성된다.
AZ 간 모든 트래픽은 암호화된다.
모든 AZ는 서로 100km 이내 거리에 위치한다.
---
EC2 >>
Arm 및 x86 아키텍처
범용 및 특정 워크로드 최적화
베어 메탈, 디스크, 네트워킹 기능
다양한 구매 옵션: 온디맨드 인스턴스, 스팟 인스턴스, 예약 인스턴스(RI), 절감형 플랜(Savings Plans), 전용 호스트
리전 안에 수많은 호스트 서버 위에 하이퍼바이저를 설치한 가상 서버
AMI >>
Amazon Machine Image
인스턴스 시작에 필요한 정보 제공
동일한 구성으로 한 AMI에서 여러 인스턴스 시작 가능.
---
인스턴스 목적에 따라서 다양한 유형 중에 하나를 고름.
(범용, 컴퓨팅 최적화, 메모리 최적화, 가속화된 컴퓨팅, 스토리지 최적화)
---
elastic load balancing
네트워크 트래픽 분산을 통한 애플리케이션 확장성 개선
여러 가용 영역을 기반으로 고가용성 제공
트래픽에 따라 자동 조정
>> 서버의 부하를 분산시키고 가용성을 높여줌
---
EC2 Auto Scaling
변화하는 수요에 동적으로 대응하고 비용을 최적화
가용성과 시스템 안정성이 높아짐.
Fleet management(비정상 인스턴스 교체)
Dynamic scaling(수요에 맞게 확장)
---
시작 템플릿(Launch Template)
시작을 간소화하고 단순화하기 위해 시작 요청을 템플릿화
(일관된 경험, 단순한 권한, 생산성 향상)
(버전 관리도 가능)
---
VPC >>
VPC를 통해서 가상의 격리된 클라우드 공간 생성 가능.
리전 안에 VPC 생성
VPC 안에 서브넷 네트워크 생성 및 EC2 인스턴스, 데이터베이스 세팅. 그룹화시키는 것이 목적.
운영체제&네트워크/AWS