처음 람다를 사용하게된 계기는 Twitter 크롤링을 하기위해 사용하였습니다. 하지만 여러가지 제약사항이 있었고 결국 EC2로 진행하였습니다. 😭 결국 Lambda는 Twitter 데이터 처리 결과를 보여주는 RestAPI 배포용으로 사용하였습니다.
이번 글에서는 Lambda에 대한 간단한 설명을 이야기하고 제가 겪었던 람다의 장단점을 이야기 해보려 합니다.
람다의 설명은 AWS사이트에 자세히 나와있습니다. 이번에 람다를 사용하면서 배웠던점 그리고 람다를 사용하는것이 맞는지에 대한 고민의 흔적들을 적어보겠습니다.
람다는 실행시 컨테이너 기반으로 프로세스가 올라갑니다. 따라서 이벤트가 여러개가 동시에 왔을때 컨테이너가 각각 올라가기 때문에 그 숫자에 맞춰 DB 컨넥션도 같이 늘어납니다. 이를 해결하기위해 MongoDB Connection을 재사용하는 방법을 사용하였습니다.링크텍스트
Lambda는 Serverless 서비스이기 때문에 같은 Serverless 서비스와 같이 상용 하는것이 좋다고 생각됩니다. 예로 Nosql서비스는 AWS-DynamoDB가 있습니다.
Lambda는 컨테이너 기반 서버리스 컴퓨팅 서비스일 뿐입니다. 저는 'Lambda RestAPI' 라는 키워드를 보고 함수호출이 HTTP Request기반으로만 이뤄진다고 잘 못된 생각을 가졌었습니다. Lambda 는 Event기반으로 호출이 이루어지고 이는 S3 File write, delete와 같은 이벤트도 연결 할 수 있습니다.
Lambda는 초당 최대 호출 개수를 지정할 수 있습니다. 저는 크롤링을 최대한 빨리 처리하고자 한번에 1000개 이상의 함수를 호출 시켰는데 저희 회사 웹 페이지중 람다로 배포된 API를 쓰는 페이지를 전부 다운시켰습니다..😰
[Errno 38] Function not implemented: OSError
sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue)
OSError: [Errno 38] Function not implemented
에러가 발생했습니다. 람다는 프로세스간에 공유변수가 지원되지 않습니다.. 때문에 공유변수를 사용하지 않는 방식으로 코드를 짜시는 것을 추천드립니다.
장점1. 상당히 개발 및 배포에 대한 소요시간이 매우 짧습니다. AWS에서 많은 기능을 제공해주고 있어서 API연동이 쉬웠고 Serverless의 강점인 배포방법이 정말 쉬웠습니다. 함수를 수정해주기만 하면 되니까요.😭
단점1. 디버깅이 정말 힘듭니다. 로컬의 경우 디버깅모드로 에러코드의 상태값을 확인하면 되지만 Lambda의 경우 CloudWatch를 통해 저장된 로그기록을 통해 확인해야 합니다. 그리고 환경설정에서 발생하는 에러들도 있어서 무조건 Cloud환경에서의 테스트는 필수입니다.
단점2. 요금이 생각보다 비쌉니다.. 함수 호출 빈도가 낮을 경우에는 확실한 비용절감의 효과를 누릴수 있습니다. 하지만 그 반대의 상황이라면 굳이 Lambda를 사용하는것이 좋다고는 말 할 수 없을것 같습니다. 컴퓨팅 파워와 시간을 고려한 개발스택 구성이 필요합니다.
현업에서는 서버리스가 추세인가요??? 저도 새로 웹앱 만들면서 고민되네요. 항상 EC2 에 올려왔는데...