마이크로서비스(Microservice)의 단짝 서버리스
sYstango에 실린 Sumit Singhal의 Serverless Architecture- Why and How It’s a Smart Choice? 글을 번역 및 수정한 내용입니다.
바로 들어가기 전에 서버리스 아키텍처(Serverless Architecture)의 정의와 기본 개념에 대한 좀 더 자세한 설명이 필요하면 '리팩토링'의 저자로 유명한 '마틴 파울러가' 정리한 ‘서버리스 아키텍처’를 꼭 읽어 보시기 바랍니다. (한글로 번역되어 있어 읽기도 편합니다.)
서버리스 아키텍처 정의
서버리스 아키텍처 특징
서버리스 라이프 사이클
아키텍처 비교 및 장단점
적용 사례 소개
서버리스 아키텍처(Serverless Architecture) - 왜 그리고 어떻게 하면 현명한 선택이 될까?
Gartner의 최근 보고서에 따르면 2020 년까지 전 세계 기업의 20 % 이상이 서버리스 컴퓨팅 기술을 도입할 예정입니다.
이것은 서버리스가 이제는 신조어가 아니라는 것을 분명히 암시합니다. 이는 널리 퍼진 클라우드 컴퓨팅 대세이며, 이미 소프트웨어 아키텍처의 세계에 혁명을 일으키기 시작했습니다. Amazon, Microsoft 및 Google과 같은 대형 서비스 업체는 서버리스 아키텍처에 막대한 투자를 하고 있습니다.
서버리스 아키텍처는 이름과는 달리 애플리케이션에서 실제로 서버를 제거하지 않습니다. 서버리스의 정의를 살펴보겠습니다.
서버리스 아키텍처란 서드파티의 서비스(솔루션) 및 기능(API) 사용과 관련이 있으며, 관리 대상 서버를 포함하지 않는 응용 프로그램의 운용을 의미합니다. 서버리스 아키텍처의 널리 알려진 두 가지 주요 구현 방식은 다음과 같습니다.
FaaS (Function as a Service) : 무상태(Stateless) 함수가 서버 측 비즈니스 로직을 포함합니다. 이 함수는 독립 컨테이너에서 실행되며 이벤트로 트리거 됩니다. 이러한 함수는 AWS 람다 또는 Azure 펑션과 같은 서드파티 공급자가 완전히 관리합니다.
BaaS (Backend as a Service) : 이 방식은 서드파티 서비스(예를 들어 Firebase Auth0과 같은)를 로직 처리 단계에서 사용합니다. BaaS를 사용하는 응용 프로그램은 일반적으로 SPA 또는 모바일 응용 프로그램과 같은 클라이언트 중심의 응용 프로그램입니다. 클라이언트는 인증, 데이터베이스, 사용자 관리 등과 같은 외부 서비스를 사용하여 대부분의 비즈니스 로직을 처리합니다.
서버리스는 BaaS와 FaaS를 모두 포함하지만 여기에서는 FaaS에 중점을 둘 것입니다.
서버 시스템 관리가 필요 없음
무상태(Stateless) 기반
자동으로 성능(프로세스) 확장
운영 비용 없음
이벤트 기반 비용
첫 번째 이벤트의 처리 시 시작 시간이 필요
런타임이 분리되어 있어 보안에 강함
서버리스 프로세스의 일반적 라이프 사이클입니다.
간단한 온라인 자동차 경매 신청을 생각해 봅시다. 응용 프로그램을 사용하면 사람들이 로그인하여 입찰가를 설정할 수 있습니다. 시간이 끝나면 최고 입찰자가 차량을 구입합니다.
전통적인 아키텍처에서는 모든 애플리케이션 코드와 프론트 엔드를 포함하는 모놀리식(Monolithic) 서버로 호스팅 합니다.
이 방식은 씬 클라이언트 방식을 사용합니다. 인증, 세션 관리, 차량 관리 등과 같은 모든 비즈니스 로직은 하나의 큰 모놀리식 서버에 있습니다.
이러한 전통적 애플리케이션이 서버리스 및 마이크로 서비스 기반 아키텍처로는 어떻게 적용되는지 살펴보겠습니다.
여기서는 모놀리식 응용 프로그램을 여러 서버 구성 요소로 분리했습니다.
인증 기능 : 사용자 인증 (로그인)을 관리하기 위한 기능(FaaS) 입니다.
차량 관리 서비스 : 차량 목록 표시 / 차량 세부 정보 보기 / 차량 비교 등 차량 관련 작업을 처리하는 마이크로 서비스(Microservice)이며, 다양한 언어 / 프레임 워크를 사용하여 작성될 수 있습니다. 이 서비스는 데이터베이스와 상호 작용하며 독립적으로 작동합니다.
차량 입찰 기능 : 이것은 사용자로부터 입찰가를 할당하는 데 사용되는 또 다른 기능(FaaS) 입니다. 이 함수는 데이터베이스와 상호 작용하여 입찰가를 등록합니다.
API 게이트웨이 : 이것은 서비스 요청 진입점으로 작동하고 모든 서비스 요청에 대한 프록시를 되돌려 줍니다. 클라이언트가 요청이 있으면 게이트웨이는 라우팅 규칙에 따라 리다이렉션 할 서비스를 결정합니다.
전통적인 서비스를 재구성하고 마이크로 서비스 또는 FaaS와 같은 다양한 구성 요소를 결정하는데 영향을 미치는 요인으로는 비즈니스 로직, 시스템 부하, 서버 확장성 등이 있습니다.
위의 예제는 서버리스의 프로세스 흐름과 서버리스와 마이크로 서비스 아키텍처를 활용하여 애플리케이션을 구성하는 방법을 보여줍니다.
PaaS(Platform as a Service)는 서드파티 클라우드 공급자가 제공하는 또 다른 솔루션 중 하나로 응용 프로그램 개발자가 서버 관리 (하드웨어 및 소프트웨어 모두 포함)를 필요로 하지 않습니다. 그리고 이 사실 때문에 서버리스와 PaaS가 다르지 않다는 개념이 개발자들 사이에 있습니다. 유사점과 차이점을 살펴보겠습니다.
개발자의 서버 관리가 포함되어 있지 않습니다.
개발자는 애플리케이션 코드 작성에만 집중할 수 있습니다.
PaaS는 정교한 응용 프로그램 배포가 가능합니다. 그러나 서버리스의 경우에는 매우 부가적이고 제한적입니다.
PaaS 배포가 서버 확장을 위해 미리 구성되어야 하는 반면 서비리스 서버 확장은 자동으로 진행됩니다.
서버리스 비용은 PaaS의 고정 비용에 비해 이벤트당 발생합니다.
코드가 배포되면 PaaS 애플리케이션이 항상 작동하여 요청을 처리할 준비가 됩니다. 서버리스의 경우, 이벤트 빈도에 따라 첫 번째 이벤트가 처리를 시작(cold start)하는 데 약간의 시간이 걸릴 수 있습니다.
서버리스의 사용 사례는 특정 사업 영역이나 비즈니스 로직 또는 시스템 아키텍처로 제한되지 않고 다양하게 퍼져 있습니다. 응용 프로그램의 아키텍처를 설계할 때는 여러 요소를 고려해야 하며 중요 요소가 서버리스를 사용하는데 결정적 영향을 미칩니다. 이러한 중요 요소 중 일부를 살펴보겠습니다.
비용 : 서버리스는 전자 메일 대량 전송과 같은 시스템 부하가 급증하는 서비스일 경우 비용을 절감할 수 있습니다.
서버 관리 : 서버가 없으면 서버 관리의 운영 비용을 크게 줄일 수 있습니다.
확장 성 : 서버리스는 서버 확장이 자동으로 이루어집니다.
응답 시간 : FaaS를 초기화하는 데 약간의 시간이 걸립니다. 로드가 매우 적은 경우 (시간당 하나의 이벤트), 각 요청에 이러한 콜드 스타트가 발생하여 전체 응답 시간이 느려집니다.
빠른 릴리스주기 : 기능이 매우 작은 단위로 나뉘어 있기 때문에 릴리스주기가 매우 작습니다.
웹 응용 프로그램
일괄 처리 및 스케줄러
모바일 및 IOT 백엔드
챗봇
서버리스 및 FaaS 사용의 이점 중 일부를 살펴보겠습니다.
서버 관리 감소
운영 비용 절감
자동 스케일 업 및 스케일 다운
보안은 항상 실행 중인 서비스와 비교하여 더 안전합니다.
비용은 제공된 요청 수 및 이벤트 수에 직접적으로 좌우됩니다.
간단한 패키징 및 배포
릴리스주기 감소
모니터링 용이성
어떤 기술이나 아키텍처와 마찬가지로 서버리스도 몇 가지 제한 사항이 있습니다.
시작 대기 시간 (주기적으로 실행시켜 해결 가능)
서드파티 업체 의존 및 서버에 대한 정교한 제어 불가
코드에 관련된 성능 최적화만 가능
실행 시간제한 (AWS 람다에는 15 분의 실행 시간제한이 있음)
비용 예측이 어려움
개발 환경과 실제 운영 환경의 차이
테스트 및 디버깅의 복잡성
서버리스는 FaaS를 사용하여 계속 실행하는 서버의 구성 요소에서 즉시 실행 함수로 비즈니스 로직을 이동시키는 아키텍처 스타일입니다. 이는 복잡한 시스템 아키텍처 및 시스템 관리 문제에 대한 해결 방안을 제공하여 시스템 관리자뿐만 아니라 개발자의 배포 과정을 단순화합니다.
그리고 다른 솔루션과 마찬가지로, 서버리스는 만병통치약이 아니기 때문에 기존 구성 요소를 모두 대체할 수는 없습니다. 서버리스를 사용하기로 결정하면 모든 장단점을 고려하여 비즈니스 및 기술 요구 사항을 면밀히 분석해야 합니다.
이번에는 마이크로서비스 아키텍처를 이야기할 때는 빠짐없이 나타나는 서버리스 아키텍처에 대해 살펴보았으며, 마이크로서비스 아키텍처를 처음 접하시는 분은 제가 이전에 쓴 '마이크로서비스 아키텍처 (MSA)'를 읽어 보시면 도움이 될 것 같습니다.
https://brunch.co.kr/magazine/mdstory
마켓디자이너스 매거진 구독해주시면 업데이트 내용을 더욱 빨리 만나실 수 있습니다.