top of page

AWS Lambda의 모든 것: 초보자를 위한 완벽한 가이드 1/2

AWS Lambda의 모든 것: 초보자를 위한 완벽한 가이드 1/2 - 람다의 장단점과 사용 사례, EC2와의 차이점

AWS Lambda의 모든 것: 초보자를 위한 완벽한 가이드 1/2 - 람다의 장단점과 사용 사레, EC2와의 차이점

Written by Hyojung Yoon


오늘은 다양한 IT 환경에서 중요한 역할을 하는 AWS Lambda에 대해 배워보겠습니다. Lambda는 고가용성과 확장성을 갖춘 서비스를 제공할 수 있게 해주며, AWS와 같은 클라우드 환경에서는 서비스 성능과 안정성을 한층 높여줍니다.


이 블로그를 통해 AWS Lambda의 기본 개념부터 장단점, 그리고 실제 사용 사례에 이르기까지 깊이 있게 탐구해 보겠습니다. 또한, AWS Lambda와 EC2를 비교하여 각각의 서비스가 언제 더 적합한지에 대해서도 알아볼 예정입니다.

그럼, 지금부터 시작하겠습니다!!

 
 

AWS Lambda란?

1. 서버리스¹ 컴퓨팅이란?

서버리스 컴퓨팅이란?

AWS 람다(Lambda)는 서버리스 컴퓨팅 서비스입니다. 여기서 서버리스 컴퓨팅이란 서버의 설정과 관리 없이 백엔드 서비스를 운영할 수 있게 해주는 클라우드 컴퓨팅 실행 모델입니다. 사용자는 코드 작성에만 집중하고, 나머지 인프라 관리는 AWS가 담당하게 됩니다. 이는 개발자가 인프라에 대한 고민 없이, 더 빠르고 효율적으로 애플리케이션을 개발하고 배포할 수 있게 해줍니다.


¹서버리스(Serverless)란? 개발자가 서버를 프로비저닝하거나 애플리케이션의 확장을 관리할 필요 없는 클라우드 네이티브 개발 모델입니다. 즉, 클라우드 제공업체가 서버 인프라에 대한 관리 등을 대신 처리해주기 때문에 개발자는 서버 관리에서 자유로워지며 실제로 구현해야 할 기능에만 더 집중할 수 있게 됩니다.


2. AWS Lambda(람다)

AWS Lambda란?

AWS 람다는 서버를 프로비저닝 또는 관리하지 않고도 실제로 모든 유형의 애플리케이션과 백엔드 서비스에 대한 코드를 실행할 수 있는 이벤트 중심의 서버리스 컴퓨팅 서비스입니다.


Lambda를 사용하는 사용자는 Lambda가 지원하는 언어 런타임 중 하나로 코드를 제공하기만 하면 됩니다.(Lambda는 python, C#, Node.js, Ruby, Java, PowerShell, Go로 작성된 런타임을 지원합니다.) 코드는 Lambda 함수로 구성되며, 사용자는 Lambda에 원하는 함수를 작성하고 필요시에 함수를 사용할 수 있습니다.


AWS Lambda는 이벤트에 의해 자동으로 트리거되는 코드 실행 환경을 제공합니다. 예를 들어, S3 버킷에 파일이 업로드되거나 DynamoDB에 새로운 레코드가 추가될 때 코드가 실행됩니다. 이는 이벤트 기반 아키텍처를 가능하게 하며, 다양한 AWS 서비스와의 통합을 통해 강력한 백엔드 솔루션을 구축할 수 있게 합니다.


3. AWS Lambda의 작동 원리

AWS Lambda의 작동 원리

람다 함수

- 함수는 Lambda에서 코드를 실행하기 위해 호출할 수 있는 리소스입니다.

- 함수에는 함수에 전달하는 이벤트 또는 다른 AWS서비스에서 보낸 이벤트를 처리하는 코드가 포함되어 있습니다.


이벤트 트리거(이벤트 소스)

- AWS Lambda는 이벤트를 처리하기 위해 함수 인스턴스를 실행합니다. 함수는 Lambda API를 사용하여 직접 호출할 수 있으며 AWS 서비스 및 리소스를 설정하여 함수를 호출할 수도 있습니다.

- AWS Lambda 함수는 HTTP 요청, 데이터 상태 번역, 파일 업로드 등 다양한 이벤트에 의해 트리거 됩니다.


람다의 작동 방식

먼저 함수를 생성하고, 해당 함수를 사용되는 프로그래밍 언어와 같은 기본 정보를 서비스에 추가합니다. 그런 다음 람다 편집기에서 코드를 작성하거나 소스 코드를 zip 파일로 업로드합니다. 람다 코드가 업로드되면 서비스가 모든 용량 확장, 패치 및 인프라 관리를 처리합니다.



AWS Lambda의 장단점

AWS Lambda를 사용하면 서버 관리에 대한 부담 없이 개발에 집중할 수 있습니다. 마치 자동차를 렌트해 운전만 하고, 유지보수는 렌트 회사가 담당하는 것과 같습니다. 하지만, Lambda 함수는 상태를 유지하지 않으므로, 상태 관리가 필요한 경우 추가적인 구성이 필요합니다. 또한, '콜드 스타트' 현상은 마치 컴퓨터가 잠에서 깨어나는 것처럼 초기 응답 속도가 느려질 수 있습니다.


1. Lambda(람다)의 장점

1) 서버리스 아키텍처

AWS Lambda(람다)를 사용하면 서버 관리에 대한 부담 없이 개발에 집중할 수 있습니다. 마치 자동차를 렌트해 운전만 하고, 유지보수는 렌트카 회사가 담당하는 것과 유사합니다.


2) 비용 효율적

AWS Lambda는 실제로 사용한 컴퓨팅 자원에 대해서만 비용을 지불하게 됩니다. 필요할 때만 함수가 호출되어 처리하기 때문에 항상 서버를 켜두고 있지 않아도 되며, 사용한 컴퓨팅 시간만큼만 비용을 지불하게 되어 비용 효율적입니다. 람다는 람다 함수의 요청 수와 람다 코드의 실행 시간에 따라 요금이 부과되기 때문에 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.


3) AWS 서비스와의 통합

다른 AWS 서비스와 원활하게 통합되어 함수를 호출하거나 다른 작업을 수행합니다. 또한 Lambda 함수를 사용하면 AWS 소프트웨어 개발 키트(SDK) 중 하나를 사용하여 다른 AWS 서비스와 프로그램이 방식으로 상호 작용할 수 있게 됩니다.



2. Lambda(람다)의 단점

1) 실행 시간 제한

람다의 최대 실행 시간 제한은 15분(=900초), 최대 메모리는 10GB(=10,240MB)로 제한되어 있습니다. 따라서 15분 이상의 긴 작업의 경우 제한되어 장기 실행 프로세스에는 적합하지 않습니다.


2) Stateless(상태비저장)²

일반적으로 람다 함수는 상태비저장(Stateless) 코드로 실행됩니다. 떄문에 별도의 상태를 저장하지 않아 이전 이벤트 실행 컨텍스트에 대한 액세스 권한이 없어 DB Connection을 유지하는 기능을 수행할 수 없습니다.

-

²Stateless(상태비저장)이란? 상호 작용 간에 데이터가 저장되지 않음을 의미합니다. 따라서 작업이 완료될 때까지 기다릴 필요 없이 한 번에 여러 작업을 수행하거나 빠르게 확장할 수 있습니다.


3) ColdStart 현상

람다는 서버리스 서비스로 효율적인 리소스 사용을 위해 오랫동안 사용하지 않는 경우 컴퓨팅 파워를 꺼두게 됩니다. 함수가 처음 호출될 때 람다함수를 실행시키기 위해 부수적인 설정이 필요한데, 이 과정에서 발생하는 딜레이를 콜드 스타트(ColdStart)라고 합니다. 콜드 스타트 현상은 사용하는 언어, 설정한 메모리에 따라 다르게 나타나게 됩니다.

 사용하는 언어, 설정한 메모리에 따라 다르게 나타나는 콜드스타트 현상
출처:https://blog.scanner.dev/serverless-speed-rust-vs-go-java-python-in-aws-lambda-functions/

이러한 초기 지연 현상은 발생한 딜레이만큼 응답을 늦게 받기 때문에 잠재적으로 성능에 영향을 미칠 수 있습니다.

※ 콜드스타트 해결 방법

1. Lambda SnapStart 사용하기

  • SnapStart를 사용하면 함수 버전을 게시할 때 Lambda가 함수를 초기화합니다. 람다는 초기화된 실행 환경의 메모리 및 디스크 상태 Firecracker microVM 스냅샷을 생성하고 스냅샷을 암호화하며 짧은 지연 시간으로 액세스할 수 있도록 스냅샷을 캐싱합니다.

  • 상세한 내용은 AWS 문서를 참고하세요. AWS 문서

2. Lambda 함수에 할당된 메모리를 늘려 스펙을 높이기

  • 콜드 스타트 범위는 함수의 크기, 할당한 메모리의 양, 코드의 복잡성에 따라 달라집니다. 따라서 메모리를 추가하면 그에 비례해 CPU 용량이 늘어나 사용 가능한 전체 계산 성능이 향상됩니다.

3. 프로비저닝된 동시성 활성화

  • 함수의 호출에 바로 응답할 수 있게 미리 준비하는 옵션입니다. 이를 활성화하면 실행 환경이 호출 전에 준비되므로 딜레이가 줄어들게 됩니다. 단, 추가 비용이 발생합니다.

4) 동시성³ 제한

기본적으로 람다는 동시에 실행할 수 있는 람다 함수의 개수를 각 리전별 최대 1,000개로 제한하고 있습니다. 따라서 request의 수가 이를 넘어가게 되면 람다가 수행되지 않는 문제가 발생할 수도 있습니다.

-

³동시성이란? Lambda 함수가 동시에 처리하는 전송 중인 요청 수입니다. 함수의 동시성이 증가함에 따라 Lambda는 요청 수요를 맞추기 위해 더 많은 실행 환경 인스턴스를 프로비저닝합니다.


AWS Lambda의 사용 사례

Lambda는 빠르게 확장하고 수요가 없을 때는 0으로 축소해야 하는 애플리케이션 시나리오에 이상적인 컴퓨팅 서비스입니다. 예를 들어 다음과 같은 목적으로 Lambda를 사용할 수 있습니다.


1. 시스템 운영 자동화 🎬

AWS Lambda 사용 사례 - 시스템 운영 자동화
  • CloudWatch Alarm을 모든 리소스에 걸어둡니다

  • Memory Full이거나 CPU가 갑자기 높아져 대응이 필요할 때, 리소스 상태 불량일 때 CloudWatch Alarm을 실행하면 Lambda Function이 실행된다

  • Lambda Function이 Email이나 Slack Notification으로 팀이나 관련자에게 알려준다.

  • Lambda Function Ansible과 결합해 Memory Full이 났을 때 로컬 인스턴스에서 메모리를 리셋해 주거나 리소스를 교체하는 식으로 장애 발생 시에 Automate 하게 복구할 수 있다.

2. 웹 애플리케이션 🎬

AWS Lambda의 사용 사례 -  웹 애플리케이션
  • 클라이언트가 접속했을 때 Static Contents(이미지와 같은 정적 콘텐츠)는 S3에 저장한다.

  • S3 앞단에 CloudFront를 달아서 전 세계 어디서든 빠르게 서빙할 수 있다.

  • 인증으로는 Cognito를 별로도 사용할 수 있다.

  • Dynamic Contents, 프로그램 작업이 필요한 경우에는 Lambda와 API Gateway를 이용해 서비스 하고, 백단에서는 DB로 DynamoDB를 운영할 수 있다.

3. Serverless Batch Processing 🎬

AWS Lambda의 사용 사례 - Serverless Batch Processing
  • S3에 어떤 오브젝트가 들어왔을 경우 Lambda Splitter가 Mapper에 작업을 분배하고 Mapper들은 작업이 끝난 후 DynamoDB에 저장된다.

  • Lambda Reducer가 S3로 다시 OutPut한다.


4. 기타 사례

1) 실시간 파일 처리

Amazon S3를 사용하여 업로드 후 실시간으로 Lambda 데이터 처리를 트리거합니다.

[예시] S3 소스 이미지 썸네일 제작

AWS Lambda의 사용 사례 - 실시간 파일 처리

2) 스트림 처리

Lambda 및 Amazon Kinesis를 사용하여 애플리케이션 활동 추적, 트랜잭션 주문 처리, 클릭스트림 분석, 데이터 정리, 로그 필터링, 인덱싱, 소셜 미디어 분석, 사물 인터넷(IoT) 장치 데이터 원격 측정 등을 위한 실시간 스트리밍 데이터를 처리합니다.


3) IoT 백엔드

Lambda를 사용하여 서버리스 백엔드를 구축함으로써 웹, 모바일, IoT 및 서드 파티 API 요청을 처리합니다.


4) 모바일 백엔드

Lambda 및 Amazon API Gateway를 사용하여 백엔드를 구축함으로써 API 요청을 인증하고 처리합니다. AWS Amplify를 사용하여 iOS, Android, 웹 및 React Native 프론트엔드와 손쉽게 통합합니다.



AWS Lambda와 EC2의 차이점

AWS Lambda는 서버리스 컴퓨팅 서비스로, 서버 관리의 필요성을 없앱니다. 반면, EC2(Elastic Compute Cloud)는 사용자가 가상 서버의 설정과 관리를 직접 해야 하는 서비스입니다. Lambda는 이벤트 기반으로 실행되며, EC2는 지속적인 서버 운영이 필요할 때 사용됩니다.

AWS Lambda

AWS EC2

백엔드 코드를 실행하고 실행하기 위한 원격 플랫폼을 갖춘 PaaS(Platform as a Service)

가상화된 컴퓨팅 리소스를 제공하는 IaaS(Infrastructure as a Service)

컴퓨팅 인스턴스에 로그인하고 맞춤형 운영체제 또는 언어 런타임을 선택할 수 있는 유연성이 없습니다

다양한 인스턴스, 맞춤형 운영 체제, 네트워크 및 보안 패치 등을 선택할 수 있는 유연성을 갖추고 있습니다

코드를 실행할 환경을 선택하고 코드를 AWS Lambda에 푸시합니다

처음에는 OS를 선택하고 필요한 모든 소프트웨어를 설치한 다음 코드를 EC2에 푸시해야 합니다

일부 언어에 대한 환경 제한이 있음

환경 제한 없음

1. AWS Lambda를 언제 사용해야 합니까?

  1. 복잡도가 낮은 코드: Lambda는 최소한의 변수와 타사 종속성을 사용하여 코드를 실행하기 위한 완벽한 선택입니다. 복잡도가 낮은 코드가 포함된 쉬운 작업을 간소화된 방식으로 처리할 수 있습니다.

  2. 실행 시간 단축: Lambda는 가끔식 발생하는 작업을 실행하는 데 적합하며 몇 분 내에 실행될 수 있습니다.

  3. 드문 트래픽: 기업은 서버가 유휴 상태일 때 이를 싫어하며 여전히 비용을 지불해야 합니다. 기능별 지불 모델은 컴퓨팅 비용을 크게 절감하는 데 도움이 될 수 있습니다.

  4. 실시간 처리: AWS Kinesis와 함께 사용되는 Lambda는 실시간 배치 처리에 가장 적합합니다.

  5. 예약된 CRON 작업: AWS Lambda 기능은 예약된 이벤트가 정해진 예약 시간에 작동하도록 하는 데 적합합니다.


2. AWS EC2를 언제 사용해야 합니까?

  1. 고성능 컴퓨팅: 다수의 EC2 인스턴스를 통해 기업은 요구 사항을 충족하는 가상 서버를 생성할 수 있습니다. 이로 인해 EC2는 복잡한 작업을 처리하는 데 완벽하게 적합합니다.

  2. 재해 복구: EC2는 능동환경과 수동환경 모두에서 재해 복구를 위한 매체로 활용되고 있습니다. 긴급 상황 발생 시 쉽게 켤 수 있어 가동 중지 시간이 최소화됩니다.

  3. DevOps: DevOps 프로세스는 EC2와 관련하여 완전한 방식으로 개발되었습니다.

  4. 개발 및 테스트: EC2는 온디맨드 컴퓨팅 리소스를 제공하므로 기업은 하드웨어에 대한 사전 투자가 없더라도 대규모 테스트 환경을 배포할 수 있습니다.

  5. 보안 환경: EC2는 뛰어난 보안을 제공하는 것으로 알려져 있습니다.


마치며

AWS Lambda 가이드를 통해 Lambda에 대해 자세히 알아보았습니다. AWS Lambda는 서버리스 컴퓨팅을 가능하게 하여 웹사이트 및 어플리케이션의 트래픽 관리와 서버 부하 분산에 큰 역할을 합니다. 특히 AWS 환경에서는 다양한 Lambda 기능과 옵션을 제공하여, 여러분의 서비스와 애플리케이션에 가장 적합한 솔루션을 선택하고 적용할 수 있습니다.


다음 시간에는 콘솔에 접근하는 방법부터 Lambda 함수의 생성과 실행 설정 방법, 그리고 요금 계산 방식에 대해서도 알아볼 예정입니다.


이번 가이드가 AWS Lambda를 시작하고 활용하는 데 있어 유용한 첫걸음이 되었길 바라며, 여러분이 AWS Lambda를 통해 효율적이고 혁신적인 서비스를 구축하실 수 있기를 기대합니다. AWS Lambda와 함께 더 넓은 서버리스 세계로의 여정을 시작해보세요!



관련 링크

2,014 views0 comments
bottom of page