서버리스(ServerLess)
서버리스 아키텍처란?
서버리스는 언뜻 단어로만 보면 'Server + Less'로 '서버가 필요 없다'는 뜻으로 생각될 수 있습니다. 하지만 실제 의미는 클라우드 서비스 공급자가 서버를 관리, 실행하며, 요청이나 특정 이벤트가 있을 때 클라우드의 서버를 이용하거나 서비스 할 어플리케이션을 동작시키는 것입니다. 이를 통해 사용자(개발자)는 서버 관리에서 완전히 자유로워지며 실제 구현해야 할 기능에 더 집중할 수 있게 됩니다.
서버리스는 보통 '서버리스 컴퓨팅' 또는 '서버리스 아키텍처'로 불립니다. 서버리스 개념은 어플리케이션 관점에서 BaaS(Backend as a Service)와 FaaS(Function as a Service)로 나누어 살펴보면 이해가 더 용이합니다.
- 서버가 없다고 생가가하지만 서버가 있다.
- 다만 내가 관리하지 않을 뿐
- 클라우드에서 만들어 놓은 서버에 난 함수만 던져넣음
- 애플리케이션이 필요한 경우에만 시작
- 애플리케이션 코드를 트리커->클라우드에서 리소스 할당
Composite Computing Architecture (서비스 지향 아키텍처)
로직 티어 50과 인프라 티어 50는 계층 분리형 서비스 지향 아키텍처를 나타내는데, 이는 서비스를 여러 계층으로 분리하여 개발하고 배포하는 방식을 말합니다. 이에 비해 인프라 결합 SOA 아키텍처는 서버리스 아키텍처로서, 서버 관리 없이 서비스를 제공할 수 있는 형태를 의미합니다.
- 로직티어50: 인프라티어50
- 계층 분리형 SOA 아키텍처
- 인프라 결합 SOA 아키텍처(serverless)
서버리스 아키텍처 충분 조건
완전한 관리형 컴퓨팅: 서버리스는 프로비저닝을 제거하고 제로 관리로서 필요한 리소스를 자동으로 관리합니다. 이는 고가용성을 제공하며, 복잡한 인프라 관리를 줄여줍니다.
개발자 생산성 확보: 문제 중심의 개발 능력과 민첩한 혁신을 지원하여 애플리케이션 개발과 업데이트를 용이하게 합니다.
지속성 확장 능력: 자동화 기반의 용량 확장과 축소를 통해 요구 사항에 신속하게 대응할 수 있습니다.
# 완전한 관리형 컴퓨팅
-프로비저닝 제거
- 제로관리
- 고가용(Fault Tolerant Stateless)
# 개발자 생산성 확보
- 문제 중심의 개발능력
- 민첩한 혁신
- 시장 접근성 강화
# 지속성 확장 능력
- 자동화 기반
- 용량 증가 및 용량 감소
서버리스 아키텍처 필요 조건
최소 산위 기능 기준의 배포와 확장: 작은 기능 단위로 애플리케이션을 구성하고 필요한 경우에만 확장합니다.
프로그래밍 모델에서 인프라의 완벽한 은폐: 개발자는 애플리케이션 코드에 집중하며, 인프라 관리는 자동으로 이루어집니다.
지속적인 스토리지 서비스와 결합: 데이터 저장 및 관리를 위한 스토리지 서비스와 함께 사용됩니다.
오직 서비스 요청 기준에 따라 용량 확장 및 축소: 사용자 요청에 따라 자동으로 리소스를 조정합니다.
IDLE 타임에 대한 비용 제거 (No cold Server): 미사용 시간에도 비용을 절약할 수 있습니다.
실질적 Fault Tolerant. 함수 실행 보장: 안정적인 함수 실행을 보장하여 신뢰성을 높입니다.
BYOC (Bring Your Own Code): 기존 코드를 사용하여 서버리스 환경에 통합할 수 있습니다.
로깅과 측정은 진리: 실행 상황을 모니터링하고 성능 측정을 통해 개선할 수 있습니다.
- 최소 산위 기능 기준의 배포와 확장
- 프로그래밍 모뎅에서 인프라의 완벽한 은폐
- 지속적인 스토리지 서비스와 결합
- 오직 서비스 요청 기준에 따라 용량 확장 및 축소
- IDLE타임에 대한 비용 제거(No cold Server)
- 실질적 Fault Tolerant. 함수 실행 보장
- BYOC : bring your own code
- 로깅과 측정은 진리
서버리스 탄생 배경
데이터센터 서버->DC가상서버->Cloud가상 서버->serverless.
1. 데이터 센터 서버
초기에 조직들이 자체 데이터 센터에서 물리적 서버를 운영하고 관리하며 애플리케이션 실행과 데이터 처리를 수행함. 하드웨어 및 인프라 관리에 시간과 비용이 소요됨.
2. DC 가상 서버 (Virtualization)
가상화 기술 도입으로 하나의 물리적 서버에서 여러 개의 가상 서버 운영 가능. 하드웨어 자원 활용과 관리 용이성 향상. 그러나 여전히 서버 운영과 관리에 리소스가 필요.
3. Cloud 가상 서버 (Cloud Computing)
클라우드 서비스 업체가 가상 서버 제공. 필요한 리소스 유연하게 할당하고 관리 가능. 서버 운영 유연성 증가 및 비용 절감 가능.
4. 서버리스 (Serverless) 컴퓨팅
클라우드 컴퓨팅의 발전으로 개발자는 서버 인프라 관리 없이 함수 단위로 코드 작성하고 실행. 트리거에 의해 함수 실행되며 필요한 리소스 자동 할당. 개발자는 인프라 운영보다 애플리케이션 로직에 집중 가능.
서버리스 장점
- 애플리케이션 개발 시간을 단축합니다. 예를 들어 애플리케이션은 Oauth2와 같은 일부 타사 API에 의존합니다.
- AWS는 필요에 따라 확장성을 제공하므로 확장성 문제를 줄입니다.
- 서버용 인프라 구축 및 유지 관리 측면에서 비용을 절감합니다. 컴퓨팅 파워와 인적 자원 측면에서도 비용을 절감할 수 있습니다. 서버리스 아키텍처는 AWS Lambda 코드가 실행되는 시간 동안만 비용을 지불하면 되므로 운영 비용도 절약됩니다.
서버리스 단점
Cold Start
- IDLE상태에서 로드가 되어 실행될 때까지 시간 지연이 발생
- IaaS와 SaaS 보단 요청시간이 김
- 실시간 서비스에는 부적함
- 규모가 커지거나 속도를 요하는 프로젝트에는 부적합
긴시간을 요하는 작업에 불리한
- 서버리스는 단순 작업(댓글, 이메일)에는 적합
- 시간을 요구한 작업(동영상,데이터)에는 굉장히 비효율적
- 서버리스는 함수가 1회 호출 될 때 사용할 수 있는 메모리 및 시간에 제한
로컬 데이터를 사용할 수 없다.(Stateless)
- 서버리스는 stateless적인 기능으로 구현
- 하나의 작은 기능으로 나뉘어진 함수들은 요청마다 새로 기동되어 호출
- 변수와 데이터의 공유가 불가능, 데이터를 로컬 스토리지에서 읽고 쓸수 없음
클라우드 제공 플랫폼에 심하게 종속적
- 기존 IaaS나 PaaS모델은 플랫폼을 바꾸는게 어렵지 않음
- 서버리스는 애플리케이션의 구조 자체를 변경해야 함
- 사용중인 플랫포의 가격이나 정책,서비스 변경에도 민감하게 반응해야됨을 의미
서버리스 컴퓨팅에서 클라우드 제공 업체의 역할
서버리스 컴퓨팅에서 클라우드 제공 업체는 다양한 역할을 수행합니다.
- 서버리스 컴퓨팅 서비스: 서버리스 컴퓨팅은 backend -as-a-service(BaaS)나 function-as-a-service(FaaS)로 불리는 서비스로 제공됩니다. 이는 개발자가 서버를 직접 관리하지 않아도 되며, 필요한 함수를 호출하여 애플리케이션을 실행할 수 있는 환경을 제공합니다.
- BaaS (Backend-as-a-Service): 데이터베이스, 스토리지, 인증, 푸시 알림 등과 같은 백엔드 기능을 클라우드 제공 업체가 제공하고 관리합니다. 개발자는 이러한 서비스를 활용하여 애플리케이션을 빠르게 개발할 수 있습니다.
- FaaS (Function-as-a-Service): 개발자는 함수 단위로 코드를 작성하고, 해당 함수가 호출될 때에만 실행되며 필요한 리소스가 할당됩니다. 함수는 이벤트 트리거에 의해 활성화되며, 필요한 만큼 확장됩니다.
- 서버리스 환경 관리: 클라우드 제공 업체는 서버리스 환경을 관리하고 최적화하여 사용자에게 높은 가용성, 확장성, 성능을 제공합니다. 이는 서버 프로비저닝, 운영체제 관리, 확장/축소 기능 등을 포함합니다.
- 이벤트 트리거와 오케스트레이션: 서버리스 환경에서는 이벤트 트리거를 통해 함수가 자동으로 실행되므로, 클라우드 제공 업체는 이러한 이벤트와 함수 실행의 오케스트레이션을 관리합니다.
- 보안 및 모니터링: 클라우드 제공 업체는 서버리스 환경의 보안을 유지하고 모니터링하여 애플리케이션의 성능과 안전성을 보장합니다.
서버리스 진화
- 서버리스 1.0: 초기 단계로, 주로 간단한 HTTP 및 기타 소스에 사용되었습니다. 함수 기반으로 동작하며 제한된 실행 시간과 기능을 가집니다.
- 서버리스 1.5 (Knative): 쿠버네티스 기반의 Knative를 활용하여 서버리스 환경을 구축합니다. 마이크로 서비스와 함수를 결합하여 확장성을 강화합니다.
- 서버리스 2.0: 서버리스 컴퓨팅은 계속 진화하며, 더 다양한 기능과 유연성을 제공하며 개발자들의 생산성을 높이는 방향으로 나아가고 있습니다.
서버리스 활용 사례
서버리스 아키텍처는 다양한 분야에서 활용될 수 있습니다.
- 비동기식 및 스테이트리스 애플리케이션: 즉시 시작할 수 있는 애플리케이션에 적합하며, 예측할 수 없는 수요 변화에 유연하게 대응할 수 있습니다.
- 배치 작업 및 자동화: 일괄 처리나 자동화된 작업에 서버리스 아키텍처를 활용하여 작업 효율성을 높일 수 있습니다.
- 분석 및 모니터링: 로그 분석, 모니터링 등 데이터 처리 작업을 서버리스로 처리하면 빠르고 효율적인 결과를 얻을 수 있습니다.
- 챗봇 서비스: 챗봇과 같은 대화형 서비스를 개발하고 배포할 때도 서버리스 아키텍처를 활용할 수 있습니다.
서버리스 아키텍처는 이러한 다양한 활용 사례에서 유용하게 사용될 수 있으며, 개발자와 조직에 효율성과 민첩성을 제공합니다.
'몰입 교육' 카테고리의 다른 글
Cloud Service (0) | 2023.08.04 |
---|---|
MSA(Micro-Service Architecture) 설계 (1) | 2023.07.31 |
네트워크 기초 (0) | 2023.07.28 |
GIt 사용자 지정 및 버전 커밋하기 (0) | 2023.07.26 |
Git(Gitbash) 설치 및 다운로드(window) (0) | 2023.07.25 |