요즈음 서버리스 아키텍처가 많이 사용되고 있다. 이에 AWS의 선두주자는 바로 Lambda 서비스라고 할 수 있다.
Lambda에 관한 AWS의 문서를 확인해 보면 아래와 같이 소개를 한다.
"AWS Lambda는 서버를 provisioning 하거나 관리하지 않고도 코드를 실행 할 수 있게 해주는 컴퓨팅 서비스이다."
서버리스라는 단어와 같이 (물론 물리적으로 서버가 필요 없는 것은 아니지만) 서버에 대한 고민을 하지 않고도 application 개발을 진행할 수 있다.
때문에 문서상에서 언급하는 장점들만 살펴보면 아래와 같다.
- 자동 확장 (요청의 갯수에 상관없이 받아 줄 수 있음)
- 사용한 시간에 대해서만 비용 지불
- 백엔드를 관리할 필요 없음 (자동으로 최신 버전)
- 고가용성
등등 AWS 에서 언급하는 장점은 많이 있다. 하지만 이 것은 문서상에서 언급하는 부분일 뿐..
그렇기 때문에 해당 글에서는 실제 AWS Lambda의 장단점에 대해 살펴보려고 한다.
장점
- 빠른 개발
오직 비즈니스 로직에만 신경쓰면 된다. (그리고 코드만 Lambda에 업로드)
- 자동 확장
Lambda로 유입되는 요청에 따라 내부적으로 Auto-Scaling 한다. 때문에 유입되는 요청의 갯수에 따라 서버를 관리할 필요가 없다.
- 쉬운 운영 관리
위의 내용과 연계되는 부분으로 Lambda는 Auto-Scaling을 하기 때문에 운영 관리 면에서 부담이 덜어진다. Lambda 내부는 AWS의 시스템적으로 처리되는 부분이기 때문에 실제 Lambda와 연계되는 부분인 Database 등에 더 많은 신경을 쓰면 된다.
- 비용 절감
실행 시간에 대해서만 비용을 지불하면 된다.
이처럼 Lambda의 등장으로 기존 서버를 24/7 단위로 계속 운영 할 필요가 없어진다. 그렇기 때문에 기존 서버에서 문제가 될 수 있는 관리, 비용 등의 문제에서 벗어 날 수 있다. (AWS에서 리소스를 알아서 최적화를 해주기 때문에..)
단점
- 상태
Lambda는 내부적으로 사용하지 않는 리소는 제거하기 때문에 현재 running 상태를 계속해서 유지*하지 않는다.
* Database와 같은 서비스는 connection을 유지하는게 필요하다.
- DoS (Denial of Service)
Lambda는 동시 실행 횟수를 1000으로 제한*한다. 때문에 동일한 계정에서 Load Test는 Lambda의 실행 횟수를 높여 DoS 공격을 만들 수 있다.
* 기본적으로 리전 내의 모든 함수에서 동시 실행의 총 횟수를 1000으로 제한한다.
- 실행 시간
Lambda에 설정한 실행 시간이 넘어가면 실행이 중단(Aborted)된다.
- 콜드 스타트 (Cold Start)
Lambda는 처음 실행 시킬 때 내부적으로 Code Download 등 Lambda의 리소스 구성하는 시간이 필요하다. (Lambda는 내부적으로 자원을 할당 받는다.)
- 테스트
단위 테스트는 크게 문제가 되지 않는다. (로컬에서 테스트하면 되기 때문에) 다만, 통합 테스트는 제공해주는 Tool이 많지 않고 현재 많은 논의들이 진행되고 있다. 때문에 아직은 서버리스 환경에서 Lambda를 테스트하기는 쉽지 않다.
이와 같은 단점은 사용자가 Lambda 환경을 제어 할 수 없기 때문에 발생하는 문제이다. 즉, AMI를 사용하기에 내부적인 리소스 제어는 AWS에 일임하게 된다.
참조
- https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/welcome.html
- https://dzone.com/articles/the-pros-and-cons-of-aws-lambda
'IT > AWS' 카테고리의 다른 글
[AWS] ECS vs EKS (0) | 2019.02.08 |
---|---|
[AWS] ECS vs Kubernetes (0) | 2019.02.08 |
[Network] Proxy와Reverse Proxy (0) | 2019.01.19 |
[Netflix] Hystrix Overview (0) | 2019.01.14 |
[AWS] ElastiCache Redis Cluster (0) | 2019.01.06 |
댓글