들어가며
최근 서버리스(serverless) 관련한 서비스나 클라우드에 대해서 종종 확인하던중 서버리스의 정확한 뜻이 무엇이며 어떻게 동작하며 또 서비스로는 어떤것들이 있는지에 대해서 찾아보며 정리한 내용을 공유 드리려 이번 포스팅을 작성했습니다.
서버리스(serverless)란?
서버리스 컴퓨팅은 웹 개발의 새로운 전문 용어입니다. 하지만 이것이 실제로 의미하는 바가 정말로 서버가 없다는 의미일까요…? 그렇진 않습니다. 이름에도 불구하고 "서버리스"는 서버가 정말 없다는 의미는 아닙니다. 대신 이는 개발자가 이에 대해 걱정할 필요가 없음을 의미하는것 같습니다 클라우드 제공업체는 인프라, 확장, 유지 관리 등의 모든 핵심적인 세부 사항을 처리하므로 개발자는 코드 작성하는 것에만 집중 하여도 웹앱 제작 등 자신이 가장 잘하는 일에 집중할 수 있습니다.
서버리스(serverless) 서비스
몇몇 유명 클라우드 제공업체는 쉽게 시작할 수 있는 서버리스 서비스를 제공합니다. 여기 몇가지 서비스들을 소개하겠습니다.
- AWS Lambda: 다양한 트리거에 응답하여 실행할 코드를 작성할 수 있는 Amazon의 서버리스 플랫폼입니다. 온라인 상점이 있고 누군가 구매할 때마다 이메일을 보내고 싶다고 가정한다면 이를 자동으로 수행하도록 Lambda 함수를 설정할 수 있습니다. 또한 스토리지용 S3, 데이터베이스용 DynamoDB와 같은 다른 AWS 서비스와도 함께 작동합니다.
- Google Cloud Functions: Google은 AWS Lambda와 유사한 자체 서버리스 플랫폼을 보유하고 있습니다. Google Cloud Storage 또는 Pub/Sub와 같은 Google Cloud 서비스를 사용하는 경우 Cloud Functions를 쉽게 트리거하여 특정 작업을 실행할 수 있습니다. 예를 들어 Google Cloud Storage에 이미지가 업로드될 때 이를 처리하는 데 사용할 수 있습니다.
- Azure Functions: Microsoft의 Azure Functions는 다른 기능과 유사하게 작동하지만 Microsoft Azure 서비스와 통합되어 있습니다. Azure에서 앱을 구축하는 경우 이는 훌륭한 옵션입니다. Azure Functions를 사용하면 작업을 자동화하거나 함께 작동하는 앱의 작고 독립적인 부분인 마이크로서비스를 구축할 수 있습니다.
- Firebase: Firebase는 구글에서 만든 서비스입니다. 웹 앱 개발에 있어서 필요한 백엔드 서비스를 주로 제공합니다.
서버리스(serverless) 아키텍처
전통적인 웹앱 개발에서는 항상 서버에 대해 생각해봐야 합니다. 이를 설정하고 트래픽을 처리할 수 있는 충분한 성능이 있는지 확인하고, 원활하게 실행되도록 구상해봐야 합니다. 이는 특히 서비스에 갑자기 얘기치 않게 사용자가 많이 유입되는 경우 골치 아픈 일이 될 수 있습니다.
서버리스는 이에 대해서 더 유연하게 대응할수 있습니다. 서버리스를 사용하면 코드가 클라우드에서 실행되지만 클라우드를 관리할 필요는 없습니다. 대신, "함수"라는 작은 코드 덩어리를 작성하면 클라우드 공급자가 나머지를 처리합니다. 이러한 기능은 누군가 웹사이트를 방문하거나, 파일을 업로드하거나, 데이터베이스를 변경하는 등의 특정 이벤트에 의해 트리거되어 필요할 때만 실행됩니다.
-
클라이언트(웹 및 모바일)
이는 사용자가 애플리케이션과 상호 작용하는 프런트 엔드 인터페이스입니다. 웹 클라이언트(예: 웹 사이트) 또는 모바일 클라이언트(예: 스마트폰의 앱)일 수 있습니다.
-
인증 서비스
클라이언트가 서버리스 애플리케이션에 액세스하려면 먼저 인증이 필요할 수 있습니다. 이 서비스는 일반적으로 사용자 이름과 비밀번호로 로그인하거나 SSO(Single Sign-On) 서비스를 사용하여 로그인하는 등의 프로세스를 통해 사용자의 신원을 확인합니다.
-
API 게이트웨이
API 게이트웨이는 클라이언트와 서버리스 기능 간의 브리지 역할을 합니다. 클라이언트의 HTTP 요청을 적절한 기능으로 라우팅하고, 인증을 처리하며, 속도 제한 및 로깅과 같은 기타 작업을 관리합니다. 이는 서버리스 아키텍처의 중요한 부분으로 안전하고 체계적인 통신을 보장합니다.
-
서버리스 기능(함수 1, 함수 2, 함수 3)
이러한 기능은 서버리스 아키텍처의 핵심입니다. 각 함수는 특정 작업을 수행하도록 설계된 작은 코드 조각입니다. 함수는 일반적으로 상태 비저장이며 특정 이벤트나 트리거에 대한 응답으로 실행됩니다. 다이어그램에 표시된 기능은 각각 고유한 책임을 처리하는 애플리케이션의 다양한 부분을 나타낼 수 있습니다.
-
외부 데이터베이스 및 클라우드 데이터베이스
서버리스 아키텍처에서는 데이터 스토리지가 기능과 분리되는 경우가 많습니다. 외부 데이터베이스는 다양한 기능이나 클라이언트가 액세스해야 하는 영구 데이터를 저장하는 데 사용할 수 있습니다. 클라우드 데이터베이스는 서버리스 기능과 통합되는 확장 가능한 스토리지 솔루션을 제공합니다. 다이어그램에서 외부 데이터베이스는 클라이언트가 액세스할 수 있는 반면 클라우드 데이터베이스는 서버리스 기능 중 하나에 연결되어 있습니다.
서버리스(serverless)의 종류
-
Baas(Backend as a Service)
BaaS 시스템은 웹 앱 개발에 있어서 필요한 다양한기능들 (데이터베이스, 소셜서비스 연동, 파일시스템 등)을 API로 제공해 줌으로서, 개발자들이 서버 개발을 하지 않고서도 필요한 기능을 쉽고 빠르게 구현 할 수 있게 해주고, 비용은 사용 한 만큼 나가는 원리입니다. 즉, 클라우드 공급자가 백엔드 개발 환경까지 제공해 준다고 볼수 있습니다. BaaS를 사용함에 있어서, 가장 큰 장점은개발 시간의 단축, 서버 확장 작업의 불필요함에서 찾을 수 있습니다. 백엔드에 대해서 깊은 지식이 별로 없더라도 개발이 가능할 수 있도록 도움을 줄수 있으며 여기에 해당하는 대표적인 서비스 예시로 Firebase와 최근 떠오르고 있는 Supabase를 생각해 볼 수 있습니다.
-
FaaS(Function as a Service)
FaaS는 Function as a Server의 약자로 말 그대로 "함수를 서비스로 제공한다"라는 의미입니다. 여기서함수가 뜻하는 바는 프로그래밍 수준에서 Function 혹은 메소드등을 의미합니다. 사용자는 Rest API와 같은 HTTP 요청을 통해 함수를 호출하고 원하는 파라미터를 전달하여 함수가 리턴 값이 있다면 리턴 값을 받거나 혹은 함수의 동작 시작 이벤트를 발생시킬 수 있습니다. 만약 데이터베이스의 읽기 / 쓰기등을 위한 함수 구문을 클라우드에 업로드해둔다면 어느 프로그램에서도 단순히 함수 호출을 통해 데이터베이스로부터 입출력이 가능할 수 있습니다 따라서 개발자는 프로그래밍 로직에만 집중 할 수 있도록 하는것이 바로 FaaS와 서버리스의 주요한 개념입니다 위의(AWS Lamda, Google Cloud Functions, Azure Functions)서비스 등이 해당합니다.
어떻게 사용하면 좋을까?
서버리스는 스타트업부터 대기업까지 모두를 위한 것입니다. 서버를 관리하지 않고 확장 가능한 웹앱을 구축하려는 모든 사람에게 적합합니다. 서버리스가 적합한 상황은 다음과 같습니다.
- 스타트업: 새로운 앱을 구축하고 빠르게 시장에 출시하는 데 집중하고 싶다면 서버리스가 좋은 선택입니다. 서버 관리 걱정 없이 코딩에만 집중할 수 있습니다.
- 이벤트 기반 애플리케이션: 앱이 사용자 상호 작용이나 데이터 변경과 같은 특정 이벤트에 응답해야 하는 경우 서버리스가 이상적입니다. 필요할 때 즉시 행동에 옮길 준비가 되어 있는 도우미 팀을 갖는 것과 같습니다.
- 마이크로서비스: 함께 작동하는 여러 구성 요소로 앱을 구축하는 경우 서버리스를 사용하면 추가 오버헤드 없이 이러한 부분을 만들 수 있습니다.
서버리스의 장점과 단점
장점:
- 비용 효율적: 사용한 컴퓨팅 시간에 대해서만 비용을 지불합니다. 유휴 상태로 있을 수 있는 서버를 유지 관리할 필요가 없습니다.
- 확장성: 서버리스는 자동으로 확장됩니다. 트래픽이 갑자기 급증하면 클라우드 공급자가 이를 처리합니다.
- 낮은 유지 관리: 서버 유지 관리는 잊어버리세요. 클라우드 공급자는 모든 어려운 작업을 수행합니다.
- 유연성: 개발자는 서버리스 플랫폼을 통해 모든 언어나 프레임워크로 코드를 작성할 수 있습니다.
단점:
- 콜드 스타트: 서버가 항시 요청에 대기하고 있는게 아니라 기능을 한동안 사용하지 않은 경우 시작하는 데 시간이 좀 걸려 속도가 느려질 수 있습니다.
- 공급업체 종속: 서버리스는 특정 클라우드 제공업체와 연결되어 있으므로 나중에 제공업체를 전환하기 어려울 수 있습니다.
- 제한된 실행 시간: 서버리스 기능에는 실행 시간에 대한 시간 제한이 있으므로 긴 프로세스에는 적합하지 않습니다.
- 디버깅: 서버리스 인스턴스는 서버리스 인스턴스가 스핀업될 때마다 새 버전을 만들기 때문에 서버리스 함수를 디버깅하고 수정하는 데 필요한 데이터를 수집하기가 더 어렵습니다.
마치며
서버리스는 기존의 웹 개발에 대한 우리들의 생각을 바꿔가고 있다고 생각합니다.
이를 통해 개발자는 인프라에 대한 걱정 없이 확장 가능하고 비용에 효과적인 웹 앱을 더 쉽게 만들 수 있습니다. 서버리스 기술이 발전함에 따라 훨씬 더 혁신적이고 영리한 서비스를 보게 될 가능성이 높습니다.
앞으로 서버리스는 웹 앱 구축을 위한 주된 접근 방식이 될 수 있으며, 특히 관리가 아닌 생성에 집중하려는 사람들에게는 더욱 그렇다고 생각됩니다.
서버리스 아키텍처는 클라우드 컴퓨팅에서 개발자와 기업에 중요한 발전 방향 중 하나라고 생각합니다 비용, 운영,확장성 등의 장점을 통해 애플리케이션 개발과 운영을 변화시킬 수 있습니다 하지만 장점만 존재 하는게 아닌 단점 또한 분명 존재하기에 이를 극복하기 위한 충분한 전략을 가지고 서비스를 계획하는것이 중요하지 않을까 생각합니다.
읽어주셔서 감사합니다.