PracticeEveryday

Serverless 본문

정리/CS

Serverless

kimddakki 2022. 6. 15. 15:45
서버리스

 - 서버리스는 클라우드 컴퓨팅의 모델 중 하나로 사용자가 서버를 직접 관리할 필요가 없는 모델을 의미합니다.

 - 여기서 서비를 직접 관리할 필요가 없다는 의미는 Iaas와 같은 모델처럼 트레픽에 따라 사용자가 직접 서버의 가용량을

   증감 시킬 필요가 없다는 뜻입니다.

 

※ 서버 ( Server ) + 리스 ( Less )의 합성어라 '서버가 없다'라고 문자 그대로 이해할 수 있지만 서버가 없을 수는 없습니다.

    어딘가에 저장할 공간이 있긴 해야 합니다.


클라우딩 컴퓨터

 - 클라우드 컴퓨팅이 등장하면서 더 이상 서버를 직접 설치하고 관리할 필요가 없어졌습니다.

 - 집에 직접 서버를 사서 설치하여 관리할 필요 없이 MS, 아마존, 구글에게 돈을 지불하면 서버를 이용할 수 있게

   된 것입니다.

 

 - 하지만 서버의 물리적인 ( 하드웨어 ) 부분은 클라우드 서비스를 제공하는 기업이 직접 관리해 주지만 서버의 소프트웨어

   적인 부분은 사용자가 직접 관리해야 합니다.

 - 서버에 깔린 운영체제 등을 업데이트하고, 데이터를 백업하고, 보안에도 신경써야 하는 등 생각보다 귀찮은 일이

   많습니다.

 

 - 그리고 IaaS 모델이나 PaaS 모델은 실제 사용자에 관계 없이 미리 결제한 용량에 따라 요금을 지불해야 합니다.

 - 사용자가 1000명이 될 걸 예상하고 그에 맞는 용량의 서비스를 구매했다면 실제 사용자가 1000명이든 0명이든

   같은 금액을 지불해야 하는 것입니다. 이는 크던 작던 손실을 일으키게 됩니다.

 


다시 서버리스

 - 서버리스는 동적으로 서버의 자원을 할당합니다.

 

 - 즉 사용자가 없다면 자원을 할당하지 않고 대기하다가 요청이 들어오면 그 때 자원을 할당해서 요층을 처리하고 다시 

   대기 상태로 돌아가게 됩니다. 자원을 효율적으로 사용할 수 있는 것입니다.

 

 - 비용 또한 대기 상태를 제외한 실제 사용 자원에 대해서만 청구되기 때문에 굉장히 경제적이게 됩니다.

 - 게다가 이 서버는 클라우드 제공 기업에서 전적으로 관리하기 때문에 사용자는 스케일링, 업데이트, 보안 등 서버에 대해

   일절 관리하거나 신경 쓸  필요가 없습니다. 서버를 고려하지 않고 서비스와 애플리케이션에 집중할 수 있게 되는 것이죠

 

 - 기존 클라우드 컴퓨터 모델에 비해 결제적이고 가용성이 좋은 모델이 서버리스입니다!

클라우드 컴퓨팅 3대 모델과는 달리, 클라우드 제공자가 클라우드 인프라 및 애플리케이션 스케일링을 모두 관리한다.

특정 작업을 수행하기 위해서 서버 설정 대신, BaaS와 FaaS에 의존하여 작업을 처리한다.

BaaS를 통해 제3자의 네트워크, 데이터베이스 등의 API를 사용할 수 있다.
FaaS를 통해 서버 로직을 개발자가 직접 구현할 수 있다.

OS, 파일 시스템 관리, 보안 패치, 부하 분산, 용량 관리, 스케일링, 로깅, 모니터링 등의 기능을 모두 서비스로 제공받을 수 있다.

기존의 Severless는 보통 Stateless의 특징을 갖고 있었으나, Stateful Serverless도 점점 등장하는 추세이다.

관계형 데이터베이스는 확장성과 성능 문제가 발생할 수 있기 때문에 NoSQL 데이터베이스가 적합하다.

 

FaaS ( Function as a Service )

 - FaaS는 Function, 즉 함수를 서비스로 제공합니다.

  => 서버리스 컴퓨팅을 ' 구현 '하는 방식입니다.

 

 - 사용자가 작성한 코드 ( 백엔드 ) 를 서버리스 제공자의 서버에 업로드하게 되면 해당 서버는 업로드한 코드를 함수 

   단위로 쪼개어 대기상태로 두게 됩니다.

 - 그러다 요청이 들어오면 서버가 대기 상태에 두었던 함수를 실행시켜 처리한 다음 작업이 끝나면 다시 대기 상태로 

   만드는 구조입니다.

 => 실행 가능한 코드(함수)를 미리 등록해놓았다가 특정 이벤트(트리거)가 발생하면 알아서 호출 및 종료되도록 합니다.

 

 - 비용은 함수 호출 횟수에 따라 청구됩니다.

 

 - 업로드한 코드가 평상시에는 자고 있고, 요청이 들어오면 서버가 코드를 깨워 일을 시킨 후 다시 재운다. 정도로

   이해하면 좋을 것 같습니다.

 == > + 함수 호출 후 일정 시간이 경과되어도 다시 수면상태로 들어간다고 합니다.(AWS Lambda의 경우는 5분)

 

Ex ) AWS Lambda, MS Azure Function

 

Baas ( Backend as a Service )

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

 => 서비스 제공자로부터 미리 만들어진 백엔드 API를 제공받아 사용하는 형태입니다.

 

 - 쉽게 말하자면 SNS 연동이나 DB 같이 백엔드에 필요한 기능들을 사용자가 직접 구현할 필요 없이 제공하는 API로 해당

   기능을 구현할 수 있게 해주는 것입니다.

 - 클라우드 공급자가 백엔드 개발 환경까지 제공해 준다고 보시면 될 것 같습니다.

Ex ) Firebase

 

 => 즉 FaaS와 BaaS의 차이는 직접 백엔드를 구현했느냐 아니냐의 차이 정도로 보시면 됩니다.

 

 


장점

1. 가격

 - 기존 IaaS나 PaaS와는 다르게 실제 사용량에 대해서만 비용이 청구 되므로 경제적입니다.

 

2. 애플리케이션의 품질에 집중 가능

 - 서버에 신경 쓸 필요가 없어지므로 사용자는 개발하는 애플리케이션의 품질 향상에 좀 더 집중 할 수 있습니다.

 

3. 높은 가용성과 유연한 확장

 - 요청이 들어올 때만 실행되고 동적으로 자원을 할당하기 때문에 가용성이 높고 스케일링에 신경 쓸 필요가 없습니다.

 

단점

1. Cold Start

 - 서버가 항시 대기하고 있는 게 아니다보니 IaaS나 PaaS등의 모델보단 느립니다.

 

 - 프로젝트 규모가 작다면 신경 쓸 사항이 아니지만 규모가 커지거나 속도를 요구하는 프로젝트라면 서버리스는 좋은

   선텍이 아닐 수 있습니다.

 

2. 클라우드 제공 플랫폼에 심하게 종속적이다.

 

 - 기존 IaaS나 PaaS 모델은 플랫폼을 바꾸는 게 어렵지 않지만 ( AWS -> Google Cloud ) 서버리스는 애플리케이션 구조

   자체를 바꾸기 때문에 다른 플랫폼으로 이전하는 것이 어렵습니다.

 - 그리고 이는 사용중인 플랫폼의 가격이나 정책, 서비스 변경에도 민감하게 반응하게 됩니다.

 

3. 긴 시가간을 요하는 작업에 불리

 - 서버리스는 단순 작업 ( 댓글 쓰기, 이메일 보내기 등) 에는 적합하지만 긴 시간을 요하는 작업 ( 영상 업로드,

   데이터 백업)에는 굉장히 비효율적입니다.

 - 서버리스는 함수가 1회 호출 될 때 사용할 수 있는 메모리 및 시간이 제한되어 있기 때문입니다.

   작업이 끝나지 않은 채로 해당 시간이 지나면 작업이 끝날 때까지 일정 시간마다 계속 함수를 다시 호출하므로 굉장히

   비효율적입니다.

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

 

서버리스(Serverless)의 개념

서버리스(Serverless)란? 서버리스는 클라우드 컴퓨팅의 모델 중 하나로 사용자가 서버를 직접 관리할 필요가 없는 모델을 의미합니다. 여기서 서버를 직접 관리할 필요가 없다는 의미는 IaaS와 같

tibetsandfox.tistory.com

 

Serverless, BaaS, FaaS

애플리케이션 개발 패러다임 변화

rito15.github.io

 

'정리 > CS' 카테고리의 다른 글

Base64  (0) 2022.06.25
Big O  (0) 2022.06.21
클라우드 컴퓨팅  (0) 2022.06.15
TDD?  (0) 2022.06.10
프로젝트 방법론  (0) 2022.06.10
Comments