서버리스(Serverless)를 직역 하면 서버가 없다는 뜻이다.
실제로 서버가 없다는 뜻이 아닌, B2B적인 관점에서 서버를 사용자측에서 설계,운영하는 것이아니라 플랫폼 등에서 관리,운영 하는것을 지칭한다.
축약하자면 서버리스 아키텍처(Serverless Architecture)란 서버를 직접 관리할 필요가 없는 아키텍처다.
BaaS란 Backend as a Service 의 약자로,
BaaS의 주요 핵심은 앱 개발에 있어서 필요한 다양한 기능(DB,연동 등)들을 플랫폼측에서 API로 제공해 줌으로서, 사용자들이 서버 개발을 하지 않고서도 필요한 기능을 쉽고 빠르게 구현 할 수 있게 해는 시스템이다.
플랫폼이 서버 제공/관리부터, 기능까지 제공 해준다고 보면 된다.
대표적인 서비스로는 Firebase가 있다.
FaaS란 Function as a Service의 약자로, 함수를 서비스로 제공 한다는 의미다.
사용자는 HTTP 요청을 통해 매개변수를 포함하여 함수를 호출하고 원하는 리턴값을 반환 받음으로써 함수를 사용할 수 있다.
사용자가 프로그래밍 로직에만 집중 할 수 있도록 하는것이 바로 FaaS와 서버리스의 주요한 목표이다.
축약하자면, FaaS는 프로젝트내의 특정 기능들을 쪼개 함수로 등록하여, 이 함수들의 사용량 만큼 비용을 내는 방식을 말한다.
대표적인 서비스로는 AWS Lambda, Vercel등이 있다.
비용 절감
서버 구축 운영에 필요한 비용 대신 이벤트방식의 비용 청구
품질 향상
복잡한 서버의 설계 대신 프로그래밍 로직에 신경을 씀으로써 앱의 품질 향상
유연한 확장
서비스 측의 서버 자동확장 등
빠른 개발 배포
간단한 패키징 및 배포
성능 감소
FaaS 같은 경우 이벤트가 발생할 경우만 활성화가 되다보니 자연스레 요청시간의 증가
로컬 데이터 사용불가
서버리스의 함수는 정적으로 구현이 되므로, 전후 데이터 사용 불가
플랫폼에 종속적
심하게 플랫폼에 종속적이게 되므로 마이그레이션, 이전 등에 있어서 불리
Serverless는 위에 다룬것 외에도 IaaS / PaaS 등이 있다.
그중에 사용한것들을 먼저 간략히 다루어 보았다.
개인 프로젝트를 진행하며 특정 주소로 http요청을 진행할 때 vercel의 Serverless Function을 도입했다.
처음엔 생소한 개념이라 감을 잡는데 오래 걸렸지만, 공부하다보니 이미 BaaS를 경험 해본적이 있었다(Fire base)
코딩에 있어서 모르고 쓰는것과 알고 쓰는것의 차이는 크다.
다양한 기술들을 평소에 찾아보고 도입할 수 있도록 노력해야겠다.
*참고 문서
https://www.redhat.com/ko/topics/cloud-native-apps/what-is-serverless