서버리스(Serverless)란 단어 그대로 해석하자면 "서버가 없는"이란 의미로 서버리스 아키텍처는 말 그대로 서버가 없는 구조의 시스템을 의미할 것이다. 하지만 실제로는 그렇지 않다.
클라우드 서비스 공급자(AWS, Azure, Google Cloud 등)가 물리 서버를 관리하고 실행하며 특정 요청, 이벤트가 발생할 때에만 동작이 실행되게 된다. 이로 인해 시스템을 구현하는데 있어 서버 단계의 작업들을 AWS, Azure, Google Cloud 등의 클라우드 서비스 공급자에 의존하여 처리한다. 덕분에 개발자는 서버 인프라 작업에 구애받지 않고 어플리케이션과 서비스 구축에 집중할 수 있다.
작동 방식
기존 IaaS 모델에서의 사용자는 용량 단위로 비용을 미리 지불한다. 어플리케이션을 구동하기 위해 "상시 가동" 서버 구성 요소 비용을 지불하는 것이다. 그 대신에 서버리스에서는 BaaS (Backend as a Service) 혹은 FaaS (Function as a Service) 에 의존하여 작업을 처리하게 된다. 이벤트가 실행할 어플리케이션 로직을 트리거하면 해당 로직에 리소스를 "동적"으로 할당하고, 해당 로직의 할당 비용에 대해서만 비용을 지불한다.
서버리스의 모델 중 하나인 서비스로서의 백엔드 BaaS (Backend as a Service)에 대해서 먼저 살펴보자면, 보통 모바일 또는 웹 어플리케이션을 개발할 때 항상 백엔드 개발을 동반하게 된다. 사용자의 데이터를 저장하고, 다른 기기들과 접촉하고 데이터를 공유하기 위해서는 백엔드 개발은 필수다. 백엔드 개발은 비용이 꽤 드는 작업인데, 늘어나는 유저들의 사용량을 어떻게 감당할 것인가, 데이터의 보안을 어떻게 처리할 것인가 등 고려할 사항들이 많기 때문이다. 그래서 개발자가 백엔드를 개발하지 않고 어플리케이션을 개발할 수 있게끔 탄생한 서비스가 BaaS다. 어플리케이션 개발시 필요한 백엔드 기능들을 API로 제공해 줌으로써 개발자들이 서버를 개발하지 않고도 필요한 기능을 구현할 수 있게 하고, 사용한 만큼만 비용을 지불하게 해준다. 대표적인 예로는 Firebase가 있다. BaaS를 사용해 어플리케이션을 개발한다면 용은 사용한 만큼만 지불하고, 서버의 유저수가 순식간에 늘어나게 돼도 알아서 확장이 된다.
또 하나의 모델인 서비스로서의 기능FaaS (Function as a Service)은 서버측 로직에 대해서는 어플리케이션 개발자가 직접 작성하게 된다. 하지만 로직이 작성되면 클라우드 제공업체가 관리하는 컨테이너에 배포되어 해당 함수들이 실행되는 횟수, 실행된 시간 만큼만 비용을 지불하게 된다. 이러한 컨테이너에는 아래와 같은 특징이 있다.
- 스테이트리스(stateless): 데이터 통합이 더욱 간소화됨
- 일회성: 매우 단기간에 실행 가능
- 이벤트에서 트리거: 필요에 따라 자동으로 실행 가능
- 전체 관리형: 클라우드 제공업체가 관리를 전담하므로 “상시 가동” 애플리케이션 및 서버 대신 필요한 만큼만 비용 지불
FaaS는 비용적 측면에서 기존 IaaS나 PaaS보다 이점을 갖는다. 특정 작업을 하기 위하여 24시간 서버가 켜져있는 것이 아닌, 지정된 이벤트 트리거가 발생할 시에만 함수가 호출되어 처리되며 호출된 횟수, 시간 만큼만 비용이 지불되어 많은 비용이 절약된다. 또한 인프라, 보안 측면에서도 클라우드 제공업체가 모두 구성하여 제공해주기 때문에 해당 작업에 시간을 할애하지 않아도 된다. 그리고 사용량에 따라 서버의 리소스를 조정할 필요 없이 호출된 함수의 갯수만 처리하게 되고 또한 그 함수 호출의 수가 순식간에 늘어나도 클라우드 제공업체에서 리소스를 동적으로 할당하기 때문에 확장성도 뛰어나다.
'Study > etc' 카테고리의 다른 글
정규 표현식(regular expression) 정리 (0) | 2020.09.24 |
---|---|
REST API URI 패턴 (0) | 2020.07.15 |