PracticeEveryday
Serverless 본문
서버리스
- 서버리스는 클라우드 컴퓨팅의 모델 중 하나로 사용자가 서버를 직접 관리할 필요가 없는 모델을 의미합니다.
- 여기서 서비를 직접 관리할 필요가 없다는 의미는 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