서버리스의 의미는 무엇인가요?
서버리스란, 개발자가 서버를 관리할 필요 없게 해주는 서비스를 말한다. 서버가 없다는 뜻이 아니다. 어플리이션을 빌드하고, 실행, 각종 데이터 관리, 코드 실행 기술 등 개발 환경에서 서버를 관리 할 필요 없게 해주겠다는 클라우드 네이티브 개발 모델을 의미한다. 리액트 네이티브가 리액트를 기반으로 하는 어플리케이션을 의미하는 것 처럼, 클라우드 네이티브 개발 모델 역시 클라우드를 기반한 개발 모델이라는 뜻.
IaaS처럼 사용자가 트래픽에 따라 직접 서버를 증/감 할 필요가 없는 기술 서비스.
서버는 기본적으로 하드웨어적 부분과 소프트웨어적 부분으로 이뤄져있는데, 클라우드 컴퓨팅 서비스란 벤더 업체들이 하드웨어적인 관리를 담당하고 그로써 활용 할 수 있는 소프트웨어적 부분들을 사용자에게 제공하는 것을 말한다. 그래서 IaaS, PaaS는 사용자의 사용량에 따라 결제를 하는 것이 과금방식이다.
그렇다면 나는 1인 개발자이고, 사이드 프로젝트 정도를 빠르게 시장에 내놓아 반응을 확인하고 싶은 정도라면?
필연적으로 낭비가 발생하게 된다. 이럴땐, 서버 자원을 동적으로 할당받는 것이 훨씬 경제적일 것이다.
마이크로서비스와 서버리스는 어떤 관계가 있나요?
그렇기때문에 마이크로서비스는 다른 서버 리소스 제품들에 비해 서버리스 제품군이 훨신 유용해지는 것이다.
서버로 리퀘스트가 들어오면 해당 요청을 처리하는 순간만 과금에 들어가고 리퀘스트가 없다면 대기상태로 과금대상이 아니다. 기본적으로 서버리스는 FaaS & BaaS로 나뉘는데 각각의 의미가 function as a service , backend as a service 인 것에서 마이크로 서비스의 정의와 이어지는 것을 볼 수 있다.
마이크로서비스는 소프트웨어의 구축에서 상호 독립적인 최소한의 구성요소로 분리해 구축함을 의미한다. 이때 최소 구성요소를 api로 본다면? 클라이언트가 서버로 리퀘스트를 보내는 것을 처리하는 것이 api다. 이 api는 함수로 구성되어있고, 즉 function as a service가 이루어 지는 것이 함수를 호출 한 횟수 당 과금을 하는 요소이기 때문에 마이크로 서비스를 구축함에 FaaS 서버리스가 호응이 좋은 방식이 되는 것이다.
BaaS는 쉽게 말해 백엔드의 api를 이미 제공받는 것을 말한다. 블록체인 api를 제공하는 infura, firebase, SNS제휴, 위치기반 정보제공 등 개발을 할 때 한번쯤 아 이걸 구현은 못하지만 남의거 갖다쓰면 되지-라고 생각했던 서버와 연결된 기술들이 대충 여기 속한다. 즉 개발자가 제공하고자 하는 모든 기능을 개발하지 않아도 됨을 의미하고, 보다 쉽고 빠르게 구축-배포-테스트-업데이트를 진행 할 수 있다. 그래서 확장성이 유연하고 빠른 변동이 가능한 서버리스 기술에서 그 가치를 더욱 드러낼 수 있다.
//서버리스는 마이크로서비스의 어떠한 특징들을 반영하고 있나요?
//AWS가 제공하는 서버리스 서비스들엔 어떤 것들이 있나요?
//마이크로서비스는 꼭 서버리스로 구현되어야 하나요?
서버리스의 특징 중 하나인 무상태성(Stateless)는 무엇을 의미하나요?
서버리스 기능은 특유의 유연성이라는 특징을 극대화 하기 위해 유지 상태가 짧고, 상태 저장을 하지 않는다.
FaaS, BaaS 모두 기본적으로 들어온 리퀘스트에 대한 요청만 한다-가 주요 컨셉이기때문에 함수를 구동하는데는 상태성을 띄지 않는다. 전의 상태를 저장하지 않도록 하는 것이 독립적인 구조를 지닌다는 뜻이기 때문이다.
컨테이너 내부에서 미리 작성된 트리거에의해 함수를 실행하는데 이러한 독립적 개발환경(컨테이너)들은 이전 상태를 요구하는 함수를 실행시킬 수 없다.
서버리스 컴퓨팅의 장단점은 무엇인가요?
장점
- 낮은 비용 - 기존 클라우드 제공 업체의 백엔드 서비스(서버 할당)는 사용자에게 사용하지 않은 공간이나 CPU 대기 시간에 대해 비용을 종종 청구하기 때문에 서버리스 컴퓨팅은 일반적으로 매우 비용 효과적입니다. 또한 서버리스 컴퓨팅은 개발자 생산성을 높이고 운영 비용을 줄일 수 있습니다. 서버 프로비저닝 및 관리와 같은 일상 업무의 부담을 줄여, 개발자가 애플리케이션에 더 많은 시간을 할애할 수 있습니다.
- 간편한 확장성 - 서버리스 아키텍처를 사용하는 개발자는 코드 확장을 위한 정책을 걱정하지 않아도 됩니다. 서버리스 업체가 요청에 따라 확장을 모두 처리합니다.
- 간단한 백엔드 코드 - 개발자는 FaaS를 사용하여 API 호출 같은 단일 목적을 독립적으로 실행하는 간단한 기능을 만들 수 있습니다.
- 시간 단축 - 서버리스 아키텍처는 시장 진출 시간을 크게 줄일 수 있습니다. 복잡한 배포 프로세스를 이용하여 버그 수정과 새로운 기능을 배포하는 대신 개발자는 필요에 따라 코드를 추가하고 수정할 수 있습니다.
- 서버리스는 개발자가 프로비저닝하기 위한 작업에 필요한 인프라를 명시적으로 설명할 필요를 줄여줌으로써 DevOps 도입을 지원합니다.
단점
- 자체 서버를 실행하지 않거나 자체 서버측 로직을 제어하지 않는 데 따른 단점이 있습니다.
- 서버리스 아키텍처는 대부분의 기업이 이전에 경험했던 어떤 환경과도 매우 다르므로 보호와 관련하여서도 다르게 접근해야 합니다.
- 클라우드 제공업체는 자사 구성 요소가 상호작용하는 방법을 엄격히 제한할 수 있어, 사용자 시스템의 유연성과 커스터마이징 수준에 영향을 주게 됩니다. BaaS 환경의 경우 개발자는 코드 제어 권한이 없는 서비스에 의존해야 할 수 있습니다.
- IT 스택의 이러한 측면에 대한 제어 권한을 이전하면 벤더 종속성 문제도 발생할 수 있습니다. 제공업체를 변경하면 새로운 벤더 사양에 맞추기 위해 시스템을 업그레이드하는 비용이 발생할 수도 있습니다.
*** 참고 문헌 ***
https://www.redhat.com/ko/topics/cloud-native-apps/what-is-serverless
https://aws.amazon.com/ko/serverless/
https://www.redhat.com/ko/topics/microservices
https://ettrends.etri.re.kr/ettrends/154/0905002069/0905002069.html
https://serverless-architecture.io/serverless-development/serverless-stateless/
https://medium.com/@luke_8635/why-serverless-doesnt-always-mean-stateless-7dda787f58ca
'Infra & DevOps > AWS' 카테고리의 다른 글
[AWS][EC2] 초기설정 명령어 (0) | 2022.05.15 |
---|---|
[AWS][lambda] s3 버킷sqs 알람 이벤트 설정 (0) | 2022.04.14 |
[ECS] 배포 시 자주 발생하는 실수 (0) | 2022.04.04 |
[AWS][ECS]task definition-service 메모 (0) | 2022.04.02 |
[AWS][ECS][메모]배포 자동화 과정 (0) | 2022.04.02 |