[Server] 서버리스 아키텍처에 대한 기초 지식
서버리스 아키텍처에 대하여
회사에서 개발과 관련해서 이야기를 하는데, CaaS, FaaS, BaaS 등에 대한 이야기를 듣게 되었다. 생각해보니 이름만 들어보고 한 번도 제대로 알아본적이 없어서 이번기회에 정리합니다.
서버리스(Serverless)란 말 그대로 서버가 없다는 의미는 아닙니다. 다만, 특정 작업을 수행하기 위해서 컴퓨터 혹은 가상머신에 서버를 설정할 필요없이 다른 서비스(BaaS, FaaS) 등에 의존해서 작업을 처리합니다.
들어가기에 앞서서 간단한 발전 과정은 다음과 같습니다.
>
기존 애플리케이션
1. 자체 설계
시스템에서 필요한 모든 인프라를 직접 관리합니다. 기존의 전산실로 이해하면 됩니다.
- 필요한 모든 인프라를 직접 관리. 예를 들어 기업 전산실에서 서버 및 하드웨어, 네트워크, 운영체제 등을 갖추어 모두 직접 처리해야합니다.
- 시스템이 커질 수록 유지할 관리자가 필요하고, 이에 따른 비용이 발생합니다.
2. IaaS(Infrastructure as a Service)
AWS, Azure 등의 서비스에서 제공하는 서비스입니다. 서버자원, 네트워크, 전력 등의 인프라를 직접 구축할 필요없이 이러한 인프라를 가상화하여 관리하기 쉽게 해주는 서비스를 제공합니다.
사용자는 해당 서비스를 통해서 관리자패널에서 인프라를 구성하면 됩니다. 사용자는 가상머신을 만들고 네트워크를 설정하고, 하드웨어를 설정하고, 운영체제를 설치해서 애플리케이션을 구동합니다.
3. PaaS(Platform as a Service)
IaaS에서 좀 더 추상화된 모델입니다. 네트워크, OS, 런타임을 제공합니다. 사용자는 애플리케이션만 배포하면 바로 구동할 수 있습니다. 또한 Auto Scaling 및 Load Balacing도 손쉽게 적용가능합니다.
예시로는 다음과 같습니다.
- AWS Elastic Beanstalk, Azure App Servies 등등
Servless
- 서버리스는 애플리케이션 개발자가 서버를 프로비저닝하거나 애플리케이션의 확장을 관리할 필요가 없습니다.
프로비저닝(Provisioning) : 사용자의 요구에 맞게 시스템을 할당하고 배치, 배포한 이후 필요시에 시스템을 즉시 사용할 수 있는 상태로 미리 준비해놓는 것입니다.
- 서버가 없다는 뜻은 아니며, 작업을 처리하는 서버는 있지만 서버를 관리할 필요가 없습니다.
- 대표적으로 BaaS 와 FaaS로 나눠집니다.
1. BaaS(Backend as a Service)
- 애플리케이션에서 일반 사용자가 보는 영역은 프론트엔드, 관리자가 보는 영역은 백엔드로 불립니다. 이때 BaaS는 백엔드인 관리자 영역을 모듈화하여 서비스로 제공합니다.
- 백엔드 개발(데이터 저장, 다른 기기로 접근, 파일 공유 등)이 필요한 경우, 개발자가 이러한 모든 서비스를 구축하기 어려워서, BaaS를 통해서 개발 시간을 단축합니다.
- IaaS, PaaS가 서버 인프라를 대체하는 정도였다면, BaaS와 FaaS는 서버 운영까지 맡기는 서비스입니다.
- 대표적인 서비스로는 Firebase가 있습니다.
장점
- 개발 시간의 단축
- 서버 확장의 불필요함
- 백엔드에 대한 지식이 부족하더라도 빠른 속도로 개발이 가능
- 토이 프로젝트, 소규모 프로젝트에서는 백엔드로 유용하게 사용가능
단점
-
클라이언트 위주의 코드
- 백엔드 로직이 클라이언트 쪽에 구현됨 (보안 등의 큰 이슈)
- Firebase SDK를 통해 서버쪽에서 개발할 수 있지만, 이보다는 직접 구현이 좋습니다.
- 데이터단의 로직이 변경되면 클라이언트 코드 수정이 이루어집니다.
-
가격
- Firebase의 경우 초반에는 무료이지만, 앱의 규모가 커지면 비싸집니다.
- 서비스 규모가 늘어날 수록 직접 구현의 장점이 가능합니다.
-
복잡한 쿼리가 불가능함
- Firebase는 데이터 베이스가 하나의 큰 Json 형식으로 구조화 되어 있습니다.
2. FaaS(Function as a Service)
- 코드, 함수를 서비스로 제공합니다. 애플리케이션 개발에서 함수를 실행하기 위해 서버를 올리고 런타임을 구성하고 코드를 배포해서 실행해야 하는 일련의 과정을 없애고 원하는 로직을 함수로 등록만 해놓으면 특정 이벤트시 함수가 실행되고 종료됩니다.
- 서버가 계속 대기하면서 사용자의 요청하는 것이 아니라, 이벤트가 발생했을 때만 함수가 실행되기 때문에 함수가 실행되는 시간 및 호출된 횟수만큼만 비용을 지불합니다.
- PaaS의 경우는 전체 애플리케이션을 배포하여 서버에서 애플리케이션이 계속 돌아가지만, FaaS는 애플리케이션을 더 작게 쪼갠 함수를 배포하며, 특정 이벤트가 발생했을 때만 실행되고 종료됩니다.
- 주로 서비스 사이의 간단한 작업을 처리하는 용도로 쓰이며, BaaS와 결합해서 사용하기 좋습니다. 대표적인 예시로는 AWS Lambda, 구글의 Knative, Nuclio 등이 있습니다.
장점
-
비용
- 특정 작업을 하기위해 서버를 준비하고 켜놓는 것이 아니라면, 필요시만 호출되기 때문에 많은 비용을 절감할 수 있습니다.
-
인프라 관리
- 네트워크, 장비 등에 대해 신경쓸 필요가 없습니다.
-
인프라 보안
- 리눅스 업데이트, 취약점 보안 패치 등에 큰 신경을 쓰지 않다도 됩니다.
-
확장성
- 확장성에서 굉장히 유연합니다. (AutoScaling 등의 필요없습니다. 그저 호출만 될뿐...)
단점
-
제한
- 함수에서 사용할 수 있는 자원의 제한이 존재합니다.
- 웹소켓과 같이 계속 켜놓는 것은 사용하기 힘듭니다.
- 제공사에 대한 강한 의존
-
로컬 데이터 사용 불가능
- 함수들은 무상태이기 때문에 이 데이터를 로컬 스토리지에 쓸수없습니다. (물론, AWS는 S3, Azure는 Storage를 사용 가능합니다.)
3. 정리
Serverless의 특징은 다음과 같습니다.
-
Cold Start
- 클라우드 업체는 자원을 효율적으로 관리하기 위해 일정 기간 행위가 없는 사용자에게는 컴퓨팅 파워를 제공하지않습니다.
- 비활성 함수가 갑자기 호출되면 서버가 준비되는 지연 시간이 발생하여 애플리케이션 성능에 영향을 줄 수도 있습니다.
-
Stateless
- 함수가 없는 경우에는 모든 리소스 종류가 존재하지 않습니다.
- 세션을 보존해야하는 경우에는 DB에 저장하는 것이 좋습니다.
-
일시적 컨테이너
- 특정 이벤트가 발생하는 일정 기간 동안에만 컨테이너에 배포되고, 그 이후는 자원이 없습니다.
- 큰 요구사항이 필요한 경우에는 적합하지 않습니다.
-
언어지원
- AWS Lambda: Node.js, Python, Java, C#, Go
- MS Azure: C#, Javascript, F#, Python, Batch, PHP, PowerShell
- Google Function: Node.js, Python, Javascript
-
NoSQL
- 함수는 제한된 데이터베이스 색인(Index)을 구성하기 때문에 서버리스 아키텍처에서 관계형 데이터베이스를 사용하면 동시 연결 수 제한으로 확장성과 성능 문제가 발생합니다.
- 따라서 RDBMS 보다는 NoSQL이 적합합니다.
그러나. 현재는 Stateless, 일시적 컨테이너에 따른 특징으로 인해 큰 프로젝트에는 적합하지 않습니다.
그 외.
1. CaaS(Container as as Service)
컨테이너 기반 추상화를 통해 사용자가 애플리케이션을 배포하고 관리하도록 지원하는 클라우드 서비스 컴퓨팅 모델입니다. 제공없체는 컨테이너가 배포 및 관리되는 프레임워크 또는 오케스트레이션 플랫폼을 제공합니다.
오케스트레이션(orchestration)이란?
- Container orchestration이란 컨테이너의 배포, 관리, 확장 및 네트워킹을 자동화합니다.
클라우드 서비스의 범위에서 CaaS는 IaaS의 하위집합으로 간주되며 IaaS와 서비스 플랫폼인 PaaS 사이에 존재한다고 이해하면 됩니다.
컨테이너를 사용하므로 다음과 같은 특징을 가집니다.
- 이식성 : private, public 등의 다양한 환경에서 배포가능
- 확장성 : 컨테이너의 수를 늘려서 확장할 수 있습니다.
- 효율성 : 컨테이너는 별도의 운영체제가 필요없으므로 가상 머신(VM)보다 리소스가 적게 필요합니다.
- 보안강화 : 컨테이너는 격리되어 있으므로 다른 컨테이너에 영향을 주지 않습니다.
- 속도 : 운영 체제에 구애받지 않기 때문에 시작과 종료시간이 짧습니다.
이와 같은 환경에서는 쿠버네티스를 사용하는 것이 좋습니다.
쿠버네티스에 대한 간단한 정리는 아래의 링크를 보시면 좋을 듯합니다.
: 쿠버네티스란?
2.DBaaS(Database as a Service)
DBaaS는 클라우드 아키텍처로서 데이터베이스 서비스 프로바이더가 하나 아싱의 서비스 소비자에게 데이터베이스 서비스를 제공하는 아키텍처, 운영 전략입니다.
다음과 같은 요구사항을 만족합니다.
- 리소스의 빠른 제공 및 Self-Service 동작, 데이터베이스 관리
- 데이터베이스 서비스 사용량에 기반한 Show-back 리포트와 Charge-back 기능을 제공합니다.
이러한 특성을 바탕으로 DBaaS는 클라우드 서비스를 통해 자원의 탄력적인 운용과 확장가능, 자동화된 자원 관리, 용량 설정 및 설계의 기능을 제공합니다.
이러한 기능은 다음의 장점을 가집니다.
- 비용절감
-
서비스 수준향상
- Self-Service Provising, 관리
- 미리 약속된 서비스 정의
- Metering 및 Chargeback을 통한 IT 비용 및 활용도 측정 가능
정리.
간단하게 서버리스 아키텍처에 대해 정리하였습니다. 흔히 듣던, IaaS, BaaS, PaaS, FaaS에 대해 간단하게 정리해보았고, 최근에 들었던 CaaS에 대해서도 간단하게 조사했습니다.
이후 부족한 내용이나 보완되어야하는 내용이 있다면 편하게 이야기주세요.
출처