[레포트] 대용량 트래픽 처리에 최적화! AWS 서버리스
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 AWS Partner Summit Korea 2022 세션중「대용량 트래픽 처리에 최적화! AWS 서버리스」세션을 정리해 봤습니다.
세션 개요
DESCRIPTION
서버리스는 서버나 OS의 운영 부담은 줄이고, 서비스 개발에 집중 할 수 있어 요즘 클라우드에서 가장 인기 있는 디자인 패턴입니다. 이번 세션에서 클라우드계의 씬 스틸러, AWS 서버리스를 직접 경험해보세요. 준비된 5개의 모듈만 수행하면 자동화나 단순한 이벤트 처리에 활용하던 AWS Lambda를 확장해 대용량 트래픽을 처리하는 서버리스 애플리케이션을 개발하고 최적화하는 방법을 배울 수 있습니다.
SPEAKERS
강연자
세션
Agenda
- 모놀리틱, 마이크로 서비스…서버리스
- 서버리스 애플리케이션(AWS Lambda, Amazon API Gateway)
모놀리틱, 마이크로 서비스…서버리스
- 많은 사람들이 마이크로서비스 어키텍처를 구축하고 있음
- 하지만 생각처럼 되지 않는 경우가 많이 발생하곤 함
- 너무 많은 종속성이 생기다 보니 워크로드가 의도와는 다르게 모놀리식한 구조로 밀접하게 결합되는 현상을 겪게 됨
- 성공적인 마이크로서비스 구축을 위해서는 애플리케이션 개발 및 운영의 현대화가 필요
- 이를 위해서는 애자일한 개발 프로세스와 모듈 기반의 아키텍처 설계가 필요하고, 서버리스 운영 모델을 통해서 부담을 최소화하는 것이 필요
- AWS는 관리형 컨테이너 서비스와 다양한 서버리스 서비스를 제공
-
이를 통해 구축한 서버리스 애플리케이션의 특징은 운영 오버헤드를 최소화하면서 거의 대용량 트래픽을 처리할 수 있도록 원활하게 스케일링 가능하다는 것
-
AWS는 이를 위한 다양한 솔루션 등을 제공하고 있음
서버리스 애플리케이션(AWS Lambda, Amazon API Gateway)
-
AWS가 익숙한 분들은 서버리스라고 했을 때 AWS Lambda를 많이 떠올렸을 것
-
하지만 AWS Lambda 외에도 컴퓨트, 데이터 저장, 그리고 애플리케이션 운영 및 통합을 위한 다양한 서비스를 이미 서버리스 형태로 많이 제공하고 있음
-
AWS Lambda는 서버를 프로비저닝 하지 않고도 내가 작성한 코드를 실행시켜주는 서버리스 컴퓨티의 가장 대표적인 서비스
-
Lambda에서 실행할 수 있는 Runtime은 가장 많이 활용되는 언어인 Node, Python, Java 등을 모두 네이티브 하게 지원하고 있고, 그 외에 언어는 사용자 지정 Runtime을 활용해 개발하고 실행할 수 있음
-
이렇게 작성한 Lambda 함수를 실행함에 있어 가장 중요한 것은 “이벤트”
-
Lambda는 이미지와 같이 데이터의 상태 변화나 특정 엔드포인트로 들어오는 요청, 혹은 Lambda를 호출하도록 설정해둔 리소스의 상태 변화 등에 의해 실행되게 됨
-
이렇게 이벤트에 의해 트리거된 Lambda 함수는 작성해둔 로직을 그대로 실행함
-
이때는 API나 SDK에서 지원하는 작업 거의 대부분을 수행할 수 있음
-
한마디로 특정 이벤트가 발생했을 때 Lambda가 실행이 되어서 내가 코드에 작성해둔 로직을 수행한다 그것이 AWS Lambda 서비스임
-
Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링할 수 있도록 하는 서버리스 기반의 완전관리형 서비스
-
API는 애플리케이션이 백엔드 서비스의 데이터, 비즈니스 로직 또는 기능에 액세스할 수 있는 “정문” 역할을 함
-
앞에서 개발 했던 Lambda 함수를 API Gateway에 등록함으로써 클라이언트나 서비스에서 REST API 기반으로 요청할 수 있는 엔드포인트를 제공함
-
API Gateway는 엣지 최적화, 리전, 프라이빗 등 세 가지 종류의 엔드포인트를 제공하며 캐싱 및 간편한 모니터링과 같은 다양한 기능도 함께 제공함
-
API Gateway를 사용하면 실시간 양방향 통신이 가능한 WebSocket API 및 서버리스 워크로드 및 HTTP 엔드포인트에 최적화된 Restful API를 구축할 수 있음
-
API Gateway에서는 REST API, HTTP API 두 가지 버전을 제공
-
가장 일반적인 서버리스 기반 애플리케이션은 API Gateway를 이용해서 엔드포인트를 제공하고 백엔드는 Lambda가 수행하고 데이터는 관리형 데이터베이스 서비스인 AWS RDS를 활용하는 단순한 아키텍처임
-
서버리스 애플리케이션의 경우 Amazon DynamoDB도 많이 활용되지만 이번 세션에서는 관계형 데이터베이스 기준으로 설명
- 운영 관점에서는 모니터링이 가장 중요
- API Gateway 액세스 로그를 활성화하여 로깅을 할 수 있고 AWS X-Ray를 활용해 API 요청에 대한 가시성을 높이거나 Amazon CloudWatch의 다양한 메트릭을 모니터링할 수 있음
- 안정성 측면에서는 초당 요청 건수에 따라 Lambda의 Provisioned Concurrency 를 구성해 백엔드를 보호할 수 있음
- 이를 통해 스로틀링을 방지함으로써 애플리케이션의 안정성을 향상시킬 수 있고 아니면 API Gateway의 할당량을 구성하여 과도한 요청이 백엔드로 전달되는 것을 방지하는 것도 가능
- 보안을 향상하는 방법은 Lambda 코드 자체에 DB의 크레덴셜 정보나 API Key와 같은 자격 증명을 직접 저장하기 보다는 AWS Secrets Manager라는 서비스에 저장하고 이를 Lambda에서 읽어서 사용하는 게 더욱 안전
- 성능 부분에서는 RDS로의 연결은 RDS Proxy를 사용하는 것이 보다 효과적이고, API Gateway에서는 HTTP API로 레이턴시를 개선할 수 있음
- 마지막으로 비용면에서는 Lambda Insights를 통해 Lambda 함수의 메모리 사용률을 모니터링하고 최적의 메모리를 할당해 비용을 최적화할 수 있음
참고
본 블로그에서 사용한 이미지는 AWS Summit Korea에서 제공된 발표자료와 영상을 사용했습니다.