1. Serverless란?
Serverless, 최근에 개발자로 일을 하면서 많이 들어본 단어다. 이 개념에 대해서 뭔 지는 알겠으나 남이 나에게 Serverless가 뭐야?? 라고 물어봤을 때 명확한 답을 할 정도로는 알지 못 하던 중. SWYG에서 진행하는 Serverless 스터디를 참여하게 되어 공부를 하게 되었다.
Serverless는 단순하게 직역하자면, "서버가 없다"라는 뜻이다. 그렇다면 이것은 우리가 개발하는 서버가 없다는 뜻일까?? 그것은 아니다. 서버를 관리를 할 필요가 없다고 해서 Serverless라고 불리는 것이다.
서버 개발자가 하는 일은 단순하게 Spring boot 혹은 Node.js 등을 이용하여 API를 만드는 것이 아니다. Client에게 필요한 API를 제공함과 동시에 그것을 배포하는 환경까지 관리를 할 줄 알아야하는 데, 생각보다 이 과정에 자원이 많이 들어간다. 그러기에 서버를 관리할 필요가 없는 개념인 Serverless가 나왔다.
2. BaaS? FaaS?
서버리스의 대표적인 구현 방식은 두가지가 있다. 바로 Backend as a Service의 약자인 Baas와 Function as a Service의 약자인 Faas가 있다.
- Baas (Backend as a Service) : Firebase...
- Faas (Function as a Service) : Aws Lamda...
(1) Baas
Backend as a Service, 약자로 Baas는 백엔드를 서비스로서 제공하는 방식으로 일반적으로 어플리케이션이나 웹 프론트와 같은 클라이언트를 중심으로 개발된 서비스이다. 개발자는 별도의 서버를 개발하고 구축하지 않고도 간단하게 Baas에서 제공하는 인증, DB 등의 기능을 사용해서 비즈니스 로직을 처리할 수 있다.
BaaS를 사용하는 애플리케이션은 일반적으로 SPA, 안드로이드와 같은 클라이언트 중심으로 개발된 애플리케이션입니다. 클라이언트단에서 Baas가 제공하는 인증, DB, 사용자 관리 등과 같은 외부 서비스를 사용해서 대부분의 비즈니스 로직을 처리합니다.
(2) Faas
Function as a Service, 약자로 Faas는 이벤트를 기반으로 실행되는 모델로, 개발자가 작성하는 로직을 함수 단위로 잘게 쪼개서 사용자가 직접 관리하지 않는 서버에 업로드 하며, 이 함수들은 특정한 조건, 주기 요청등이 트리거가 되어서 서버가 스스로 실행됩니다.
Baas는 stateless를 특징으로 가지면서 Baas와 달리 사용자 정의의 어플리케이션을 생성하는 개발자에게 더 많은 제어 권한을 제공하며 호출 되는 만큼만 비용이 발생하는 특징이 있습니다.
3. Serverless의 장단점
(1) Serverless의 장점
Serverless는 개발자의 생산성을 높이고 운영 비용을 줄일 수 있습니다. 위에서 언급한 것과 같이 생각보다 운영 서버를 직접 구축하고 운영하는 것은 자원이 많이 소모되는 데, 이에 대한 부담을 줄이고 개발자가 어플리케이션에 더 많은 시간을 할애 할 수 있다.
일반적인 운영 서버를 사용한다는 것은 24시간 내내 가동을 해야하기에 계속 실행하고 관리를 한다는 것을 의미하는 데, 서버리스 모델은 필요한 만큼만 클라우디 기반 컴퓨터 리소스에 대한 비용을 지불하기에 저렴하게 이용이 가능하다.
간단하게 서비스를 만들고 싶은 개발자가 백엔드와 프론트를 각각 구축하는 것이 아닌 프론트에서 Serverless를 이용하여 간단하게 서비스를 만들어볼 수 있다.
(1) Serverless의 단점
서버리스는 듣기엔 좋아보이지만 아직 많은 기업들은 직접 서버를 구축하고 운영을 하고 있으며, 주로 서버리스는 작은 프로젝트를 간단히 해보기 좋다고 하는 데 이에 대한 이유는 자체 서버를 실행하지 않고 로직을 제어하지 않는 것은 큰 단점이 된다.
해당 서비스를 제공하는 업체가 구성요소의 상호적용을 제한할 수도 있으며, 사용자 시스템의 유연성과 커스터마이징에 영향을 주게 된다. Baas의 환경이면 개발자는 코드 제어 권한이 없는 서비스에 의존하게 된다.
4. Firebase의 활용 가능성
Serverless 중 Baas의 가장 대표적인 서비스로는 Firebase가 있다. Firebase를 활용할 수 있는 방법에 대해서 생각을 해봤다.
(1) Authentication, 사용자 인증
Firebase에서는 유저 인증에 대한 통합 서비스를 제공한다. 기존에 Oauth를 이용한 소셜 로그인을 만들려면 어떻게 해야했는가? 백엔드 혹은 프론트 쪽에서 각 서비스에 대한 Oauth인증을 처리하고 Token을 취득하여 그를 이용해 사용자의 정보를 얻는 등의 번거로운 작업을 해야했고 이를 각 서비스 마다 개발을 해야했는 데 Firebase는 이를 제공한다.
자주 사용하는 Google, Facebook, Twitter뿐만이 아니라 이메일과 전화번호를 통한 인증도 가능하고 커스텀마이징도 가능하다. 이를 이용하여 쉽게 사용자에 대한 인증을 처리하여 개발 비용을 줄일 수 있을 것 같다.
(2) Firebase Cloud Messaging, 푸시 알림
어플리케이션을 이용하면 휴대폰에 나오는 알람을 볼 수 있다. 인스타그램의 좋아요 알람, 카카오톡의 메세지 알람등이 말이다. Firebase에서는 Firebase Cloud Messaging, 줄여서 FCM 서비스를 제공한다.
해당 서비스를 이용하여 손쉽게 어플리케이션을 사용하고 있는 사용자의 휴대폰에 푸시 알람을 보낼 수 있고, 이에 대해서 SDK와 Sample Code를 다양한 플랫폼들에게 지원한다. FCM을 이용하여 손쉽게 휴대폰 어플리케이션에 대한 푸시알람을 구현할 수 있다.
(3) Cloud Firestore, NoSQL
Firebase는 NoSQL의 데이터베이스 서비스도 지원한다. 일반적으로 Firebase를 접하게 된다면 보통 데이터베이스용으로 많이 처음 접했을 거다. 보통은 어플리케이션을 개발하는 개발자가 간단하게 데이터를 저장하고 싶을 때 사용하는 서비스다.
주로 어플리케이션에서 사용한다는 것뿐이지, Web에서도 충분히 사용할 수 있고 이도 마찬가지로 React 등에서 사용하기 간단하고 편하며 공식문서가 잘 제공되어있어서 Web 프론트 개발자도 별도의 서버를 구축하지 않고 간단하게 데이터베이스를 구축하여 사용할 수 있다.
'DevOps > Server' 카테고리의 다른 글
Turborepo로 프로젝트 구성하기 (0) | 2024.05.07 |
---|---|
Apache와 Tomcat와 그 차이에 대해서 (0) | 2023.01.04 |
Web Server와 WAS에 대해 알아보자! (0) | 2023.01.01 |