
개발을 하다보면 서버리스라는 개념을 한 번쯤은 듣게 된다. 서버리스가 무엇인지 간단하게 정리해 본다.
그대로 해석해 보면 "서버가 없다" 라는 뜻 인데, 그렇지 않다. 정의는 다음과 같다.
서버리스(Serverless)
개발자가 서버를 관리할 필요가 없는 클라우드 컴퓨팅 모델 중 하나이다.
즉, 서버 관리를 개발자가 아닌 클라우드 제공자가 알아서 해주는 것이다.
서버리스를 왜 사용할까? 인기가 있는 이유가 무엇인지 살펴 보도록 하자.
평소에는 5명의 사용자가 사용하는 앱이 있다고 가정하자. 해당 앱의 사용자가 어느 날 1000명이 된다면 서버리스는 1000개의 트래픽을 감당할 수 있는 인스턴스를 동적으로 증가시켜 요청을 처리할 수 있다.
Tip. 1000명의 트래픽에 딱 맞게 인스턴스를 생성한다. 즉, 필요 이상의 인스턴스는 생성하지 않는다.
서버리스는 리소스를 사용한 만큼만 비용으로 청구하기 때문에, 경제적으로 유리하다.
내가 Vercel을 사용해 본 결과, 프론트(react)와 백엔드(express)를 모두 무료로 배포할 수 있었다!
서버는 물리적인 하드웨어를 관리해야 하는데, 이를 서버리스 서비스 제공자가 대신 제공해 주기 때문에 서버 관리를 하지 않아도 된다.
"클라우드 서비스의 장점 아닌가?"라는 의문점을 가질 수 있다. 그러나 서버리스는 한 단계 더 발전한 형태로 운영 및 서버 관리의 완전한 추상화가 이루어 진다고 한다.
서버리스는 배포가 빠르고 간단하다.
내가 직접 Vercel을 통해 배포해 본 결과 배포 과정이 굉장히 쉽고 빠르게 배포할 수 있었다.
서버리스 함수가 계속 요청을 기다리고 있는 상태가 아니기 때문에, 처음 호출될 때 지연이 발생할 수 있다.
특정 클라우드 제공자에 종속될 수 있다.
서버리스는 함수가 한 번 호출 될 때 사용할 수 있는 메모리 및 시간에 제한이 있다. 따라서 용량이 큰 동영상 업로드 등에는 작업이 완료될 때 까지 계속 함수를 요청하게 된다.
서버리스 서비스의 종류는 다양하지만 대표적인 FaaS와 BaaS만 살펴보자
이벤트에 의해 트리거되는 개별 함수를 실행하는 방식을 사용한다. 보통의 서버리스 방식이라고 할 수 있다.
FaaS는 함수 단위로 실행되는 컴퓨팅 자원을 제공하며, Stateless하기 때문에 이전의 요청을 기억하지 않는다.
따라서 인증 방식을 사용할 때도 세션 방식이 아닌 JWT 방식을 사용한다. 또한 지속적인 연결을 유지하는 웹소켓을 사용하는 것에 어려움이 있다.
ex) Netlify, Vercel, AWS Lambda 등
인증, 데이터베이스 관리 등 백엔드 관련 서비스의 기능을 API로 제공하여 쉽게 백엔드 기능을 구현할 수 있게 한다.
ex) Firebase, AWS Amplify 등
서버리스는 클라우드 제공자가 서버 관리와 인프라 관리를 대신하여, 개발자가 코드에만 집중할 수 있게 하는 아키텍처이다.
애플리케이션의 요구에 따라 자동으로 확장하고 축소되며, 사용한 만큼만 비용을 지불한다.
개발과 배포가 간편해지고, 운영 비용과 복잡성이 줄어든다.
서버리스는 빠른 개발과 배포가 필요한 프로젝트, 그리고 인프라 관리에 많은 시간을 할애하고 싶지 않은 개발자에게 유용하다!