서버리스란?

URL 복사

서버리스(serverless)란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델입니다. '서버리스'란 용어가 서버가 없다는 뜻이 아닙니다. 애플리케이션 개발 시 서버가 추상화된다는 것을 의미합니다. 클라우드 공급업체는 서버 인프라에 대한 프로비저닝, 유지 관리, 스케일링 등의 일상적인 작업을 처리합니다. 

서버리스를 이용하면 개발자는 배포를 위해 코드를 컨테이너에 패키징합니다. 서버리스 애플리케이션은 배포되고 나면 수요에 대응하여 필요에 따라 자동으로 스케일 업되거나 스케일 다운됩니다. 퍼블릭 클라우드 공급업체의 서버리스 오퍼링은 일반적으로 이벤트 기반 실행 모델을 통해 온디맨드로 미터링됩니다. 그러므로 서버리스 기능이 유휴 상태일 때는 아무런 비용도 들지 않습니다.

Red Hat OpenShift Serverless 살펴보기

서버리스 컴퓨팅과 서버리스 아키텍처는 구분 없이 사용될 때가 많지만 서로 다른 개념입니다. 서버리스 컴퓨팅은 애플리케이션 개발 모델을 가리키지만 서버리스 아키텍처는 애플리케이션의 설계 방식을 말합니다. 

서버리스 컴퓨팅 

서버리스 컴퓨팅은 클라우드 공급업체가 클라우드 인프라와 애플리케이션의 스케일링을 모두 관리한다는 점에서 다른 클라우드 컴퓨팅 모델과 다릅니다. 이렇게 클라우드 공급업체가 서버를 프로비저닝 및 유지 관리하고, 애플리케이션은 클라우드 공급업체가 제공하여 자동으로 관리되는 컴퓨팅 리소스에서 실행됩니다. 서버리스 컴퓨팅은 이벤트 기반으로, 자동으로 스케일링되고 일반적으로 종량제 가격 모델을 따릅니다. 서버리스 애플리케이션은 호출 시 온디맨드로 자동 시작되는 컨테이너에 배포됩니다. 

표준 서비스로서의 인프라(IaaS) 클라우드 컴퓨팅 모델에서 사용자는 용량 단위를 사전 구매하게 됩니다. 즉, 애플리케이션을 실행하기 위해 퍼블릭 클라우드 공급업체에 상시 가동하는 서버 구성 요소에 대한 비용을 지불해야 합니다. 수요가 많을 때 서버 용량을 스케일 업하고 더 이상 그만큼의 용량이 필요하지 않을 때 스케일 다운하는 것 역시 사용자의 책임입니다. 애플리케이션을 구동하기 위해 필요한 클라우드 인프라는 애플리케이션이 사용되지 않을 때에도 활성화된 상태입니다.

서버리스 컴퓨팅의 유형

서버리스 컴퓨팅은 다음과 같은 몇 가지 범주 중 하나에 속할 것입니다.

  • 서비스로서의 기능(FaaS): FaaS는 단기 컨테이너에서 이벤트 기반 기능을 실행합니다. 서버 인스턴스를 관리할 필요가 없으며, 트리거될 때만 실행합니다.
  • 서비스로서의 백엔드(BaaS): BaaS는 인증, 데이터베이스, 메시징, 스토리지를 다루는 전체 관리형 백엔드 서비스를 제공합니다. 모바일 애플리케이션과 웹 애플리케이션에 자주 사용됩니다.
  • 서버리스 데이터베이스: 서버리스 데이터베이스는 자동으로 스케일링되며 인프라 관리가 필요 없습니다.
  • 서버리스 컨테이너: 서버리스 컨테이너는 수동 프로비저닝 없이 실행되고 동적으로 스케일링됩니다.
  • 서버리스 엣지 컴퓨팅: 서버리스 엣지 컴퓨팅은 코드를 사용자와 더 가깝게 실행하여 대기 시간을 줄입니다.

서버리스 아키텍처

서버리스 아키텍처는 애플리케이션이 필요 시에만 시작되는 설계 방식을 말합니다. 이벤트가 구동을 위한 애플리케이션 코드를 트리거하면 퍼블릭 클라우드 공급업체가 해당 코드에 대한 리소스를 할당합니다. 코드 실행이 종료되면 비용도 청구되지 않습니다. 또한 서버리스를 활용하면 개발자가 애플리케이션 스케일링 및 서버 프로비저닝과 관련된 태스크에서 벗어날 수 있습니다. 운영 체제 및 파일 시스템 관리보안 패치, 부하 분산, 용량 관리와 같은 일상적인 태스크를 모두 클라우드 서비스 공급업체에 이관하면 됩니다. 완전한 서버리스 애플리케이션이나 서버리스와 전통적인 마이크로서비스 구성 요소 모두로 이루어진 애플리케이션을 빌드할 수 있습니다.

마이크로서비스 구성 요소를 사용하는 서버리스 아키텍처를 서버리스 마이크로서비스라고 합니다. 서버리스 마이크로서비스가 적용된 서버리스 아키텍처를 사용하면 개발자가 코드를 작성할 수 있고 마이크로서비스가 애플리케이션을 소규모의 관리 가능한 구성 요소로 세분화합니다. 이러한 결합의 결과, 개발과 배포 속도가 가속화될 수 있습니다. 

Red Hat 리소스

장점

  • 서버 관리 태스크의 부담 완화: 서버를 프로비저닝, 유지 관리 또는 확장할 필요가 없으므로 개발자가 애플리케이션에 더 많은 시간을 할애할 수 있습니다.
  • 비용 효율성: 종량제를 통해 기능을 실제 실행한 시간에 대해서만 비용을 지불하면 되므로 유휴 리소스에 대한 비용을 절감할 수 있습니다.
  • 개발 및 배포 시간 단축: 인프라 관리의 필요성이 줄고 배포에 대한 설정이 최소화되므로 개발자 생산성이 증대됩니다.
  • 자동 스케일링(Automatic scaling): 수요에 따라 기능과 서비스의 스케일이 자동으로 확장되거나 축소됩니다.
  • 기본 제공 보안 기능: 보안 업데이트와 패치를 공급업체에서 관리하므로 서버 구성 오류로 인한 위험이 감소합니다.

단점

  • 아키텍처의 복잡성: 여러 기능들이 비동기식으로 상호작용하므로 이벤트 기반 워크플로우가 복잡해질 수 있습니다.
  • 상호작용 제약: 클라우드 공급업체가 자사 구성 요소의 사용 방식을 제한할 수 있으므로 유연성이 감소할 수 있습니다.
  • 벤더 종속성: 클라우드 공급업체 에코시스템과 긴밀하게 통합된 서버리스 서비스는 마이그레이션에 방해 요소가 될 수 있습니다.

서버리스 활용 사례로는 어떤 것이 있나요?

서버리스 아키텍처는 즉시 시작할 수 있는 비동기식, 스테이트리스 애플리케이션에 이상적입니다. 드물고 예측할 수 없는 수요 급증이 발생하는 활용 사례에 적합합니다.

수신되는 이미지 파일을 일괄 처리하는 태스크를 예로 들 수 있습니다. 드물지만 한꺼번에 대량의 이미지가 도착하는 경우를 대비해야 하기 때문입니다. 또는 데이터베이스에 수신되는 변경 사항을 모니터링하여 품질 표준에 반하는 변경 사항을 확인하거나, 자동으로 변환하는 등 일련의 기능을 적용하는 태스크도 마찬가지입니다.

서버리스 애플리케이션은 수신 데이터 스트림, 챗봇, 예정된 태스크, 비즈니스 로직과 관련된 활용 사례에도 이상적입니다.

일반적인 기타 서버리스 활용 사례로는 백엔드 애플리케이션 프로그래밍 인터페이스(API), 웹 애플리케이션, 비즈니스 프로세스 자동화, 서버리스 웹사이트, 여러 시스템 간 통합 등이 있습니다.

서버리스 모델에서 클라우드 공급업체는 물리 서버를 실행하고, 코드를 곧바로 프로덕션 환경으로 배포할 수 있는 사용자를 대신해 자사 리소스를 할당합니다.

FaaS는 이벤트 기반 기능에 초점을 맞춘 더 일반적인 서버리스 모델로, 개발자가 클라우드 서비스 공급업체에서 전체적으로 관리하는 컨테이너에 배포된 사용자 정의 서버 측 로직을 작성할 수 있습니다. 해당 컨테이너의 특징은 다음과 같습니다. 

  • 스테이트리스(stateless)데이터 통합이 더욱 간소화됨
  • 일회성: 매우 단기간에 실행 가능
  • 이벤트에서 트리거: 필요에 따라 자동으로 실행 가능
  • 전체 관리형: 사용한 만큼만 비용을 지불

FaaS를 사용할 경우 개발자는 더 많은 제어권을 갖고, API 게이트웨이를 통해 클라우드 공급업체에서 관리하는 API를 사용하여 함수를 호출할 수 있습니다.

주요 클라우드 공급업체는 AWS Lambda, Azure Functions, Google Cloud, IBM Cloud Functions와 같은 FaaS 솔루션을 제공합니다. 일부 기업에서는 Red Hat® OpenShift® Serverless(Knative 기반)와 같은 오픈소스 플랫폼을 사용하여 자체 FaaS 환경을 운영합니다.

FaaS의 비교 대상으로는 BaaS가 있습니다. BaaS는 FaaS와 같은 백엔드 서비스로, 개발자가 주로 API를 통해 인증, 암호화, 데이터베이스와 같은 타사 서비스에 액세스할 수 있습니다. BaaS를 사용하면 백엔드 태스크를 간소화할 수 있지만 사용자 정의 애플리케이션 로직에 대한 제어권이 적습니다.

FaaS에 대해 자세히 알아보기

쿠버네티스는 컨테이너화된 애플리케이션을 관리하기 위해 널리 사용되고 있는 플랫폼이지만 서버리스 워크로드를 기본적으로 지원하지는 않습니다. Knative는 쿠버네티스에서 서버리스 애플리케이션을 배포, 실행, 관리하기 위해 필요한 구성 요소를 추가하는 오픈소스 프로젝트입니다.

Knative

를 활용하면 Red Hat OpenShift와 같은 쿠버네티스 플랫폼에 코드를 배포할 수 있어 서버리스 환경을 구현할 수 있습니다. 코드를 컨테이너 이미지로 패키징할 수 있고, 시스템이 수요에 따라 인스턴스를 자동으로 시작하고 중단합니다.

Knative의 3가지 주요 구성 요소는 다음과 같습니다.

전통적인 서버리스 솔루션과 달리 Knative는 모놀리식 애플리케이션에서 마이크로서비스와 소규모 기능에 이르기까지 다양한 워크로드를 지원합니다. Knative는 온프레미스 환경을 비롯한 모든 쿠버네티스 지원 플랫폼에서 실행될 수 있습니다.

Knative의 주요 이점은 다음과 같습니다.

  • 마이크로서비스 및 서버리스 워크로드 지원: 쿠버네티스 내에 이벤트 기반의 스테이트리스 기능을 배포할 수 있습니다. 또한 동적으로 스케일링하는 장기 실행 마이크로서비스를 배포할 수 있으므로 서버 인스턴스를 수동으로 유지 관리할 필요가 없습니다.
  • 비용 및 리소스 사용 최적화: 포드가 상시 실행될 수 있는 기존의 마이크로서비스와 달리 Knative는 제로 스케일링을 지원하므로 요청이 없을 경우 리소스 할당을 해제하여 비용 절약에 도움이 됩니다.
  • API 표준화 및 유연성: Knative는 쿠버네티스 네이티브 패턴을 따르며 다양한 클라우드 공급업체에서 작동할 수 있습니다.

Knative는 쿠버네티스에 서버리스 컴퓨팅 기능을 제공하여 서버리스 워크로드의 배포 및 관리를 간소화합니다.

Knative를 통한 서버리스 아키텍처 구축

Red Hat OpenShift Serverless를 사용하면 인프라 세부 사항을 관리하는 부담 없이 서버리스 애플리케이션을 더욱 빠르게 빌드하고 배포할 수 있습니다. 또한 하이브리드 및 멀티 클라우드 환경 전반에 이식성과 일관성을 제공하는 엔터프라이즈급 서버리스 플랫폼을 이용할 수 있습니다. 

OpenShift Serverless는 개발자가 쿠버네티스에서 일련의 사용자 정의 리소스 정의(CRD)와 관련 컨트롤러를 사용하여 소스 중심의 클라우드 네이티브 애플리케이션을 개발하도록 지원합니다. 그리고 OpenShift Serverless는 다른 Red Hat 제품을 통해 검증을 마쳤고 권위 있는 어워드를 수상한 지원을 받을 수 있으며 Red Hat OpenShift에 손쉽게 설치할 수 있으므로 운영 팀에게 간소화된 사용 경험을 제공합니다. 

OpenShift Serverless는 애플리케이션을 Red Hat OpenShift Service Mesh, 클러스터 모니터링과 같은 다른 Red Hat OpenShift Container Platform 서비스와 통합함으로써 완전한 서버리스 애플리케이션 개발 및 배포 솔루션을 제공합니다. 개발자는 마이크로서비스, 레거시 및 서버리스 애플리케이션을 호스팅하기 위한 단일 플랫폼 사용의 이점을 누릴 수 있습니다. 애플리케이션은 어디서나 실행 가능한 Linux® 컨테이너로 패키징됩니다. 

OpenShift Serverless 기능 생성

허브

레드햇 공식 블로그

레드햇 공식 블로그에서 고객, 파트너, 커뮤니티 에코시스템 등 현재 화제가 되는 최신 정보를 살펴 보세요.

모든 Red Hat 제품 체험판

무료 제품 체험판을 통해 핸즈온 경험을 얻고, 자격증 시험에 대비하거나 해당 제품이 조직에 적합한지 평가할 수 있습니다.

추가 자료

애플리케이션 마이그레이션이란?

애플리케이션 마이그레이션은 애플리케이션을 환경 간에 이동하여 워크로드를 개선할 수 있는 프로세스입니다.

자바 프레임워크(Java Framework)란? 종류, 라이브러리, 차이점

자바 프레임워크란 개발자가 Java 프로그래밍 언어로 애플리케이션 작성을 위해 미리 작성된 코드를 뜻하며, 프레임워크 종류에 따라 사전 정의 클래스가 달라집니다.

애플리케이션 아키텍처(Application architecture)란?

애플리케이션 아키텍처란 소프트웨어 애플리케이션 디자인과 구조를 정의하는 프로세스를 뜻하며, 애플리케이션 구성 요소, 시스템 레이어 및 모듈 등을 정의합니다.

애플리케이션 개발과 제공 리소스

관련 기사