서버리스(Serverless)란?
서버리스는 클라우드 컴퓨팅의 모델 중 하나로 사용자가 서버를 직접 관리할 필요가 없는 모델을 의미합니다.
여기서 서버를 직접 관리할 필요가 없다는 의미는 IaaS와 같은 모델처럼 트래픽에 따라 사용자가 직접 서버의 가용량을 증/감 시킬 필요가 없다는 뜻 입니다.
서버(Server) + 리스(Less)의 합성어라서 간혹 '서버가 없다'라고 문자 그대로 이해하실 수도 있는데 서버가 없을수는 없습니다. 어딘가에 저장할 공간이 있긴 해야 하니까요.
자세히 알아보기
클라우드 컴퓨팅이 등장하면서 우리는 더 이상 서버를 직접 설치하고 관리 할 필요가 없어졌습니다.
집에다 직접 서버를 사서 설치하고 관리하고 정전이라도 나면 눈물을 흘리고(?) 할 필요 없이
그저 MS, 아마존, 구글에게 돈만 주면 그들이 제공하는 짱짱한 서버를 이용 할 수 있게 된 것이죠.
하지만 서버의 물리적인(하드웨어) 부분은 클라우드 서비스를 제공하는 기업이 직접 관리해주지만 여전히 서버의 소프트웨어적인 부분은 사용자가 직접 관리를 해야 합니다. 서버에 깔린 운영체제 등을 업데이트하고, 데이터를 백업하고, 보안에도 신경 써야 하는 등 생각보다 귀찮은 일이 많습니다.
그리고 IaaS모델이나 PaaS모델은 실제 사용자에 관계없이 미리 결제한 용량에 따라 요금을 내야 합니다.
사용자가 1000명이 될 걸 예상하고 그에 맞는 용량의 서비스를 구입했다면 실제 사용자가 1000명이든 0명이든 같은 금액을 내야 하는 것입니다. 이는 크던 작던 손실을 일으키기 마련이죠..
하지만 서버리스는 이와 좀 다릅니다.
서버리스는 동적으로 서버의 자원을 할당합니다.
즉 사용자가 없다면 자원을 할당하지 않고 대기하다가 요청이 들어오면 그 때 자원을 할당해서 요청을 처리하고 다시 대기 상태로 들어가게 됩니다. 자원을 효율적으로 사용할 수 있는 것입니다.
비용 또한 대기상태를 제외한 실제 사용 자원에 대해서만 청구가 되기 때문에 굉장히 경제적입니다.
게다가 이 서버는 클라우드 제공 기업에서 전적으로 관리하기 때문에 사용자는 스케일링, 업데이트, 보안 등 서버에 대해 일절 관리하거나 신경 쓸 필요가 없어집니다. 서버를 고려하지 않고 서비스와 애플리케이션에 집중할 수 있게 되는 것이죠.
요약하자면 '기존 클라우드 컴퓨팅 모델에 비해 경제적이고 가용성이 좋은 모델이 서버리스다' 라고 생각하시면 될 것 같습니다.
서버리스의 구분(FaaS와 Baas)
서버리스는 FaaS와 BaaS로 구분할 수 있습니다.
FaaS(Function as a Service)
FaaS는 Function, 즉 함수를 서비스로 제공합니다.
사용자가 작성한 코드(백엔드)를 서버리스 제공자의 서버에 업로드하게 되면 해당 서버는 업로드한 코드를 함수 단위로 쪼개어 대기상태로 두게 됩니다. 그러다 요청이 들어오면 서버가 대기상태에 두었던 함수를 실행시켜 처리한 다음 작업이 끝나면 다시 대기상태로 만드는 구조입니다. 비용은 함수 호출 횟수에 따라 청구됩니다.
쉽게 말하자면 업로드한 코드가 평상시에는 쿨쿨 자고있고, 요청이 들어오면 서버가 코드를 깨워 일을 시킨 후 다시 재운다..정도로 이해하시면 될 것 같습니다.
+ 함수 호출 후 일정 시간이 경과되어도 다시 수면상태로 들어간다고 합니다.(AWS Lambda의 경우는 5분)
대표 서비스 : AWS Lambda, MS Azure Function
BaaS(Backend as a Service)
BaaS는 백엔드 개발에 필요한 여러 기능을 API로 제공하는 서비스입니다.
쉽게 말하자면 SNS연동이나 DB와 같이 백엔드에 필요한 기능들을 사용자가 직접 구현 할 필요 없이 제공하는 API로 해당 기능을 구현할 수 있게 해 주는 것입니다. 클라우드 공급자가 백엔드 개발 환경까지 제공해 준다고 보시면 될 것 같습니다.
대표 서비스 : Firebase
즉, FaaS와 BaaS의 차이는 직접 백엔드를 구현했느냐 아니냐의 차이 정도로 보시면 됩니다.
서버리스의 장, 단점
장점
1. 가격
- 기존 IaaS나 PaaS와는 다르게 실제 사용량에 대해서만 비용이 청구되므로 경제적입니다.
2. 애플리케이션의 품질에 집중 가능
- 서버에 신경 쓸 필요가 없어지므로 사용자는 개발하는 애플리케이션의 품질 향상에 좀 더 집중할 수 있습니다.
3. 높은 가용성과 유연한 확장
- 요청이 들어올때만 실행되고 동적으로 자원을 할당하기 때문에 가용성이 높고 스케일링에 신경 쓸 필요가 없습니다.
단점
1. Cold Start
- 아무래도 서버가 항시 요청에 대기하고 있는게 아니다보니 IaaS나 PaaS등의 모델보단 느립니다.
프로젝트 규모가 작다면 별로 신경쓸만한 사항은 아니지만 규모가 커지거나 속도를 요구하는 프로젝트라면 서버리스는 좋은 선택이 아닐 수 있습니다..
2. 클라우드 제공 플랫폼에 심하게 종속적
- 기존 IaaS나 PaaS모델은 플랫폼을 바꾸는게 어렵지 않지만(예시 : AWS에서 Google Cloud로) 서버리스는 애플리케이션의 구조 자체를 바꾸기 때문에 다른 플랫폼으로 이전하는게 굉장히 힘듭니다. 그리고 이는 곧 사용중인 플랫폼의 가격이나 정책, 서비스 변경에도 민감하게 반응해야됨을 의미합니다.
3. 긴 시간을 요하는 작업에 불리함
- 서버리스는 단순 작업(댓글 쓰기, 이메일 보내기 등)에는 적합하지만 긴 시간을 요하는 작업(동영상 업로드, 데이터 백업 등)에는 굉장히 비효율적입니다. 서버리스는 함수가 1회 호출 될 때 사용할 수 있는 메모리 및 시간에 제한이 있기 때문입니다. 작업이 끝나지 않은채로 해당 시간이 지나면 작업이 끝날때까지 일정 시간마다 계속 함수를 다시 호출하므로 굉장히 비효율적입니다.
서버리스를 추천하는 대상
서버리스는 사이드 프로젝트(토이 프로젝트)나 최대한 빠르게 시제품(초기 서비스)을 런칭하고 싶은 경우에 추천드립니다. 이런 경우 기존 클라우드 컴퓨팅 모델에 비해 돈과 시간을 모두 절약할 수 있으므로 서버리스가 좋은 선택이 될 수 있습니다.
'웹개발' 카테고리의 다른 글
HTTP(Hypertext Transfer Protocol)란? (0) | 2020.10.23 |
---|---|
CSRF(Cross Site Request Forgery)란? (0) | 2020.10.10 |
XSS(Cross Site Scripting)란? (0) | 2020.10.09 |
클라우드 컴퓨팅(Cloud Computing)의 개념 (0) | 2020.10.09 |
프레임워크(framework)의 개념 (0) | 2020.10.09 |