이제는 람다라는 이름이 익숙하게 들려온다. 그만큼이나 여러곳에서 유용하게 쓰이고 있다고 생각한다.
실제로 람다를 이용한 서버리스도 만들어 운영해보았지만 지식이 제대로 정리가 되어 있지 않아 이번 기회에 정리해본다.
서버리스에 대한 이해, 람다의 특장단점, 람다의 단점을 해결하기 위해 나온 확장기능에 대해 알아보자.
람다는 서버리스 컴퓨팅 서비스이다. 서버리스란 뭘까?
서버리스란 개발자가 서버를 관리할 필요없이 클라우드에게 서버 관리를 맡기는 것이다. 이로 인해 개발자는 서버관리에 시간을 쏟지 않고 코드에만 집중할 수 있게된다.
서버리스는 개발자가 서버를 관리하지 않을 뿐 결국 클라우드 서비스가 처리하는 서버를 관리한다.
서버리스 컴퓨팅 기술은 클라우드가 어떤 방식으로 관리를 하는지를 기준으로 BaaS와 FaaS로 나눌 수 있다.
💡 BaaS(Backend as a Service)
보통의 서버 개발을 할때 서버뿐만이 아니라 데이터 저장을 위한 데이터베이스, 유저인증기술, 이미지를 저장할 공간 등도 함께 구성해야한다.
BaaS는 위처럼 서버 개발에 필요한 데이터베이스, SNS로그인 연동, 객체 저장소 등을 자체 API로 제공을 해주는 서비스이다. 대표적으로 Firebase와 같은 서비스가 있다.
💡 FaaS(Function as a Servcie)
프로그래밍에서 사용하는 메서드와 같이 함수를 서비스로 제공하는 것을 말한다.
다시 말해 실행가능한 코드 덩어리 자체가 서비스이다.
어떠한 이벤트를 받게 되면 등록된 함수를 실행하는 구조이다.
AWS의 람다와 구글의 클라우드 펑션 등이 있다.
위에서 보았듯이 람다는 AWS가 제공하는 FaaS 서버리스 기술이다.
여러가지 함수들을 등록할 수 있으며 특정 이벤트로 인해 각각의 함수들이 실행된다.
현재는 Go, Java, JavaScript, Python, Ruby 등 다수의 언어로 람다함수를 만들 수 있다.
람다는 이벤트를 기반하여 즉시 실행된다. 곧바로 람다를 실행시킬 수도 혹은 이벤트를 구독하여 비동기적으로 람다를 실행시킬수도 있다. 대표적으로 아래와 같은 방법으로 lambda 함수를 사용한다.
위에서 보았듯 람다는 cold start로 인한 지연문제, 서버 제공자에 대한 의존 문제 등 몇몇가지 고질적인 문제를 가지고 있다. 하지만 역시 이러한 문제들을 해소하기 위해 여러기술들이 나왔다. 뿐만 아니라 람다를 더 편리하게 개발하고 활용한 기술들도 등장하였다.
위에서 살펴본 단점 중 코드 재사용이 어렵다는 문제가 있다. 이를 해소하기 위한 기술이다.
공통된 부분을 레이어로 만들고 람다 함수들이 이를 공유해서 사용할 수 있다.
같은 계정뿐 아니라 다른 계정들 사이에서도 서로 공유할 수 있다.
람다의 cold start의 문제점을 해소하기 위한 기술이다.
미리 람다함수를 실행할 수 있도록 준비해두는 기술로 동시 호출과 지연시간이 중요할 경우 사용할 수 있다.
람다 함수들을 조합해서 하나의 워크플로우를 구성할 수 있는 기술이다.
SNS, SQS, 다이나모 DB 등 여러 서비스와 통합해서 사용할 수 있다.
RDS 데이터베이스 사이에서 커넥션을 관리해준다.
서버의 경우 커넥션의 수를 자체적으로 관리하지만 람다의 경우는 그렇지 않다.
이를 위해 RDS와 람다 사이에 RDS 프로시를 두고 RDS 프록시로 커넥션을 관리한다.
람다 설정, 배포 등의 작업을 할때 일일이 AWS 콘솔로 업로드하기에는 힘들다.
코드로 명시하고 명령어로 작업할 수 있도록 도와주는 IaC(Infrastructure as Code) 도구이다.
AWS SAM과 같은 도구들도 있다.
람다 엣지는 AWS CloudFront에서 제공해주는 기능이다.
CloudFront는 파일을 전송해주는 캐시 서버이지만 람다엣지를 활용하여 이미지 업로드, 변환 등의 처리 기능도 추가할 수 있다.