서버리스 컴퓨팅이란?

서버리스(serverless)는 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델이다. 여기서 주의할 점은 서버리스 모델은 서버가 없는게 아니고 서버가 존재하긴 하지만, 서버 기반 개발과는 달리 추상화 되어 있는 것이라는 점이다.

서버리스 환경에서는 클라우드 제공 업체가 서버 인프라에 대한 프로비저닝, 유지 관리, 스케일링 등의  서버 관리 작업을 처리해주며, 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 된다. 이렇게 배포된 서버리스 애플리케이션은 배포되고 나면 필요에 따라 자동으로 스케일업 혹은 스케일 다운이 된다. 또한 서버리스 오퍼링은 일반적으로 이벤트 기반 실행 모델을 통해 온디맨드로 미터링되기 때문에 사용하지 않을 때는 아무런 비용도 들지 않는다. 이러한 특성 때문에 서버리스는 이벤트 기반 작업이나 간헐적인 작업에 적합하다.

클라우드 컴퓨팅과의 차이 

클라우드 컴퓨팅은 서버, 스토리지, 데이터베이스 등 IT 리소스를 인터넷을 통해 제공하는 서비스를 의미한다. 클라우드 컴퓨팅 환경에서는 가상 서버, 관리형 데이터베이스등을 사용자가 필요에 따라 생성하고 관리하는 것이기 때문에 이 과정에서 사용자가 인프라의 일부를 직접 관리하고나 설정해야 한다. 

반면, 서버리스 컴퓨팅은 클라우드 컴퓨팅의 한 단계 진화된 형태로, 사용자가 인프라를 전혀 관리할 필요가 없도록 만든 환경이다. 서버리스는 클라우드 컴퓨팅의 장점을 그대로 유지하면서 서버 관리의 복잡성을 제거한 방식으로 이해하면 더 편할것이다.


이제 aws의 서비스들을 활용해서 간단한 서버리스 웹애플리케이션을 만들어보자. 대강의 흐름만을 살피기 위한 실습이기 때문에 사람의 이름과 기분을 랜덤하게 매칭해주는 아주 간단한 기능만을 구현할 것이다. 해당 기능이 구현된 간단한 코드를 Lambda에 올리고 API Gateway로 인터넷 주소를 만들어 Lamda와 연결한다. 만들어진 주소를 브라우저에 붙여 넣으면 Lambda가 실행되고, 그 때마다 랜덤하게 생성된 데이터를 DynamoDB에 저장한다. 브라우저는 S3에 html 파일을 업로드해서 해당 화면이 띄워지게끔 하여 동작하게끔 할것이다. 위의 내용을 구조도로 보면 아래와 같다.

실습에 들어가기 전에 사용할 aws 서비스들에 대해서 먼저 정리를 해보고자 한다.

 

Lambda

람다는 AWS에서 제공하는 서버리스 컴퓨팅을 대표하는 서비스로, 사용자가 제공한 코드를 이벤트에 반응하여 자동으로 실행하게끔 해준다. 위의 상황을 예로 들면 S3에 업로드된 html 코드 내부의 버튼 요소가 클릭되면 이를 트리거로 Lambda가 실행되게 된다. 이 때문에 특정한 시기나 이벤트에만 실행시키고 싶은 기능을 구현하고자 할 때 활용하면 좋은 서비스이다.
사용자는 코드만 작성하고, AWS는 함수의 실행, 확장, 모니터링 등을 처리한다. 이때 람다는 사용된 만큼만 비용이 청구되며, 초 단위로 계산된다.

 

DynamoDB

DynamoDB는 완전 관리형 NoSQL 데이터베이스 서비스이다. 빠른 속도와 확장성을 갖춘 key-value 및 document 데이터 저장소로, 서버리스 애플리케이션에서 자주 사용된다. DynamoDB는 사용자가 데이터베이스를 설정, 확장, 유지보수할 필요 없이 자동으로 확장되며 데이터는 내구성과 가용성을 보장받는다.

여기서 NoSQL은 SQL과 반대되는 개념의 언어로서 비관계형 데이터베이스 시스템에서 데이터를 처리한다. 정형화 되지 않는 구조의 데이터를 처리하며 대규모 대용량 동시 서비스가 필요한 상황에서 주로 사용한다. 이에 관련한 내용은 추후 공부를 더 해보는게 좋을 것 같다.

 

API Gateway

Api Gateway는 RESTful API, HTTP API, WebSocket API등을 생성, 배포, 관리할 수 있는 완전 관리형 서비스이다. 서버리스 애플리케이션에서 API Gateway는 클라이언트 요청을 받아 람다나 디비등 다른 aws 서비스와 통신할 수 있도록 해준다. 또한 요청 처리, 인증, 모니터링 등 다양한 기능을 제공하며 서버 인프라를 관리할 필요 없이 확장 가능하다. API가 지나가는 통로라고 생각하면 좀 더 수월할 듯 하다.
API Gateway를 이용하면 통합적으로 엔드포인트와 api를 관리할 수 있다. API 게이트웨이는 사용자가 설정한 라우팅에 따라 각 엔드포인트로 클라이언트 대신 요청을 보내고 받은 응답을 다시 클라이언트에서 전달하는 프록시 역할을 하기 때문에 모든 클라이언트는 각 서비스의 엔드포인트 대신 API Gateway로 요청을 전달하면 되기 때문에 관리가 용이해진다. 뿐만 아니라 인증, 사용량 제어, 요청, 응답 변조 등의 다양한 기능을 플러그인 형태로 제공하고 있어서 해당 기능을 별도로 구현할 필요가 없다는 장점도 있다.

 

S3(Simple Storage Service)

S3는 객체 스토리지 서비스로, 파일 저장 및 관리에 주로 사용된다. S3는 무제한의 확장성을 제공하며, 보안성과 가용성을 보장해준다.