라떼는 말이야….
웹서비스 개발을 배울때 서버를 설정하고, HW를 구축하는 것을 배우던 시대가 있었는데…
서버의 일부 공간을 빌려서 인스턴스를 사용하던 방식에서 진일보하여, 이제는 Serverless 방식의 서비스가 대세 이네요. Serverless의 컨셉을 알아보고, 공부를 시작해 봅시다.
AWS 에서 정의된 클라우드 컴퓨팅 내용
클라우드 컴퓨팅은 IT 리소스를 인터넷을 통해서 온디맨드(수요에 반응함)로 제공하고 사용한 만큼만 비용을 지불하는것을 말합니다.

Serverless 뭔지요?

운영하는 서버 없이, 호출될때 기능을 처리하고 응답하는 서비스 형태 입니다.

  • AWS : AWS Lambda
  • MS Azure : Azure Functions
  • Google Cloud Platform : Cloud Functions

고전 방식

기존 웹서비스를 진행 할때의 방식은 Apache, Tomcat과 같이 웹서버를 HW웨어에 운영하고, 해당 서버에 맞는 Server Side 언어로 서비스를 개발 했었죠.
서버 관리자, 운영자 등이 존재 했었고, 서버실도 있는 곳도 있고, 서버를 24시간 운영하기 위해서 IDC란 곳에 서버를 파킹(돈내고 서버를 주차) 했었습니다.

Cloud 서비스 출현(AWS, Zure, Google 등)

간단한 서비스를 개발하는데, 고전 방식은 너무 많은 범위의 지식이 필요하고, 때에 따라서는 사람도 많이 필요 했었죠. Cafe24와 같은 호스팅 업체들은 돈에 따라서 서버를 함께 공유 사용하는 방식이지만,그래도 서버를 설정하고 개발하는데 약간은 전문지식이 필요했습니다.
AWS, Zure, Google Cloud Platoform 을 사욯해보면, 버튼 몇번에 서버가 만들어지기도, 없어지기도 하며, 특히 서울에 만들수도 있고, 미국, 브라질 등 어디에 구축할지를 Selectbox로 간단히 선택하면 됩니다.
단지 등록된 신용카드에 비용만 지불하면 되는 방식으로 간단히 운영이 가능합니다.
이전 서버관리자의 역할을 AWS와 같은 서비스가 대신 해주는 것으로 보시면 됩니다.
실시간으로 언제 어디서나 간단하게 서버를 만들고, 접속할 수있게 해주는 서비스로 보시면 됩니다.

Serverless 를 왜 쓰는지?

직접 서버를 운영하는 것에 대비 Cloud 서비스는 편리하지만, 비용적 부담이 존재합니다.
만약 제가 제공하는 서비스가 특정 시간에만 사용되는 시스템일 경우, 특정 시간 서비스를 위해서 24시간 서버를 빌려서 대기하게 됩니다. 이런 경우 비용 낭비가 생길수 있습니다. 물론 Cloud는 미사용시간에 서버의 성능을 최소화(Scale Up/Down, Scale In/Out) 하는 기능이 있지만, 그래도 최소한의 서버가 고객을 대기해야되는 상황 입니다.

Serverless 이런 문제를 해결하고자 하는 방향을 가지고 있습니다. 내 서비스 기능의 code를 함수처럼 일정 룰에 맞게 작성하여, Cloud 서비스 업체한테 사전에 등록해 놓는 것입니다. 서비스 요청이 오면, Cloud업체에서 사전에 등록한 기능을 실행해 주는 것 입니다.
저는 더 이상 24시간 운영되는 서버가 없어도 되지요.

가격과 사용 참고를 AWS에서는 잘 설명이 되어 있습니다.

언제나 동전에 양면 처럼 장점만 있는 것은 아닙니다.
단점으로는

  • 플랫폼에 의존성이 일부 있습니다.
    AWS를 사용하여 코드를 작성하면, Azure로 이사가려면, 코드를 100%재활용이 안됩니다. 물론 변환해주는 일부 플랫폼이 있긴하자만, 완벽하진 않습니다.)
  • 함수가 호출될때, 상황에 따라서는 약간의 기동시간이 필요합니다. – 콜드 스타트(Clod Starts) : 함수가 기동하기 위해서 시간이 필요한 상황… – 웜 스타트(Warm Start) : 한번 호출후 일정시간은 대기하는데, 대기중에 재호출되는 상황…
  • 상태 관리의 어려움 존재
    Stateless Function으로 A함수, B함수가 동일 사용자가 호출하여도 A와 B는 동일 인인지 확인되지 않습니다. 매번 새로운 컨테이너를 통해 호출하는 컨셉으로 상태 관리를 하는 코드 형태로 작성이 되어야 합니다.

Serverless 개발 프레임워크

Serverless는 다양한 언어로 개발이 가능합니다.
적절한 언어를 선택하셔서 개발하면 됩니다.

개발은 Cloud 서비스 제공가 제공 하는 방식에 따라서 다르지만, 일반적으로 기존 방식과 유사하게 개발할 수 있도록 지원해주는 3rd Party Framwork library가 존재합니다. 예를들면 Node.js로 AWS를 개발할때, serverless는 매우 편리하고 빠르게 개발 할 수 있게 지원해주는 npm library 입니다.

 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v2.52.1
 -------'

Serverless