FaaS(Function-as-a-Service)란?
FaaS를 사용하면 클라우드 애플리케이션 개발자가 마이크로서비스 애플리케이션을 더 쉽게 실행하고 관리할 수 있습니다.
IBM 뉴스레터 구독하기
서로 연결된 기하학적 도형이 있는 검정색과 파란색 배경
FaaS란?

FaaS(Function-as-a-Service)는 마이크로서비스 애플리케이션 구축 및 실행에 일반적으로 수반되는 복잡한 인프라를 관리하지 않고도 이벤트에 대한 응답으로 코드를 실행할 수 있는 클라우드 컴퓨팅 서비스입니다.

인터넷에서 소프트웨어 애플리케이션을 호스팅하려면 가상 또는 물리적 서버를 프로비저닝 및 관리하고, 운영 체제 및 웹 서버 호스팅 프로세스를 관리해야 하는 것이 일반적입니다. FaaS를 사용하면 클라우드 서비스 공급업체에서 물리적 하드웨어, 가상 머신 운영 체제 및 웹 서버 소프트웨어 관리까지 모두 자동으로 처리합니다. 이를 통해 개발자는 애플리케이션 코드의 개별 기능에만 집중할 수 있습니다.

 

FaaS와 서버리스

서버리스와 서비스형 기능(FaaS)은 종종 서로 혼동되는 경우가 많지만, 사실 FaaS는 서버리스의 하위 집합입니다.

서버리스는 컴퓨팅, 스토리지, 데이터베이스, 메시징, API 게이트웨이 등 서버의 구성, 관리, 과금이 최종 사용자에게 보이지 않는 모든 서비스 범주에 초점을 맞추고 있습니다.

반면 FaaS는 서버리스 아키텍처에서 가장 핵심적인 기술이지만, 애플리케이션 코드 또는 컨테이너가 이벤트나 요청에 대한 응답으로만 실행되는 이벤트 중심 컴퓨팅 패러다임에 중점을 둡니다.

FaaS의 이점

FaaS는 애플리케이션을 효율적이고 비용 효율적인 방식으로 클라우드로 마이그레이션 하려는 경우 유용한 툴입니다. FaaS는 다음과 같은 이점을 제공합니다.

  • 인프라가 아닌 코드에 집중: FaaS를 사용하면 서버를 기능으로 분할하여 독립적으로 자동 확장할 수 있으므로 인프라를 관리할 필요가 없습니다. 덕분에 앱 코드에 집중하여 출시 시간을 획기적으로 단축할 수 있습니다.

  • 사용한 리소스에 대해서만 비용 지불 FaaS를 사용하면 작업이 발생할 때만 비용을 지불하면 됩니다. 작업이 끝나면 모든 것이 중지되어 코드가 실행되지 않고, 유휴 서버가 생기지 않으며, 비용이 발생하지 않습니다. 따라서 FaaS는 특히 동적 워크로드 또는 예약된 작업에 비용 효율적인 옵션입니다. 또한 FaaS는 부하가 높은 시나리오에 대해 우수한 총소유 비용을 제공합니다.

  • 자동으로 확장 또는 축소: FaaS를 사용하면 필요에 따라 기능이 자동으로, 독립적으로, 즉각적으로 확장됩니다. 수요가 줄어들면 FaaS는 자동으로 규모를 축소합니다.

  • 강력한 클라우드 인프라가 제공하는 이점: FaaS는 지역별로 여러 가용 영역에 분산되어 있으며, 추가 비용 없이 여러 지역에 배포할 수 있기 때문에 고가용성을 기본적으로 제공합니다.
FaaS 원칙 및 우수 사례

다음과 같은 우수 사례를 따르면 FaaS를 더 쉽게 배포하고 더 효과적으로 사용할 수 있습니다.

  • 각 기능이 하나의 작업만 수행하도록 합니다. FaaS 기능은 이벤트에 대한 응답으로 하나의 작업을 수행하도록 설계되어야 합니다. 코드 범위를 제한하고 효율적이며 경량화하여 기능을 빠르게 로드하고 실행할 수 있습니다.

  • 기능이 다른 기능을 호출하지 않게 합니다. FaaS의 가치는 기능을 격리할 때 진가를 발휘합니다. 기능이 너무 많으면 비용이 증가하고 기능 격리의 가치를 누릴 수 없습니다.

  • 기능에 최대한 적은 수의 라이브러리를 사용합니다. 너무 많은 라이브러리를 사용하면 기능의 속도가 느려지고 확장하기가 더 어려워질 수 있습니다.
FaaS 사용 사례

FaaS는 트랜잭션을 쉽게 격리하고 확장할 수 있기 때문에 대용량의 병렬 워크로드에 적합합니다. 백엔드 시스템을 생성하거나 데이터 처리, 포맷 변환, 인코딩 또는 데이터 취합과 같은 작업에 사용할 수도 있습니다.

FaaS는 웹 앱, 백엔드, 데이터/스트림 처리 또는 온라인 챗봇이나 IoT 디바이스용 백엔드를 생성할 때도 유용한 툴입니다. FaaS는 타사 서비스를 관리하고 사용하는 데 도움이 될 수 있습니다. 예를 들어, 안드로이드 앱 개발을 고려하고 있다면 비용을 절감하기 위해 FaaS 방식을 채택할 수 있습니다. 일괄 처리와 같은 특정 기능을 위해 앱이 클라우드에 연결할 때만 비용이 부과되기 때문에 기존 접근 방식을 사용할 때보다 비용을 크게 절감할 수 있습니다.

FaaS는 또한 컴퓨팅 성능을 획기적으로 향상할 수 있습니다. 예를 들어, 최근 두 명의 학생이 IBM 엔지니어와 함께 IBM Cloud Functions를 활용하여 몬테카를로 시뮬레이션(예측하기 어려운 특정 사건의 미래 결과를 예측하는 데 사용되는 수학적 방법)으로 주가를 추정하는 방법을 연구했습니다. 몬테카를로 시뮬레이션은 중요한 고성능 컴퓨팅 워크로드로 간주됩니다. 팀은 몬테카를로와 IBM Cloud Functions의 조합을 통해 대규모 계산을 실행하고 비즈니스 논리에 집중할 수 있었습니다. 팀은 FaaS를 사용하여 1,000개의 동시 호출로 전체 몬테카를로 시뮬레이션을 약 90초 만에 끝냈습니다. 이에 비해 CPU 코어가 4개인 노트북에서는 동일한 흐름을 실행하는 데 247분이 걸렸으며 CPU 사용률이 거의 100%에 도달했습니다.

더 많은 FaaS 사용 사례를 보려면 "IBM Cloud Functions의 주요 이점 요약"을 확인하세요.

FaaS와 PaaS, 컨테이너 및 VM 비교

FaaS, PaaS(서비스형 플랫폼), 컨테이너, VM(가상 머신)은 모두 서버리스 에코시스템에서 중요한 역할을 합니다. FaaS는 서버리스 스택에서 가장 중심적이고 가장 명확한 요소인 만큼, FaaS가 현재 시장에 나와 있는 다른 일반적인 컴퓨팅 모델과 주요 속성이 어떻게 다른지 살펴볼 필요가 있습니다.

  • 프로비저닝 시간: 밀리초. 다른 모델에서는 수 분 및 수 시간이 걸립니다.

  • 지속적인 관리: 필요 없음. 다른 모델은 관리가 쉬운 것부터 PaaS, 컨테이너 및 VM의 순서로 평가됩니다.

  • 탄력적 확장: 각 작업이 항상 즉각적이고 본질적으로 확장됩니다. 다른 모델은 자동 확장 기능을 제공하지만, 자동 확장 규칙을 신중하게 조정해야 합니다.

  • 용량 계획: 필요 없습니다. 다른 모델에서는 자동 확장 및 일부 용량 계획이 혼합되어 있습니다.

  • 영구 연결 및 상태: 연결 및 상태를 유지하는 제한된 기능은 외부 서비스/에 유지되어야 합니다. 다른 모델은 http를 활용하고, 오픈 소켓 또는 연결을 오랜 시간 동안 유지하고, 호출 사이에 메모리에 상태를 지정할 수 있습니다.

  • 유지 보수: 모든 유지 보수는 FaaS 공급업체에서 관리합니다. PaaS도 마찬가지입니다. 반면 컨테이너와 VM에는 운영 체제, 컨테이너 이미지, 연결 등의 업데이트/관리를 포함한 상당한 유지 관리가 필요합니다.

  • 고가용성(HA) 및 재해 복구(DR): 앞서 설명했듯이, HA는 FaaS 모델에 내재되어 있어 추가 노력이나 비용이 필요하지 않습니다. 다른 모델에는 추가 비용과 관리 노력이 필요합니다. VM과 컨테이너의 경우 인프라를 자동으로 다시 시작할 수 있습니다.

  • 리소스 활용도: 리소스는 유휴 상태가 아니며 요청 시에만 호출됩니다. 다른 모든 모델에는 최소 어느 정도의 유휴 용량이 있습니다.

  • 리소스 제한: FaaS는 코드 크기, 동시 활성화, 메모리, 실행 길이 등에 리소스 제한이 있는 유일한 모델입니다.

  • 과금 단위 및 청구: 100밀리초 단위의 블록 단위로 요금이 청구됩니다. 다른 모델은 시간(때로는 분) 단위로 청구됩니다.
Kubernetes/Knative 및 FaaS

Kubernetes와 Knative는 FaaS를 뒷받침하는 '배관' 구현의 하나입니다. Kubernetes는 클라우드 애플리케이션 관리에 중요한 오픈 소스 컨테이너 오케스트레이션 툴입니다. Knative를 사용하면 Kubernetes 클러스터 내에서 서버리스를 실행할 수 있습니다.

Knative와 Kubernetes를 결합하면 모니터링, 보안, 로깅, 인증과 같은 Kubernetes 기능을 활용하고, 자동화된 컨테이너 빌드, 완전한 이식성, 여러 하이브리드 환경에서의 작업과 같은 Knative의 이점과 결합할 수 있습니다.

이 기술을 창시한 사람은 개발자가 클라우드 앱을 빌드할 때 서버리스와 컨테이너 중 하나를 선택할 필요가 없어야 한다고 생각했습니다. 목표는 서버리스의 강력한 확장성과 온디맨드 액세스를 통해 컨테이너의 가용성과 일관성을 높이는 것이었습니다.

Knative에 관해 자세히 알아보려면 다음 동영상을 시청하세요.

관련 솔루션
IBM Cloud Code Engine

컨테이너 이미지, 배치 작업 또는 소스 코드를 서버리스 워크로드로 실행하므로 크기 조정, 배포, 네트워킹 또는 확장이 필요 없습니다. 

IBM Cloud Code Engine 살펴보기
IBM Cloud Functions

FaaS(Functions-as-a-Service) 프로그래밍 플랫폼을 사용하여 온디맨드 방식으로 확장 가능한 경량 코드를 개발하세요.

IBM Cloud Functions 살펴보기
자원 서버리스란 무엇인가요?

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

컨테이너란 무엇인가요?

컨테이너는 애플리케이션 코드와 라이브러리 종속성을 함께 패키징하는 실행 가능한 소프트웨어 단위로, 데스크톱, 기존 IT, 클라우드 등 어디서나 실행할 수 있습니다.

PaaS란 무엇인가요?

PaaS(서비스형 플랫폼)는 애플리케이션 개발, 실행 및 관리를 위한 완전하고 유연하며 비용 효율적인 클라우드 플랫폼을 제공합니다.

다음 단계 안내

완전 관리형 서버리스 플랫폼인 IBM Cloud Code Engine을 사용하면 인프라 관리가 아닌 코드 작성에만 집중할 수 있습니다. 컨테이너 이미지, 일괄처리 작업, 소스 코드를 한데 모으고, IBM Cloud Code Engine으로 기본 인프라를 관리하고 보호하세요. 직접 컨테이너 클러스터를 배포하거나, 스케일링하거나, 크기를 조정할 필요가 없습니다. 네트워킹 기술도 필요 없습니다.

IBM Cloud Code Engine 살펴보기