이 글은 AWS Lambda로 시작하는 서버리스를 참고하여 작성하였습니다.
작성자 : 강다인
1. 서버리스란 무엇인가
백엔드를 제대로 경험해보지 못한 상태임에도 불구하고 서버리스, 서버리스하는 말들은 많이 들어봤다. 그 놈의 서버리스, 대체 뭘까? 일단 추측하기로는 client - server - database 구조에서 위치하는 'Server' 없이 동작하는 방식의 서비스를 의미하는 것으로 생각됐다. 그런데 정말 물리적으로 서버가 '없는'데도 동작할 수 있을까?
당연히 안된다. 서버리스란 물리적인 서버를 직접 구축하는게 아닌! 클라우드 기반의 서비스로 서버의 작업을 처리하는 것이다. 물리적인 서버를 사용하는 것보다 더 경제적이고 유지보수의 어려움도 낮출 수 있다.
서버리스의 이해를 위해서 XaaS도 빠질 수 없는 개념이다. XaaS도 이쪽 공부를 하기 시작하면 유사한 IaaS라던가, FaaS와 같은 단어들을 많이 들어봤을 것이다. 이번에 클라우드 공부를 시작하면서 이 추측하기도 어려운 약어의 원래 의미를 알아냈는데, 바로 Everything as a Service의 약자였다.
지금까지 서비스 제공의 형태가 어떤 식으로 발전해왔는지 잠깐 짚고 넘어가자면 처음 전산실 서버를 설치해서 사용하는 On-premise 형태로 시작해서, 고려할 사항을 줄이고 제한적인 상황을 벗어나기 위해 인프라 요소를 서비스로 제공하는 IaaS(Infrastructure as a Service)로 발전했다. 여기서 PaaS(Platform as a Service)가 등장하여 플랫폼을 제공받기 시작했다. 비용을 PaaS보다 줄이기 위해 FaaS(Function as a Service)가 등장하여 함수 단위로 제공해줌으로써 관리할 서버를 가 사라지게 된다. 이를 서버리스라고 한다.
A. 서버리스의 형태
서버리스의 형태는 BaaS(Backend as a Service)와 FaaS(Function as a Service)로 나뉜다.
BaaS는 백엔드의 일부를 서비스로 제공받는 것이다. Auth0, AWS Cognito, Firebase 등이 여기에 속한다.
FaaS는 함수를 서비스로 이용하는 것으로, 서버코드를 작성하지 않고 원하는 로직만 함수를 기반으로 구현한다. Amazon Lambda가 여기에 속한다.
그럼 서버리스는 기존의 전통적인 On-premise 방식과 어떻게 다를까? 전통적인 3계층 구조는 아래 그림과 같다.
Client - Server - Database - Server - Database - Client로 진행되며, 거의 모든 기능들이 24시간 쌩쌩 돌아가는 서버에서 구현해둔 로직에 따라서 실행된다.
반면 FaaS 기반으로 구조를 변경하게 되면, Client에서 Authenication Service를 호출해 인증을 받고 API Gateway를 호출해서 원하는 함수에 접근한다. 함수는 호출하면 컨테이너에서 실행되며, 호출하지 않을 때는 서버가 구동하지 않는다.
이렇게 되면 FaaS 방식은 서버를 24시간 돌리지 않으므로 사용자가 없어도 비용이 똑같이 나가는 3 계층 구조보다 비용이 덜 청구되게 될 것이다. 그럼 문제가 없느냐? 그건 또 아니다. 위 그림에서 Function이 여러 개가 있는데, 1번은 너무 많이 호출되고 3번은 호출이 없을 수도 있다. 그럼 1번의 동시성을 올리면 되는데, 여기서 이해해야할 개념이 Scale up과 Scale out이다.
B. Scale-Out과 Scale-Up
운용하고 있는 서버에서 이용자가 증가하는 경우 두 가지 방법으로 확장이 가능하다.
스케일 아웃(Scale-Out)이란 서버를 여러 대 추가하여 시스템을 확장하는 방식이다 이렇게 되는 경우에는 병렬 서버들에게 균등하게 부하를 나눠주기 위해 로드 밸런서(Load Balancer)가 필요하다.
스케일 업(Scale-Up)이란 서버가 처리할 수 있는 양을 늘리기 위해 CPU나 RAM과 같은 부품들을 고성능으로 업그레이드 하는 것이다.
FaaS의 경우에는 함수를 작성할 때 병렬 프로그래밍으로 작성하기만 하면 클라우드 제공자가 이에 맞는 오토 스케일링을 해주게 된다.
C. 서버리스 FAQ
Q1. 서버리스를 도입하면 NoOps인가요?
- 관리할 요소가 줄어드는 것이지 없어지는 게 아니다.
Q2. FaaS를 사용하면 서버리스인가요?
- FaaS는 서버리스는 맞지만 서버리스 아키택처와는 별개다. FaaS와 다른 클라우드 서비스를 연결해서 서버관리를 직접하지 않도록 하는 것이 서버리스 아키텍처인데, FaaS를 이용하고 RDBMS와 연결하면 절반...은 서버리스 아키텍처라고 저자는 이야기하고 있다.
Q3. 서버리스는 비싸지 않나요?
- 위에서 충분히 설명했듯이 서버리스로 구축하면 비용이 저렴해진다. 요청 수와 실행 시간에 따라 비용이 발생하기 때문이다.
D. Faas의 단점
우선 FaaS는 상태 유지가 안된다. 컨테이너가 잠시 실행되는 환경이기 때문에 상태값이 유지되거나 저장할 수 없다. 따라서 DB를 사용하는 대체 방안이 존재한다.
또한 함수가 실행되기까지 항상 대가하고 있지 않기 때문에, 실행할 때 지연시간이 발생하는데 이를 콜드 스타트(Cold Start)라고 한다. 한 번 실행한 함수가 있는 컨테이너는 잠시 대기상태가 되는데, 이때 다시 함수를 실행할 때는 웜 스타트(Warm Start)라고 부르며 지연시간이 발생하지 않는다.
또한 각 서비스 제공사가 제공하는 것이 상당히 다르기 때문에 환경을 변경하는 것이 어렵고 의존적이라는 단점이 있다.
'GDSC HUFS 3기 > Cloud Computing' 카테고리의 다른 글
[AWS] AWS 네트워크 (0) | 2022.05.12 |
---|---|
[AWS] AWS Lambda/cold start/warm start/lambda 런타임/lambda event/메모리 할당/실행 제한 시간 (0) | 2022.05.12 |
[AWS] Amazon VPC/서브넷/인터넷 게이트웨이/네트워크 ACL/보안 그룹/피어링 (0) | 2022.05.12 |
[AWS] ch01 서버리스 | ch02 AWS란 | ch03 권한관리 (0) | 2022.05.06 |
[AWS] 서버리스란 무엇인가 (0) | 2022.05.05 |