서버리스란?
서버리스는 개발자가 서버를 관리하거나 유휴 클라우드 인프라 비용을 지불하지 않고도 코드를 설계하고 실행할 수 있는 클라우드 애플리케이션 개발 및 실행 모델입니다.
검은색과 파란색의 추상 이미지
서버리스란?

서버리스는 개발자가 서버 또는 백엔드 인프라를 프로비저닝하거나 관리하지 않고도 애플리케이션을 설계하고 실행할 수 있는 클라우드 컴퓨팅 애플리케이션 개발 및 실행 모델입니다.

서버리스 모델을 통해 개발자는 최고의 프론트엔드 애플리케이션과 비즈니스 논리를 작성하는 데 모든 노력을 기울일 수 있습니다. 개발자는 애플리케이션 코드를 작성하여 클라우드 서비스 제공자가 관리하는 컨테이너에 이를 배포하기만 하면 됩니다. 그러면 클라우드 제공자는 코드 실행에 필요한 클라우드 인프라 프로비저닝 및 필요한 경우 인프라 스케일링과 같은 나머지 작업을 수행합니다. 또한 클라우드 제공자는 운영 체제 업데이트 및 패치 적용, 보안 관리, 용량 계획, 시스템 모니터링 등 모든 일상적인 인프라 관리 및 유지보수 작업을 담당합니다.

중요: 서버리스 모델을 사용하면 개발자는 유휴 용량에 대한 비용을 지불하지 않습니다. 클라우드 제공자는 코드를 실행할 때 필요에 따라 필요한 컴퓨팅 리소스를 스핀업 및 프로비저닝하고, 실행이 멈추면 컴퓨팅 리소스를 다시 스핀다운("0으로 스케일링"이라고 함)합니다. 비용 청구는 실행을 시작하면 시작되고 실행을 멈추면 종료됩니다. 일반적으로 실행 시간 및 요구되는 리소스를 바탕으로 가격이 책정됩니다.

서버리스는 "서버 없음"을 의미하지 않음

그 이름에도 불구하고 서버리스 컴퓨팅에는 대부분의 경우 확실하게 서버가 있습니다. '서버리스'는 개발자가 서버를 경험하는 방식을 묘사한 것입니다. 즉, 개발자들이 어떤 방식으로든 서버를 보거나 인식하거나 관리하거나 상호작용하지 않습니다.

현재 업계를 선도하는 모든 클라우드 서비스 제공자는 서버리스 플랫폼을 제공합니다. 예를 들면, Amazon Web Services(AWS Lambda), Microsoft Azure(Azure Functions), Google Cloud(Google Cloud Functions) 및 IBM Cloud(IBM Cloud Code Engine)가 있습니다. 서버리스 컴퓨팅, 마이크로서비스 및 컨테이너는 일반적으로 클라우드 네이티브 애플리케이션 개발의 핵심으로 간주되는 기술의 삼두정치를 형성합니다.

서버는 단순히 FaaS가 아님

FaaS(Function-as-a-Service)는 개발자가 코드를 실행하는 데 필요한 인프라를 지정하거나 관리하지 않고 특정 이벤트 또는 요청에 대해 코드 또는 컨테이너를 실행하도록 지원하는 클라우드 컴퓨팅 서비스입니다.

FaaS는 서버리스의 핵심 컴퓨팅 모델이므로 두 용어는 종종 같은 의미로 사용됩니다. 그러나 서버리스가 FaaS보다 훨씬 더 넓은 의미입니다. 서버리스는 특정 이벤트 또는 요청에 대응할 수 있는 서비스의 전체 스택이며, 더 이상 사용하지 않을 때 0으로 축소되고, 클라우드 제공자가 프로비저닝, 관리, 비용 청구를 담당하며, 개발자에게는 보이지 않습니다. FaaS 외에도 이러한 서비스에는 다음 사항이 포함됩니다.

  • 서버리스 데이터베이스 및 스토리지: 데이터베이스(SQL 및 NoSQL) 및 스토리지(특히 오브젝트 스토리지)는 데이터 레이어의 토대입니다. 이러한 기술에 서버리스 접근법을 적용하려면 정의된 용량, 연결 및 쿼리 측면의 제약이 있는 상황에서 "인스턴스"를 프로비저닝하는 모델에서 전환하여 인프라 및 가격에 대한 요구 사항과 함께 선형적으로 확장하는 모델로 이동해야 합니다.

  • 이벤트 스트리밍 및 메시징: 서버리스 아키텍처는 이벤트 기반 스트림 처리 워크로드에 매우 적합합니다. 이러한 워크로드 중 가장 주목할 만한 것은 Apache Kafka 이벤트 스트리밍 플랫폼입니다.

  • API 게이트웨이: API 게이트웨이는 웹 작업에 대한 프록시 역할을 수행하며, HTTP 메소드 라우팅, 클라이언트 ID 및 시크릿, 요금 한도, CORS, API 사용량 보기, 응답 로그 보기 및  API 공유 정책을 제공합니다.

IBM의 Ashher Syed 씨가 서버리스 및 서버리스 스택에 대해 자세히 설명합니다(6:37).

서버리스 및 PaaS, 컨테이너, VM 비교

서버리스, PaaS(platform as a service), 컨테이너 및 가상 머신(VM) 모두 클라우드 애플리케이션 개발과 컴퓨팅 생태계에서 중요한 역할을 수행하므로 몇 가지 속성을 기준으로 서버리스와 다른 구성 요소를 비교해 보면 유용할 것입니다.

  • 프로비저닝 시간: 서버리스의 경우 밀리초 단위로 측정되지만, 다른 모델에서는 분 단위 또는 시간 단위로 측정됩니다.

     

  • 관리 부담: PaaS, 컨테이너, VM의 경우 각각 관리 부담이 경량에서 중간 그리고 중량에 이르지만 서버리스는 0입니다.

     

  • 유지보수: 서버리스 아키텍처는 제공자가 100% 관리합니다. PaaS 역시 마찬가지이지만, 컨테이너와 VM은 운영 체제, 컨테이너 이미지, 연결 등의 업데이트/관리를 포함하여 상당한 유지보수가 필요합니다.

     

  • 확장/축소: 서버리스의 경우 0으로 자동 축소를 포함하여 오토스케일링 기능이 내재되어 있으며 즉시 작동합니다. 다른 모델의 경우, 오토스케일링 규칙에 따라 주의 깊게 튜닝해야 하는 자동 스케일링이 가능하지만 속도가 느리며 0으로 스케일링은 불가능합니다.

     

  • 용량 계획: 서버리스에는 용량 계획이 필요하지 않습니다. 다른 모델은 일부 자동 확장과 용량 계획을 혼합해야 합니다.

     

  • Statelessness: 서버리스에는 Statelessness가 내재적으로 존재하므로 확장 문제가 없습니다. 외부 서비스 또는 리소스에서 상태가 유지됩니다. PaaS, 컨테이너, VM은 HTTP를 활용하고, 오랜 시간 동안 열린 소켓 또는 연결을 유지하며, 통화 간 메모리에 상태를 저장할 수 있습니다.

     

  • 고가용성(HA) 및 재해 복구(DR): 추가적인 노력이나 비용 없이 이 두 가지 모두 서버리스에서 내재적으로 구현됩니다. 다른 모델은 추가 비용과 관리 노력이 필요합니다. VM과 컨테이너의 경우, 인프라를 자동으로 다시 시작할 수 있습니다.

  • 리소스 활용도: 서버리스 모델에는 유휴 용량이 없으므로 100% 효율성이 구현됩니다. 용량은 요청에 따라서만 호출됩니다. 다른 모든 모델에는 어느 정도의 유휴 용량이 발생합니다.

     

  • 비용 청구 세분화 및 비용 절감: 서버리스는 100밀리초 단위로 측정됩니다. PaaS, 컨테이너 및 VM은 일반적으로 시간 또는 분 단위로 측정됩니다.

서버리스, Kubernetes 및 Knative

Kubernetes는 컨테이너의 배포, 관리, 확장을 자동화하는 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. Kubernetes의 자동화는 컨테이너 기반 애플리케이션의 개발을 대폭 간소화합니다.

서버리스 애플리케이션은 컨테이너에 배포되는 경우가 많습니다. 그러나 Kubernetes는 그 자체로 서버리스 앱을 실행할 수 없기 때문에, Kubernetes를 특정 클라우드 제공자의 서버리스 플랫폼과 통합하는 전문화된 소프트웨어가 필요합니다.

Knative는 Kubernetes를 위한 서버리스 프레임워크를 제공합니다. Knative는 컨테이너가 Kubernetes를 실행하는 클라우드 플랫폼에서 서버리스 워크로드로 실행되도록 지원하는 Kubernetes의 오픈 소스 확장 기능입니다. 컨테이너가 서버리스 기능 또는 다른 애플리케이션 코드(예: 마이크로서비스)를 기반으로 구축되었는지 여부는 상관없습니다. Knative는 코드를 추상화하고, 서버리스 실행을 위해 네트워크 라우팅, 이벤트 트리거 및 오토스케일링을 처리합니다.

Knative는 개발자에게 투명합니다. 개발자는 Kubernetes를 사용하여 평상시처럼 컨테이너를 구축하기만 하면 됩니다. 그러면 Knative가 컨테이너를 서버리스 워크로드로 실행하면서 나머지 작업을 수행합니다.

Knative 자세히 보기

서버리스의 장단점

장점

위의 정보를 모두 고려할 때 서버리스 컴퓨팅이 개별 개발자와 엔터프라이즈 개발 팀에 기술적 측면과 비즈니스 측면에서 많은 장점을 제공한다는 사실은 놀라운 일이 아닙니다.

개발자 생산성 향상: 위에서 언급했듯이, 서버리스를 사용하면 개발 팀이 인프라 관리가 아닌 코드 작성에 집중할 수 있습니다. 이를 통해 개발자는 프론트엔드 애플리케이션 기능과 비즈니스 논리를 혁신하고 최적화하기 위한 시간을 훨씬 더 많이 확보할 수 있습니다.

실행 비용만 지불: 요청이 발생한 경우에 미터가 작동을 시작하고 실행이 종료되면 멈춥니다. 이러한 지불 방식을 IaaS(infrastructure as a service)와 비교해 보십시오. IaaS의 경우 고객은 리소스를 프로비저닝한 시점부터 명시적으로 사용을 중단한 시점까지 물리적 서버, 가상 머신(VM) 및 애플리케이션 실행에 필요한 기타 리소스에 대한 비용을 지불합니다.

어느 언어로든 개발 가능: 서버리스는 개발자가 Java, Python, JavaScript, node.js 등 익숙한 언어 또는 프레임워크로 코딩하도록 지원하는 다언어 환경입니다.

간소화된 개발/DevOps 주기. 서버리스의 경우 개발자가 코드 빌드를 프로덕션으로 통합, 테스트, 제공 및 배포하는 데 필요한 인프라를 정의하느라 시간을 쓰지 않기 때문에 배포가 간소화되고, 더 넓은 관점에서는 DevOps가 간소화됩니다.

비용 효율적 성능. 당황스러울 정도로 병렬화된 처리, 스트림 처리, 특정 데이터 처리 작업과 같은 특정 워크로드의 경우에는 서버리스 컴퓨팅이 다른 형태의 컴퓨팅보다 더 빠르고 비용 효율적일 수 있습니다.

사용에 대한 가시성. 서버리스 플랫폼은 시스템 및 사용자 시간에 대해 거의 실시간 가시성을 제공하며, 사용 정보를 체계적으로 집계할 수 있습니다.

개발 전문가와 IT 전문가는 서버리스 컴퓨팅의 다른 구체적인 장점에 대해서도 언급합니다. 아래 대화식 툴(PDF, 1.8MB)을 사용하여 자세히 알아볼 수 있습니다.

 

서버리스 적용사례

고유한 방식으로 속성과 장점이 조합되었다는 점을 고려할 때 서버리스 아키텍처는 마이크로서비스, 모바일 백엔드, 데이터 및 이벤트 스트림 처리와 관련된 적용사례에 매우 적합합니다.

서버리스 및 마이크로서비스

현재 가장 흔한 서버리스 적용사례는 마이크로서비스 아키텍처를 지원하는 것입니다. 마이크로서비스 모델은 단일 작업을 수행하고 API를 사용하여 서로 통신하는 소규모 서비스를 만드는 데 중점을 둡니다. 또한 마이크로서비스는 PaaS 또는 컨테이너를 사용하여 구축하고 작동할 수 있지만, 서버리스는 작은 코드 조각과 관련된 속성, 내재적 오토스케일링, 빠른 프로비저닝 및 유휴 용량에 대한 요금을 부과하지 않는 가격 모델 덕분에 상당한 추진력을 얻었습니다.

API 백엔드

서버리스 플랫폼의 작업(또는 기능)을 웹 클라이언트가 즉시 이용할 수 있는 HTTP 엔드포인트로 전환할 수 있습니다. 웹을 위해 활성화된 경우 이러한 작업을 웹 작업(web action)이라고 합니다. 웹 작업이 있으면, 이를 API 게이트웨이를 통해 완전한 기능을 갖춘 API로 어셈블하여 보안을 추가적으로 강화하고, OAuth 지원, 속도 제한 및 맞춤형 도메인 지원을 제공할 수 있습니다.

API 백엔드에 대한 실제 경험을 원하는 경우 “서버리스 웹 애플리케이션 및 API” 튜토리얼을 확인해 보세요.

데이터 처리

서버리스는 정형화된 텍스트, 오디오, 이미지, 비디오 데이터로 데이터 보강, 변환, 검증, 정제, PDF 처리, 오디오 정규화, 이미지 처리(회전, 샤프닝, 노이즈 감축, 썸네일 생성), 광학 문자 인식(optical character recognition, OCR), 비디오 트랜스코딩과 같은 작업을 수행하는 데 매우 적합합니다. 이미지 처리 적용사례에 대한 자세한 내용은 “SiteSpirit에서 10%의 비용으로 10배 더 빨라진 방법"을 읽어보세요.”

대규모 병렬 컴퓨팅/“Map” 작업

당황스러울 정도로 병렬화된 모든 작업은 서버리스 런타임에 대한 좋은 적용사례이며, 병렬화 가능한 각 작업은 하나의 작업 호출로 이어집니다. 샘플 작업으로는 데이터 검색 및 처리(특히 클라우드 오브젝트 스토리지), Map(-Reduce) 작업, 웹 스크래핑부터 비즈니스 처리 자동화, 하이퍼파라미터 튜닝, Monte Carlo 시뮬레이션 및 게놈 프로세싱까지 다양합니다.

자세한 예를 살펴보려면 "서버리스 아키텍처에서 Monte Carlo 시뮬레이션이 로컬 머신 대비 160배 이상 빠르게 실행된 방법"을 읽어보세요.

스트림 처리 워크로드

관리형 Apache Kafka를 FaaS 및 데이터베이스/스토리지와 결합하면 데이터 파이프라인 및 스트리밍 앱의 실시간 구축을 위한 강력한 토대가 마련됩니다. 이러한 아키텍처는 IoT 센서 데이터, 애플리케이션 로그 데이터, 금융 시장 데이터 및 (다른 데이터 소스의) 비즈니스 데이터 스트림 등 (검증, 정제, 보강, 변환을 위한) 모든 종류의 데이터 스트림 수집 작업을 수행하는 데 이상적으로 적합합니다.

서버리스의 일반적인 응용 분야

IBM의 최근 설문조사에 따르면 IT 전문가들은 고객 관계 관리(CRM), 분석 및 비즈니스 인텔리전스, 금융 등 다양한 응용 분야에 걸쳐 서버리스를 사용한다고 보고했습니다.

 

튜토리얼: 서버리스 컴퓨팅 시작하기

다음과 같은 튜토리얼을 활용하여 서버리스 컴퓨팅 스킬을 확장할 수 있습니다.

솔루션
IBM Cloud Code Engine

완전 관리형 컨테이너 런타임에서 컨테이너, 애플리케이션 코드 또는 일괄처리 작업을 실행합니다.

IBM Cloud Code Engine 살펴보기
IBM Cloud Satellite

모든 클라우드 벤더의 온프레미스, 에지 컴퓨팅 및 퍼블릭 클라우드 환경에서 일관성 있게 앱을 배포하고 실행합니다.

IBM Cloud Satellite 살펴보기
IBM Cloudant

오픈 소스 Apache CouchDB를 기반으로 하는 하이퍼스케일 및 복원성과 함께 글로벌하게 사용할 수 있는 애플리케이션용 데이터 계층을 제공합니다.

IBM Cloudant 살펴보기
리소스 엔터프라이즈의 서버리스, 2021년

새로운 연구를 통해 서버리스 컴퓨팅이 실제 환경에서 제시하는 기회와 과제에 대한 인사이트를 발견합니다.

IBM Cloud Code Engine 소개

완전 관리형 서버리스 플랫폼에서 모든 컨테이너화된 워크로드(웹 앱, 마이크로서비스 및 일괄 작업 포함)를 실행하는 데 필요한 기능 그 이상의 이점을 실현하세요.

클라우드를 다시 즐겨 보세요

IBM Cloud Code Engine과 이 엔진이 제공하는 장점을 자세히 알아봅니다.

다음 단계

서버리스 컴퓨팅은 클라우드에서 애플리케이션을 구축하고 작동하는 단순하고 비용 효율적인 방법을 제공합니다. Kubernetes 기술이 없어도 개발자가 서버리스 애플리케이션과 워크플로우를 배포할 수 있도록 지원하는 사용량 기반 서버리스 플랫폼인 IBM Cloud Code Engine에 대해 알아보세요.

지금 IBM Cloud Code Engine 살펴보기