서버리스 애플리케이션 1탄! 개념편.


서버리스 엔지니어링이란?

: 개발자가 서버 유지 관리에 대한 부담 없이 코드를 작성하고 인프라를 배포할 수 있도록 해주는 새로운 엔지니어링 도메인.

서버 작업 종료 후, 그리고 서버가 다음 작업을 기다리는 대기 시간 -> 리소스, 서버는 대기 상태 -> 인프라의 비효율적 운영 유발

기업 IT환경이 클라우드 기반으로 바뀌면서 시스템 확장의 신속성과 운영 효율성이 더욱 높아졌다. 기업들은 클라우드 서비스를 활용해 Saas(Software as a service) 어플리케이션을 만들어 고객에게 제공할 수 있게 되었는데, Saas 어플리케이션을 보다 효율적으로 구축하고 운영할 수 있도록 돕는 서버리스 아키텍처가 출현하면서 많은 서비스들이 서버리스로 옮겨지는 추세를 보이고 있다.


서버리스 컴퓨팅이란?

: 서비스로서의 기능(Faas, Function as a Service)으로 알려진 서버리스 컴퓨팅은 클라우드 서비스 제공자가 기능 컨테이너 서비스로서의 플랫폼(Paas, Platform as a Service)의 시작과 종료를 보두 관리하는 클라우드 컴퓨팅 및 코드 수행 모델이다.
1) 서비스로서의 기능 : 클라우드에서 수행되는 개념을 갖고 있는 모든 서버리스 모델(코드 블록으로 구성, 기능과 연관된 트리거에 의해 수행)
2) 기능 컨테이너 : 말 그대로 기능이 컨테이너 안에서 띄워지고 실행된다는 것을 의미(컨테이너 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정 등 소프트웨어 실행에 필요한 모든 것을 포함하는 경량의 독립 실행형 소프트웨어)

컨테이너 이미지를 통해 코드, 실행 환경 등 기능을 단일 배포 패키지로 통합하여 원활한 수행을 지원.

기능의 시작 및 종료를 관리하는 방법 : 기능이 트리거 중 하나에 의해 호출될 때 마다 클라우드 서비스는 기능 실행을 위한 컨테이너를 띄운다.


  • Faas(Function as a Service) : 사용자가 쓸 기능을 함수 단위로 나누어 구현하고 서비스하는 형태
    • Event-Driven 아키텍처를 구현하는데 적합
    • 사용자가 원하는 기능을 미리 작성해놓고 특정 이벤트(API호출, HTTP 요청)에 의해 실행
    • 서버는 계속 대기하면서 이벤트를 기다리지 않고 이벤트가 발생할 때마다 실행
    • AWS의 Lambda, MS의 Azure Function, Google의 Google Cloud Function 이 해당
      (람다는 파이썬이나 자바스크립트와 같은 언어로 작은 함수를 작성해서 올리기만 하면 된다.)


  • Baas(Backend as a service) : 단일 웹페이지나 모바일 앱 기반의 서비스에서 필요한 서버 기능들을 사용하기 위해 이용(클라우드 서비스 공급자가 제공하는 서버 기능을 단순하게 이용)
    • 어플리케이션 개발 시 요구되는 복잡한 백엔드 기능들을 개발자가 직접 개발하지 않고 클라우드 공급자가 제공하는 서비스를 이용해 안정적으로 구현하는 것
    • 클라우드 데이터 서비스 Firebase, 클라우드 인증 서비스 Auth0 해당


  • 클라우드 서비스 공급자가 서버를 관리, 실행하며 요청이나 특정 이벤트가 있을 때 클라우드의 서버를 이용하거나 서비스 할 어플리케이션을 동작시키는 것
  • 이를 통해 개발자는 서버 관리에서 자유로워지며 구현해야할 기능에 더 집중할 수 있게된다.


서버리스 시스템

서버리스 시스템은 아래의 두 방법으로 일괄처리 할 수 있다.

  • 트리거에서 크론 설정

크론설정: 클라우드에서 서버리스 시스템은 모니터링을 설정할 수 있는데, 일반 크론 작업처럼 몇 분, 몇 시간에 한 번씩 동작하도록 설정할 수 있다.

(서버리스 개념도 일반 크론 작업과 비슷하다.)

AWS환경에서 Lambda는 크론과 비슷하게 직접 입력하는 실행 주기 설정을 통해 AWS CloudWatch에서 동작시킬 수 있다.

또한 서버리스 배치 아키텍처를 구현할 때 큐의 개념으로 서버리스 시스템을 활용할 수 있다.


서버리스의 장단점

  • 장점
    • 낮은 인프라 비용 : 이벤트가 발생할 때에만 서버를 실행할 수 있기 떄문.
    • 유지보수 필요성 감소 : 관리를 위한 지속적인 모니터링과 운영이 필요없음
    • 생산성 향상 : 서버 운영에 대한 개발자들의 부담이 사라짐.
  • 단점
    • 컨테이너 환경의 제어 문제 : 개발자들은 기능 수행을 위해 만들어진 컨테이너 환경에 대한 제어를 할 수 없다.
    • 컨테이너 모니터링 : 클라우드 서비스 제공자가 제공한 기본 모니터링 도구 이외에 다른 도구를 사용할 수 없어서 세부 모니터링이 불가능하다.
    • 보안 문제 : 보안이 보장되는 방법에 대한 제어가 없음


서버리스 세스템은 개발자가 시간제한을 걱정할 필요가 없는 대규모 컴퓨팅을 위해 분산 시스템으로 확장이 가능하다고 한다. 하지만 서버리스 시스템에서 분산시스템으로 확장할 때 고려해야할 점들이 있기 때문에 잘 확인해야할 듯 싶다.


2편에서 계속!