서버리스(Serverless)
와서버 기반(Server-based)
은 애플리케이션을 개발하고 배포하는 데 사용되는 두 가지 다른 컴퓨팅 모델이다.
서버리스는 애플리케이션을 개발하고 배포하는 데 필요한 서버 관리 부담을 최소화하는 컴퓨팅 모델이다.
개발자는 서버 운영, 확장, 유지 관리 등에 대한 걱정 없이 코드를 작성하고 실행할 수 있다.
서버리스 플랫폼에서는 함수를 이벤트에 연결하여 필요한 경우에만 코드가 실행되며, 실행이 끝나면 자동으로 종료된다.
대표적인 서버리스 플랫폼으로는 AWS Lambda, Azure Functions, Google Cloud Functions 등이 있다.
서버 기반은 전통적인 방식으로 서버를 사용하여 애플리케이션을 개발하고 운영하는 모델이다.
개발자는 서버를 프로비저닝하고 구성하고, 애플리케이션을 배포하고 운영하는 모든 책임을 진다.
서버를 유지 관리하고 확장하는 데 필요한 비용과 시간이 더 많이 소요될 수 있다.
전통적인 웹 호스팅, 가상 머신을 사용한 클라우드 호스팅 등이 서버 기반의 예시이다.
서버리스와 서버 기반은 애플리케이션 개발과 배포에 사용되는 컴퓨팅 모델의 차이를 나타낸다.서버리스는 관리 부담을 줄이고 개발 생산성을 향상시키는 데 중점을 두며, 서버 기반은 전통적인 방식으로 서버를 사용하여 애플리케이션을 개발하고 운영하는 데 집중한다.
비용 절감
: 서버리스에서는 실행한 코드에 대해서만 요금을 지불하므로 트래픽이 적은 경우에는 저렴하다.
확장성
: 서버리스 플랫폼은 자동으로 확장되므로 대규모 트래픽 처리에 용이하다.
운영의 간소화
: 서버리스 플랫폼은 인프라 관리를 제거하기 때문에 개발자는 코드에 집중할수 있다.
빠른 배포
: 서버리스 애플리케이션은 코드를 업로드하고 실행하기만 하면 되므로 배포가 빠르다.
제한된 실행 환경
: 서버리스 환경에서는 일부 제약이 있을 수 있으며, 실행 시간이나 메모리 크기 등이 제한될 수 있다.
디버깅 어려움
: 로컬 환경에서 디버깅하기 어려울 수 있으며, 특히 이벤트 기반의 함수에서는 테스트 하기가 어려울 수 있다.
Cold Start 지연
: 함수가 처음 호출될 때 초기화 시간이 소요될 수 있어서 Cold Start라는 현상이 발생할 수 있다.
유연성
: 서버 기반 애플리케이션에서는 서버를 직접 제어할 수 있으므로 실행 환경을 원하는 대로 구성할 수 있다.
디버깅 용이성
: 로컬 환경에서 애플리케이션을 실행하고 디버깅하기 쉽다.
커스터마이징 가능
: 서버 기반 애플리케이션에서는 모든 레벨의 설정과 성능을 직접 제어할수 있다.
운영 및 관리 복잡성
: 서버 기반 애플리케이션에서는 서버 운영 및 유지 관리에 대한 책임이 있으며, 이는 추가 비용과 시간이 필요하다.
확장성 제한
: 서버 기반 애플리케이션은 수동으로 서버를 확장하거나 스케일링해야 하므로 트래픽 증가에 유연하게 대응하기 어려울 수 있다.
서버리스 함수를 사용하여 이미지 업로드 이벤트에 반응하여 이미지를 자동으로 리사이징하는 서비스를 구현할 수 있다.
사용자가 이미지를 업로드하면 이벤트가 발생하고, AWS Lambda와 같은 서버리스 플랫폼에서 실행되는 함수가 해당 이미지를 리사이징하고 저장할 수 있다.
서버리스를 사용하여 웹 애플리케이션의 API 앤드포인트를 구축할 수 있다.
예를 들어, 사용자가 웹 페이지에서 어떤 작업을 요청하면 해당 요청을 처리하기 위한 함수를 서버리스로 작성하고 배포할 수 있다.
주기적으로 실행되거나 특정 이벤트에 반응하여 백그라운드 작업을 처리하는 데 서버리스를 사용할수 이다.
예를 들어, 매일 밤에 데이터베이스를 백업하거나 이메일을 보내는 작업을 서버리스 함수로 스케줄링할 수 있다.
서버 기반으로 웹 애플리케이션을 호스팅할 때는 서버를 프로비저닝하고 웹 서버(예: Apache, Nginx)와 어플리케이션 서버(예: Node.js, Django)를 설치하여 구성한다.
사용자의 웹 요청을 받아들이고 해당 요청에 대한 응답을 생성하는 서버가 항상 실행된다.
서버 기반 애플리케이션에서는 데이터베이스 서버를 프로비저닝하고 설정해야 한다.
데이터베이스 서버를 운영하고 백업하며, 데이터베이스에 대한 모든 관리 작업을 수행 해야 한다.
실시간으로 대량의 데이터를 처리해야 하는 경우, 서버 기반의 애플리케이션을 사용한다.
이러한 애플리케이션에서는 서버가 항상 실행되어 있었야 하며, 대량의 데이터를 처리할 수 있는 리소스가 필요하다.
서버리스
는 이벤트 기반의 작업에 최적화되어 있고, 함수가 필요한 시점에만 실행된다.
서버 기반
은 항상 실행되는 서버가 필요하며, 지속적으로 리소스를 사용한다.