[Back-end] Serverless

Geun·2022년 4월 25일
0

Back-end

목록 보기
66/74

기존의 기술들

자체적 시스템 설계

시스템에서 필요한 모든 인프라를 직접 관리하는 것을 말한다.
공간, 하드웨어, 네트워크, 운영체제 등을 모두 관리해야 한다.
이 방식에서는 시스템이 많이 커질 경우 전산실을 유지할 관리자가 필요하고, 이 인력에 대한 비용이 생긴다는 점이다.


IaaS(Infrastructure as a Service)

AWS, Azure 등의 서비스가 만들어졌기 때문에 더 이상 서버자원, 네트워크, 전력 등의 인프라를 모두 직접 구축할 필요가 없어졌다.
이런 인프라들을 가상화하여 관리하기 쉽게해주는 서비스를 이용하면
관리자 패널에서 인프라를 구성하고 사용하면 된다.
사용자는 가상머신을 만들어 네트워크를 설정하고, 하드웨어를 설정하고 운영체제를 설치해서 애플리케이션을 구동할 수 있다.
사용량을 쉽게 모니터링 할 수 있다.


PaaS(Platform as a Service)

IaaS에서 한 번 더 추상화된 모델이다.
네트워크, 런타임까지 제공 된다.
사용자는 애플리케이션을 배포하면 바로 구동시킬 수 있게된다.
대표적으로 AWS Elastic Beanstalk, Azure App Service 등이 있다.
이를 사용하면 Auto Scaling 및 Load Balancing을 쉽게 적용할 수 있다.


Serverless

서버리스는 클라우드 컴퓨팅의 모델 중 하나로 사용자가 서버를 직접 관리할 필요가 없는 모델을 의미한다.
서버를 직접 관리할 필요가 없다는 것은 IaaS와 같은 모델같이 트래픽에 따라 사용자가 직접 서버의 가용량을 증감시킬 필요가 없다는 의미이다.

특징

서버리스동적으로 서버의 자원을 할당한다.
사용자가 없다면 자원을 할당하지 않고 대기하다가 요청이 들어오면,
그 때 자원을 할당해서 요청을 처리하고 다시 대기 상태로 들어가게 된다.

비용의 경우 대기상태를 제외하고 실제 사용자원에 한해서 청구되기 때문에 경제적이다.
또한 이 서버는 클라우드 제공 기업에서 전적으로 관리하기 때문에 사용자는 스케일링, 업데이트, 보안 등 서버에 대해 일절 관리하거나 신경 쓸 필요가 없어진다.
서버롤 고려하지 않아도 서비스와 애플리케이션에 집중을 할 수가 있다.

서버리스는 기존 클라우드 컴퓨팅 모델에 비해 경제적이고 가용성이 좋은 모델이다.

서버리스 구분(FaaS / BaaS)

FaaS(Function as a Service)

FaaS는 Function, 함수를 서비스로 제공한다.

사용자가 작성한 코드를 서버리스 제공자의 서버에 업로드하게되면 해당 서버는 업로드한 코드를 함수단위로 쪼개 대기상태로 둔다.
이후 요청이 들어오면 서버가 대기상태에 두었던 함수를 실행시켜 처리한 다음,
작업이 끝나면 다시 대기상태로 만드는 구조이다.
비용은 함수 호출 횟수에 다라 청구된다.

대표적인 서비스로 AWS Lambda, MS Azure Function이 있다.

BaaS(Backend as a Service)

BaaS는 백엔드 개발에 필요한 여러 기능을 API로 제공하는 서비스이다.

SNS연동이나 DB와 같이 백엔드에 필요한 기능들을 사용자가 직접 구현할 필요 없이 제공하는 API로 해당 기능을 구현할 수 있게 해준다.
클라우드 공급자가 백엔드 개발환경까지 제공해준다고 보면 된다.

대표적인 서비스로 Firebase가 있다.

FaaS와 BaaS의 차이는 직접 백엔드를 구현했는지 아닌지의 차이이다.

장점

  • 가격
    기존 IaaS나 PaaS와 다르게 실제 사용량에 대해서만 비용이 청구된다.

  • 애플리케이션의 품질에 집중 가능하다
    서버에 신경쓸 필요가 없어져 개발하는 애플리케이션의 품질 향상에 좀 더 집중할 수 있따.

  • 높은 가용성과 유연한 확장성
    요청이 들어올 때만 실행되고 동적으로 자원을 할당하기 때문에 가용성이 높고 스케일링에 신경쓸 필요가 없다.

단점

  • Cold Start
    IaaS나 PaaS의 모델보다 느리다.
    프로젝트의 규모가 작다면 상관없을 수 있지만, 규모가 커지거나 속도를 요구하는 프로젝트라면 서버리스가 좋은 선택이 되지 않을 수 있다.

  • 클라우드 제공 플랫폼에 심하게 종속적이다
    IaaS나 PaaS 모델은 플랫폼을 바꾸는게 어렵지 않지만 서버리스는 애플리케이션의 구조 자체를 바꾸기 때문에 다른 플랫폼으로 이전하기 어렵다.(AWS에서 Google Cloud로 이전하는 것)
    이것은 사용중인 플랫폼의 가격이나 정책, 서비스 변경에도 민감하게 반응해야할 수 있음을 의미한다.

  • 긴 시간을 요하는 작업에 불리하다
    서버리스는 단순 작업(댓글 쓰기, 이메일 보내기)에는 적합하지만 긴 시간을 요하는 작업(동영상 업로드, 데이터 백업)에는 비효율적이다.
    서버리스는 함수가 1회 호출될 때 사용할 수 있는 메모리 및 시간에 제한이 있기 때문이다.
    작업이 끝나지 않은 채로 해당 시간이 지나면 작업이 끝날 때까지 일정 시간마다 함수를 다시 호춣하므로 비효율적이다.

서버리스를 추천하는 경우

서버리스는 사이드 프로젝트나 최대한 빠르게 시제품(초기 서비스)를 런칭하고 싶은 경우에 추천한다.
이 경우 클라우드 컴퓨팅 모델에 비해 돈과 시간을 절약할 수 있어 서버리스가 좋은 선택이 된다.


참고자료

https://velopert.com/3543
https://www.youtube.com/watch?v=ufLmReluPww&feature=youtu.be
https://tibetsandfox.tistory.com/4

0개의 댓글