<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1387208918241112&ev=PageView&noscript=1"/>

뉴스센터 목록으로 돌아가기

인프라 운영을 쉽게 만들어주는, '서버리스 컴퓨팅'이란?

위시켓 | 2020.04.01.

01_뉴스센터 페이스북

개발자들은 비즈니스와 관련된 문제들을 코드로 해결하기 위해 수많은 시간들을 보냅니다. 반면 운영팀은 개발자들이 작성한 코드를 가져와서 그것을 다양한 기기에서 실행할 수 있는 방법을 찾고, 끝없이 실행하는 시간을 가져야 하는데요. 만약 이 부분을 다른 누군가에게 맡기게 된다면 어떨까요?

가상 기계, 클라우드 컴퓨팅, 컨테이너(서버 가상화의 한 기법) 등 지난 20년 동안 IT 분야에서 일어난 수많은 혁신들은, 프로그램이 실행되고 있는 물리적인 기계 시스템에 대해 사람들이 신경 쓰지 않도록 하는 것에 집중되어 있습니다. 서버리스(Serverless) 컴퓨팅은 이런 목표를 실현하기 위해서 점점 더 많이 쓰이고 있는 방식입니다. 서버리스 컴퓨팅을 이용하면, 프로그램이 실행되는 하드웨어나 운영체제(OS)에 대해서 알지 못해도 괜찮습니다. 번거로운 일들은 모두 서비스 공급업체에서 처리하기 때문입니다.

이번 시간 IT 아웃소싱 플랫폼, 위시켓은 서버리스 컴퓨팅에 대해 집중적으로 알아보고자 합니다. 개발을 더 쉽게, 운영비용을 더 저렴하게 만들고 싶으시다면 주목해 주세요:)


서버리스 컴퓨팅(Serverless Computing)이란?

서버리스 컴퓨팅은 클라우드 시스템의 구현 방식 중 하나로, 클라우드 서비스 업체가 애플리케이션의 일부를 실행하는데 필요한 컴퓨팅 리소스와 스토리지(저장소)를 동적으로 할당하고, 사용자는 그 부분만큼만 비용을 지불하는 것입니다. 물론 여기에서도 여전히 서버의 역할이 있기는 하지만 프로비저닝(리소스 준비)과 유지는 모두 전적으로 서비스 제공 업체가 담당하게 됩니다. 서버리스 컴퓨팅의 열렬한 지지자인 아마존의 크리스 먼스(Chris Munns)는 2017년에 있었던 한 컨퍼런스에서, 서버리스 컴퓨팅에 대해 이렇게 말했습니다.

서버리스라는 것은 관리하거나 프로비저닝 해야 할 서버가 전혀 존재하지 않는 것을 말합니다. 베어 메탈(bare metal) 방식이나, 가상 서버 방식이나 컨테이너 방식은 서버리스에 포함되지 않습니다. 이런 방식들은 호스트를 관리하며 패치를 해야 하고, 운영체제 수준에서 무언가 계속해서 작업을 해야 합니다. 이렇게 서버 차원의 작업들이 이루어지고 있는 것을 두고, 서버리스 환경이라고 말하기는 힘든 것입니다.

예전에는 서버리스 방식을 '서비스로서의 백엔드 시나리오(back-end-as-a-service scenario)라고 부르기도 했는데, 클라우드에 호스팅 되어 있는 백엔드 서버에 모바일 앱이 연결되는 것으로 봤기 때문에 그렇게 불렀다고 합니다. 하지만 요즘에는 서버리스 컴퓨팅 또는 서버리스 아키텍처(구조)라고 말하면, 이것은 서비스로서의 함수(function-as-a-service)를 제공하는 것을 의미합니다. 이러한 환경에서고객들은 비즈니스에서 필요한 부분만 코딩을 해서 클라우드 서비스에 업로드합니다. 그러면 서비스 업체가 하드웨어 프로비저닝, 가상 기계 및 컨테이너 관리까지 모든 것을 담당하고, 심지어는 애플리케이션의 코드에 들어 있는 멀티스레딩(multithreading) 같은 작업까지도 처리해 줍니다.

서버리스에서 애플리케이션의 함수(function)들은 이벤트 위주로 작동하는데, 이는 요청이 있을 경우에만 해당 함수의 코드가 호출된다는 것을 뜻합니다.서비스 제공 업체 측에서는 물리적인 서버나 가상 서버를 유지하기 위한 월 고정 비용이 아닌, 해당 명령의 실행에 소요된 컴퓨팅 시간만큼만 비용을 청구합니다. 이렇게 호출된 함수들은 한 데 연결되어 파이프라인 형태로 처리될 수 있고, 컨테이너나 기존의 서버에서 실행되고 있는 다른 코드와 상호작용하면서 보다 커다란 애플리케이션의 컴포넌트로 기능할 수도 있습니다.


서버리스 컴퓨팅의 장점과 단점

위에서 설명한 대로라면 서버리스 컴퓨팅으로 얻을 수 있는 장점은 크게 두 가지가 있습니다. 첫째는 개발자들이 코딩을 할 때, 서버 시스템의 구조에 대해서는 신경 쓰지 않고, 자신들의 비즈니스와 관련된 내용들만 집중하면 된다는 것입니다. 둘째는 잘 사용하지도 않으면서 물리적인 하드웨어를 구입하거나 클라우드 인스턴스를 대여할 필요가 없이, 아주 세분화된 요금 체계로 실제 사용한 컴퓨팅 리소스에 대해서만 비용을 지불하면 된다는 것입니다.

버나드 골든(Bernard Golden)이 지적한 바와 같이, 두 번째 장점은 이벤트 위주의 애플리케이션에게는 더 큰 장점이 됩니다. 예를 들어서 여러분이 개발한 애플리케이션이 있는데, 대부분의 경우에는 잠잠하다가 가끔씩 한 번에 수많은 이벤트 요청을 처리해야 한다고 생각해보시죠. 또는 여러분이 개발한 애플리케이션이 인터넷 연결이 제한적이거나 가끔씩 접속되는 사물인터넷(IoT) 기기에서 전송된 데이터를 처리해야 한다고 생각해보세요. 두 경우 모두, 기존의 방식으로 처리하려면 처리량이 많은 경우를 고려해서 뚱뚱한 서버를 구입해야 하고, 또 그러한 요청들에 대비해서 일일이 프로비저닝을 해야 합니다. 하지만 그 서버는 거의 대부분 놀고 있을 테죠. 서버리스 구조에서는 여러분이 실제로 사용한 서버 리소스에 대해서만 비용을 지불하면 됩니다.서버리스 컴퓨팅은 특정한 종류의 배치 프로세싱(자동 일괄처리)에서도 장점이 있습니다. 서버리스 구조를 활용하는 가장 대표적인 사례로는, 여러 개의 개별 이미지 파일들을 업로드해서 처리한 다음 해당 애플리케이션의 다른 부분으로 보내는 서비스가 있습니다.


서버리스 컴퓨팅의 가장 두드러지는 단점은 단기적인 이벤트 처리를 염두에 두고 만들어진 것이기 때문에,'장기적인 작업에는 적합하지 않다'라는 것입니다. 대부분의 서버리스 컴퓨팅 서비스에서는 한 개의 명령을 몇 분 이상 실행할 수 없으며, 함수를 실행시키면 이전에 실행된 인스턴스에서 사용됐던 상태 추적 데이터는 보존되지 않습니다. 이와 관련된 문제로는 서버리스 환경에서는 코드가 실행되는 데까지 몇 초의 시간이 걸릴 수 있다는 것인데, 이 점은 많은 경우에는 문제가 되지는 않겠지만 지연시간이 적어야 하는 애플리케이션에서는 우려해야 할 정도의 수준입니다.

특정한 서비스 제공 업체에만 의존하게 되는 것도 문제점이 될 수 있습니다. 이 말은 개발자들이 결국엔 서비스 제공 업체의 도구를 사용해야 하기 때문에, 나중에 불만족스러운 부분이 많아지더라도 다른 업체로 전환하기가 어려워진다는 것입니다. 그리고 서버리스 컴퓨팅은 말 그대로 제공 업체의 인프라 위에서 구동되기 때문에 서버리스의 코드를 인하우스(사내) 개발부서나 테스트 환경에 가져와서 통합시키는 것이 어려워질 수 있습니다.


서버리스의 서비스 형태

서버리스 컴퓨팅에는 두 가지 주요 방법은 있으며, 완전한 서버리스 애플리케이션을 구축하거나, 일부는 서버리스로, 일부는 전통적인 마이크로서비스 구성 요소로 애플리케이션을 구성할 수 있습니다.

BaaS (Backed-as-a-Serviece)


주된 사용 대상이 모바일 앱, 웹앱이기 때문에 서비스로서의 모바일 백엔드(Mobile BaaS, MBaaS)로도 잘 알려져 있습니다. 단일 웹페이지나 모바일 앱 기반의 서비스에서 필요한 서버 기능들을 사용하기 위해 이용하는 써드파티(Third Party) 애플리케이션이지만 클라우드 서비스입니다.

쉽게 말해 애플리케이션 개발 시 요구되는 복잡한 백엔드(Back-End) 기능들을 개발자가 직접 개발하지 않고, 클라우드 공급자가 제공하는 서비스를 이용해 쉽고 안정적으로 구현하는 것입니다. 예를 들어, 클라우드 제공 업체는 인증 서비스와 추가 암호화, 클라우드 액세스 가능한 데이터베이스 및 상세한 데이터 사용량을 제공하는 것이죠. 보통 클라우드 제공 업체가 설정한 애플리케이션 프로그래밍 인터페이스(API) 호출을 통해 액세스 되므로 이러한 기능을 사내에서 개발하는 것보다 시스템에 통합하는 것이 훨씬 간단합니다.


FaaS


개발자가 사용자 정의 서버 측 로직을 작성하지만 클라우드 제공 업체가 관리를 전담하는 서버 컨테이너에서 실행되는 서비스로서의 기능입니다. 서버 측 로직은 개발자에 의해 작성되므로 BaaS보다 높은 수준의 제어 기능이 포함됩니다.

FaaS는 확장성이 매우 뛰어납니다. 일반적으로, FaaS를 사용하지 않는다면 다양한 트래픽에 유연한 대응을 하기 위해 우리는 AWS의 Auto Scaling 같은 기술을 사용합니다. 이를 통해 CPU 사용량, 네트워크 처리량에 따라 서버의 개수를 늘리는 방식으로 처리를 분산시킵니다. FaaS를 사용하게 되면 특정 조건에 따라 자동으로 확장되는 것이 아닙니다. 함수가 1초에 1개가 호출되면 1개가 호출되는 것이고, 100,000,00개가 호출되면 100,000,00개가 호출되는 것입니다. 그리고 호출된 횟수만큼 돈을 내는 것이죠.


이번 시간 위시켓과 함께 서버리스 컴퓨팅에 대해 알아보았습니다. 서버리스 컴퓨팅을 기반으로 간단한 기능들을 독립적으로 실행하게 되면 개발도 더 쉬워지고, 이벤트 위주로 실행되기 때문에 운영비용도 저렴해진다는 것을 알게되셨을텐데요.오늘 글을 통해 서버리스 백엔드 API를 개발이나 서버리스 웹 어플리케이션 개발과 같이 다양한 IT개발 프로젝트가 떠올랐다면 위시켓을 방문해보세요. 7만 5천 이상, 국내 최다 IT전문가들이 활동하고 있어서 보다 적합한 전문가를 만날 수 있습니다.

> 이 글은 'What is serverless? Serverless computing explained'을 각색하여 작성되었습니다.


 

위시켓 | 2020.04.01.

'뉴스센터'의 다른 글 보기

그래픽디자인에 활용할 수 있는, 창의적인 그라데이션 방법

제프 베조스가 말하는 성공을 위한 의사결정 방식 2가지

인프라 운영을 쉽게 만들어주는, '서버리스 컴퓨팅'이란?

GPS 꺼도 위치 추적 가능? 예측불가 개인정보 접근 기술들

존경받는 리더들이 가지고 있는 커뮤니케이션 패턴 8가지

뉴스센터 더 보기 >