해당 포스트에서는 NestJS 백엔드 어플을 AWS Lambda위에 Docker image로 배포하고 어느정도 기간동안 운영을 해본 경험을 소개합니다. 오피셜 내용이 아닌 개인적인 소견임을 참고 바랍니다.
네! 람다는 우리에게 비동기식 호출 방식으로 접하게 되었을것 같은데요. 예를 들어 S3에 업로드한 이미지를 이벤트 트리거로 리사이징 하는것 같이요. Serverless 생태계와 기술의 성장으로 API Gateway와 Lambda를 사용해 API서버를 만드는 것이 관심을 받기 시작 한것 같아요.
맞습니다. Nestjs는 효율적이고, 안정적이며, 확장에 용이한 서버 어플리케이션을 구축하기 위한 Nodejs 프레임워크입니다. 하지만 Nestjs도 Nodejs runtime 임으로 aws-serverless-express 모듈을 사용 한다면 Lambda 함수 하나에 배포해 사용할수 있습니다.
우리가 많이 봐온 Lambda 코드 패턴은 API Gateway 라우터 하나에 하나 혹은 3의 역할을 하는 람다 함수가 붙어 있는 구조를 많이 생각 합니다.
해당 구조는 각각의 람다 함수들이 매우 느슨해 독립적인 배포 또는 기술적 다양성에 탁월할 것입니다. 하지만 관리해야 하는 람다 함수의 수가 늘어나고 모듈을 관리하기 힘들며 자유로운 환경에 오히려 개발자들은 스트레스를 받을수 있다고 봅니다.
lambda docker container support는 250MB 용량 제한의 작은 람다 함수를 10G 용량 제한의 컨테이너 기반으로 배포 가능하게 해줍니다. 또한 NestJS (혹은 다른 프레임워크 Express, Flask, Django등)와 같은 Backend framwork로 구성된 람다 함수도 가능하게 해줍니다.
github link <== 해당 페이지에 들어가면 NestJS를 Lambda 함수에 Docker image 기반으로 배포 할수 있는 템플릿과 실행 방법이 있습니다. 이를 통해 가장 쉽고 빠르며 최소한의 NestJS 백엔드 서버를 배포 할수 있습니다. Click Me!!
그 역시 아닙니다. 저는 개발 및 배포 단계부터 단기간 운영을 하는중 여러 문제점에 부딪쳤습니다.
새로운 기술의 도입에 따른 이슈들은 상당히 많았습니다. 그럼에도 불구하고 충분히 사용할 가치가 있다고 봅니다. 개발하면서 만난 이슈들은 모두 해결 방안이 있었고, 또한 Serverless 환경에서 오는 여러 이득 만으로도 충분히 메리트가 있었다고 말하고 싶습니다.
Serverless 개발자가 비즈니스 로직에만 집중할수 있게 만들어 줍니다. 이는 제품의 퀄리티와 직결 된다고 봅니다. 만약 서버 장애로 인해 꿀잠에 못 든다면 지금 당장 고려해보세요!