기사 공유하기

위키피디아는 클라우드 컴퓨팅(Cloud Computing)을 사용자의 직접적이고 적극적인 관리가 필요 없는 데이터 저장과 연산능력을 포함한 컴퓨터 시스템 자원의 ‘주문형 가용성’(the on-demand availability)이라고 정의한다. 클라우드 컴퓨팅의 성공 비결은 이 정의에서 언급한 “사용자의 직접적이고 적극적인 관리가 필요 없는”[footnote]”without direct active management by the user” (위키백과, ‘Cloud computing’ 중에서) [/footnote] 데에서 나오는 편리함과 각 사용자의 개별구축(on-premise) 대신에 클라우드 사업자를 통한 주문형(on-demand)으로 컴퓨터 시스템 자원의 가용성을 확보함에 따르는 효율성이라고 할 수 있다.

따라서 클라우드 컴퓨팅은 자연스럽게 “컴퓨터 시스템 자원”의 더욱 더 많은 부분을 클라우드 사업자가 제공함으로써 사용자의 편의와 효율을 증대시키는 방향으로 발전하였다.

처음 등장한 클라우드 컴퓨팅의 모습은 개별구축(on-premise)으로 사용자들이 직접 소유하고 관리하던 하드웨어와 네트워크 자원을 주문형(on-demand)으로 사용할 수 있도록 하는 IaaS(Infrastructure as a Service)였다. 사용자는 이런 주문형 하드웨어 위에 원하는 운영체제와 응용 프로그램을 설치하여 사용하였다.

IaaS 다음 단계는 하드웨어뿐 아니라 응용 프로그램을 개발·사용하는데 필요한 소프트웨어 환경(운영체제와 개발/운영환경)까지 주문형으로 제공하는 PaaS(Platform as a Service) 형태의 서비스였고, 그 다음 단계는 응용 프로그램까지 클라우드 사업자가 제공하는 SaaS(Software as a Service)로 발전하였다.

스택 속 계층별로 정렬된 클라우드 컴퓨팅 서비스 모델. (출처: 위키미디어 공용)
스택 속 계층별로 정렬된 클라우드 컴퓨팅 서비스 모델. (출처: 위키미디어 공용)

그리고 서버리스 컴퓨팅: 필요성, 장단점

위에서 살펴본 바와 같이 편의성과 효율성을 추구하는 클라우드 컴퓨팅은 점차 더 세분화된 작은 단위를 관리하는 방향으로 발전하게 되었고, 현재 그 단계는 물리적 기계, 가상 기계, 컨테이너의 단계를 넘어 각 기능(function) 단위로 관리하는 서버리스 컴퓨팅(Serverless Computing)까지 발전하였다.

간단히 말하자면 서버리스 컴퓨팅은 개발자들은 하단 서버에 대해서는 전혀 신경 쓸 필요 없이 각 기능을 수행하는 코드와 해당 기능을 작동하기 위한 조건(trigger)만 정의하면, 해당 조건이 발생하면 자동으로 지정된 코드를 수행하고, 코드 수행에 소요된 실제 비용만큼만 과금이 되는 구조다. 클라우드 사업자들이 제공하는 서비스를 보면 공통적으로 사용된 메모리와 수행 시간을 기준으로 과금이 이루어진다.

코드가 수행되지 않는 동안에는 하드웨어가 할당되지 않는 구조이기 때문에, 비용이 발생하지 않는다는 장점이 있지만, 최초 수행(cold start)을 위해서는 하드웨어를 할당하는 시간까지 필요하므로 반응이 느릴 수 있다는 단점이 있다. 또한, 수행을 마치면 할당되었던 하드웨어를 반납하는 구조이므로 이전 수행 결과가 다음 수행에 영향을 미칠 수 없는 스테이트리스(stateless) 함수만 지원할 수 있다는 점을 유의해야 한다. 스테이트리스 함수로 구성하기가 힘든 기능을 구현해야 하는 경우에는 사용할 수 없다는 단점이 있지만, 이전 상태에 영향을 전혀 받지 않기 때문에 필요에 따라 원하는 만큼의 인스턴스를 동시에 구동시킬 수 있다는 장점이 있다.

또한, 하드웨어의 할당과 반환이 자동으로 이루어지기 때문에 사용자가 전혀 신경을 쓸 필요가 없다는 장점이 있지만, 사용자가 원하지 않더라도 다른 사용자의 코드와 동일한 하드웨어에서 수행이 되는 멀티테넌시(multitenancy)에 따른 보안 약점이 단점이 될 수 있다.

서버리스 솔루션까지의 여정 (출처: 딜로이트 컨설팅)
서버리스 솔루션까지의 여정 (출처: 딜로이트 컨설팅)

서버리스 컴퓨팅 상품과 오픈 소스

업계 선두주자인 아마존웹서비스는 가장 먼저 2014년에 서버리스 컴퓨팅 서비스 람다(Lambda)를 출시하였다. 람다는 S3 버켓의 데이터나 다이나모디비(DynamoDB) 테이블의 변화, HTTP 호출이나, SDK호출에 따라 지정된 람다 함수를 호출하여 수행하고 수행에 실제 소요된 메모리와 시간을 기준으로 과금한다.

AWS Lambda 수행 (출처: 아마존웹서비스)
AWS Lambda 수행 (출처: 아마존웹서비스)

다른 클라우드 사업자도 곧 뒤따르기 시작하여, 2016년 구글 클라우드 플랫폼은 구글 클라우드 펑션(Google Cloud Functions)을 제공하기 시작하였고, IBM도 2016년 IBM 클라우드에 IBM 클라우드 펑션을 제공하기 시작하였다. 마이크로소프트 애져도 애져 펑션을 제공하고 있으며 오라클은 오픈소스 Fn 프로젝트 기반으로 한 서버리스 컴퓨팅 서비스를 오라클 클라우드 플랫폼에서 제공하고 있다. 국내 사업자인 네이버 비즈니스 플랫폼도 2018년 네이버 클라우드 플랫폼 클라우드 펑션을 제공하기 시작하였다.

클라우드 사업자들이 제공하는 서버리스 컴퓨팅 서비스는 지원하는 프로그래밍 언어나 하드웨어 할당을 하기 위한 하부 컨테이너 구조와 실제 코드가 수행되는 하드웨어나 운영체제 등에 차이가 있지만, 하부 구조에 대한 고민을 서비스 제공자에게 미루는 것이 서버리스 컴퓨팅의 기본 정의이기 때문에, 실제 사용자 입장에서 큰 차이를 발견하기 어렵다.

이 밖에도 오픈소스로 제공되는 주요 서버리스 컴퓨팅 프로젝트는 다음과 같다.

  • 아파치 오픈위스크(Apache OpenWhisk)는 스칼라(Scala)로 작성된 오픈소스 서버리스 클라우드 플랫폼이다. HTTP 요청과 같은 트리거(trigger)에 반응하여 자바스크립트(JaveScript)나 스위프트(Swift)로 작성된 함수를 구동시킨다.
아파치 오픈위스크
아파치 오픈위스크
  • 피션(Fission)은 쿠버네티스를 기반으로 하는 서버리스 컴퓨팅 프레임워크이다.
  • 아이언펑션(IronFunctions)는 도커(Docker)기반의 서버리스 컴퓨팅 프레임워크이며 고(Go) 언어를 지원하는 종합적인 마이크로서비스 플랫폼이다.
  • Fn Project는 퍼블릭 클라우드와 온프레미스를 모두 지원하는 오픈소스 컨테이너 네이티브(container-native) 서버리스 플랫폼이며 오라클 클라우드 플랫폼에서도 사용되고 있다.

서버리스 컴퓨팅의 미래 

서버리스 컴퓨팅은 하드웨어 자원에 관한 모든 관리를 클라우드 서비스 사업자에게 맡기고, 사용자는 필요한 기능을 제공하는 코드에만 집중할 수 있도록 하며, 실제 사용된 컴퓨팅 자원에 비례하여 과금이 이루어지는 클라우드 컴퓨팅 서비스이다.

코드가 실제 수행되는 순간에만 하드웨어 자원의 할당이 이루어지기 때문에 여러 가지 장단점이 존재하고, 사용할 수 있는 경우에 제한도 있지만, 스테이트리스 함수의 사용이 가능한 경우에는 가장 효율적으로 컴퓨팅 지원을 사용할 수 있는 방법을 제공한다.

클라우드 컴퓨팅에서 점차 강세를 보이고 있는 마이크로서비스 아키텍쳐, 컨테이너, 도커 구조로 대표되는 클라우드 네이티브 컴퓨팅과도 일맥상통하는 개념이기 때문에 확산 가능성은 계속 높아지고 있다.

서버리스 컴퓨팅

[divide style=”2″]

[box type=”note”]

본 글은 한국정보화진흥원의 지원을 받아 작성되었으며, 클라우드스토어 씨앗 이슈리포트에 동시 게재합니다.

[/box]

 

관련 글