프로젝트에서 스케쥴링을 위해 AWS Lambda를 공부했습니다.

처음엔 장고의 셀러리 사용을 고려했지만, 프로젝트의 규모가 작고 비동기처리가 필요한 만큼 작업량이 많지않아 AWS Lambda와 SNS, SES, Eventbrigde 네가지 키워드를 활용해보기로 했습니다.

 

AWS Lambda

실습에 자주 사용되는 AWS 의 EC2 인스턴스는 사용하기는 편리하지만, 오래 켜두는만큼, 특히 여러대의 EC2 인스턴스를 사용한다면 상당한 비용이 듭니다.

물론 AWS의 인스턴스 스케쥴러를 사용하면 EC2 인스턴스의 작동시간을 자동으로 조절할 수 있지만, 이번 프로젝트는 하나의 인스턴스로 충분하기 때문에 고민하던 중 서버리스 개념을 알게 되었습니다.

AWS Lambda 공식페이지

 

클라우드 컴퓨팅 PaaS | Amazon Web Services

AWS Lambda 및 Amazon Kinesis를 사용하여 애플리케이션 활동 추적, 트랜잭션 주문 처리, 클릭 스트림 분석, 데이터 정리, 로그 필터링, 인덱싱, 소셜 미디어 분석, IoT 디바이스 데이터 텔레메트리 및 측

aws.amazon.com

 

Serverless

서버리스는 서버가 없는것이 아닙니다. 백엔드에서 개발자가 직업 서버를 관리하지 않는 경우를 서버리스라고 합니다.

예전에는 서버개발자는 서버를 직접 관리해야 했습니다. 하지만 지금은 AWS의 EC2 를 대여하면 직접 서버를 관리할 필요가 없어졌습니다. (구글, MS)

하지만 이 방법도 제공회사의 하드웨어를 빌려서 비어있는 서버를 개발자가 관리했습니다. 보안, 백업, 유지보수 같은 작업을 모두 직접 해야합니다.

여기서 등장하는것이 서버리스 입니다.

백엔드에서 작성한 코드를 작은 함수단위로 쪼갠다음 직접 관리할 필요가 없는 AWS Lambda에 올려서 작업합니다.

Lambda에 올려둔 작은 단위의 함수는 요청이 오기 전 까지는 비활성상태로 대기합니다.

만약 요청이 왔다면 AWS가 함수를 불러와서 작업을 수행하고 다시 비활성상태로 전환합니다.

즉, 서버가 24시간 꺠어있을 필요가 없고 기존의 EC2 처럼 비용에 대한 부담이 줄어듭니다.

(AWS Lambda를 사용하면 월 백만번 함수를 수행해도 한화 몇백원으로 처리가 가능합니다)

특히 데이터를 모아서 일괄적으로 처리하는 배치작업과 여러 자동화 작업들은 서버리스로 구현하기에 적절합니다.

하지만 함수가 비활성상태라면 요청을 받은 후 활성회 될때까지 약간의 시간이 필요하다는 단점이 있습니다.

물론 AWS에서 자주 사용되는 함수를 미리 지정하고 활성상태로 유지시켜 주는 컨커런시라는 서비스로 문제를 완화시켰습니다.

(프로비저닝 컨커런시)

 

AWS Lambda 함수, Provisioned Concurrency를 통해 빠른 성능 제공 (서울 리전 포함) | Amazon Web Services

AWS Lambda가 출시되고 5년이 흘렀지만 여전히 팀은 더 쉽게 애플리케이션을 구축하고 실행할 수 있는 새로운 방법을 찾고 있습니다. 특히, 중요 애플리케이션이 서버리스로 이동하면서 애플리케

aws.amazon.com

 

또 한가지 단점은 서버리스로 작업하면 어플리케이션의 구조자체가 서버에서 작업할떄와 다릅니다.

그래서 AWS 서버리스 → 구글 서버리스 같은 어플리케이션의 이동에 많은 제약이 생깁니다. (회사별 구조도 다르고 ec2같은 서버에 올리는 형식도 상이하기 때문입니다.)

 

"Lambda는 한마디로 요청이 들어온 그 아주 짧은 순간만 AWS 서버를 사용하고 바로 종료합니다."

 

Lambda 사용해보기

 

EC2는 인스턴스, S3는 버킷 이라는 단위로 사용하듯, 람다는 함수라는 단위로 대여할 수 있습니다.

 

1. 람다에서는 함수라는 단위로 대여하며 함수생성 버튼을 눌러 간편하게 사용할 수 있습니다.

2. 새로 작성을 선택해서 런타임은 파이썬을 선택하고 함수를 생성합니다.

 

3. 함수 생성 후 left, right 값을 리턴하는 간단한 함수를 만들고 저장합니다. (저장 후 deploy 버튼을 누르면 람다가 실행가능한 상태가 됩니다. )

 

4. 실행 가능한 함수를 주황색 test버튼을 눌러 입력하려는 left,right값을 설정하고 다시 test를 누르면 아래와 같이 응답과 실행시간 등의 정보가 나옵니다.

 

Lambda 디버깅

실행된 함수의 로그는 AWS의 CloudWatch (LogStream) 를 통해 확인할 수 있습니다.

 

 

Lambda가 강력한 이유

 

AWS의 다른 서비스를 트리거로 연동가능한것이 람다의 강점입니다.

주로 정해진 시간에 어떤 업무를 처리할 땐 EventBridge(간편하게 시간을 지정하거나 크론식으로 원하는 시간에 업무를 스케줄링),

특정 기능을 API에 요청할 땐 APIGateWay와 사용합니다.

트리거는 이 람다를 실행되게하는 조건(서비스)을 뜻합니다.

 

예를들어 S3 를 트리거로 설정하면, S3에 파일이 업로드 되었을때 Lambda가 실행되게 설정할 수 있습니다.

그럼 트리거로 설정한 S3에 json 형식의 파일을 업로드하면 파일 전송이 트리거가 되어 람다 함수를 실행합니다.

+ Recent posts