Serverless Deployment
Serverless deployment는 마이크로서비스 아키텍처(MSA)의 배포 패턴 중 하나로, 서버 관리의 부담을 줄이고 개발자가 애플리케이션 로직에 집중할 수 있게 해주는 접근 방식이다.
Serverless deployment는 개발자가 서버를 관리할 필요가 없는 클라우드 컴퓨팅 모델 중 하나이다. 즉, 서버 관리를 개발자가 아닌 클라우드 제공자가 알아서 해주는 것이다. 이 방식에서는 개발자가 코드만 작성하고 배포하면, 클라우드 제공업체가 필요에 따라 자동으로 인프라를 확장하고 관리한다.
결론적으로, Serverless deployment는 개발자가 인프라 관리에서 벗어나 비즈니스 로직에 집중할 수 있게 해주는 혁신적인 배포 방식이다. 하지만 모든 상황에 적합한 것은 아니므로, 프로젝트의 특성과 요구사항을 고려하여 적절히 활용해야 한다.
주요 특징
- 자동 확장성: 평소에는 5명의 사용자가 사용하는 앱이 있다고 가정하자. 해당 앱의 사용자가 어느 날 1000명이 된다면 서버리스는 1000개의 트래픽을 감당할 수 있는 인스턴스를 동적으로 증가시켜 요청을 처리할 수 있다.
- 비용 효율성: 리소스를 사용한 만큼만 비용으로 청구하기 때문에, 경제적으로 유리하다. 유휴 상태의 서버에 대한 비용을 지불할 필요가 없다.
- 개발 집중: 개발자는 백엔드 서버의 구매, 프로비저닝, 관리에 대해 걱정할 필요가 없다. 클라우드 제공업체가 서버 인프라에 대한 프로비저닝, 유지 관리, 스케일링 등의 일상적인 작업을 처리하며, 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 된다.
- 이벤트 기반 실행: 서버리스 애플리케이션은 배포되고 나면 필요에 따라 자동으로 스케일 업되거나 스케일 다운된다. 퍼블릭 클라우드 제공업체의 서버리스 오퍼링은 일반적으로 이벤트 기반 실행 모델을 통해 온디맨드로 미터링된다. 그러므로 서버리스 기능이 유휴 상태일 때는 아무런 비용도 들지 않는다.
장점
- 빠른 개발 및 배포: 서버리스는 개발자가 프로비저닝하기 위한 작업에 필요한 인프라를 명시적으로 설명할 필요를 줄여줌으로써 DevOps 도입을 지원한다. 제3사 BaaS 오퍼링의 모든 구성 요소를 통합해 애플리케이션 개발을 더욱 간소화할 수도 있다.
- 운영 비용 절감: 서버리스 모델에서 운영 비용이 낮아지는 이유는 항상 자체 서버를 실행하고 관리하는 대신 필요한 만큼 클라우드 기반 컴퓨팅 시간에 대해 비용을 지불하기 때문이다.
- 글로벌 확장 용이성: Lambda@Edge를 통해 글로벌 애플리케이션을 만들 수 있다. CloudFront 요청과 응답을 변경하기 위해 사용한다. 즉, 뷰어 요청을 오리진으로 보내지 않고도 viewer request, viewer response 람다 함수를 통해 뷰어에게 응답을 줄 수 있다.
단점
- 콜드 스타트: 서버리스 함수가 처음 호출될 때 초기화 시간이 소요될 수 있어서 Cold Start라는 현상이 발생할 수 있다. 이는 응답 시간에 영향을 줄 수 있다.
- 제한된 실행 환경: 서버리스 환경에서는 일부 제약이 있을 수 있으며, 실행 시간이나 메모리 크기 등이 제한될 수 있다.
- 디버깅 어려움: 로컬 환경에서 디버깅하기 어려울 수 있으며, 특히 이벤트 기반의 함수에서는 테스트 하기가 어려울 수 있다.
주요 서버리스 플랫폼
- AWS Lambda
- Microsoft Azure Functions
- Google Cloud Functions
- IBM Cloud Functions
- Cloudflare Workers
이러한 플랫폼들은 각각의 특징과 장단점을 가지고 있으며, 개발자는 프로젝트의 요구사항에 따라 적절한 플랫폼을 선택할 수 있다.
사용 예시
예를 들어, AWS Lambda를 사용하여 서버리스 배포를 진행하려면 다음과 같은 단계를 따른다:
- 코드 작성: Lambda 함수로 실행할 코드를 작성한다.
- 패키징: 코드를 ZIP 파일로 묶는다.
- 업로드: AWS Lambda 콘솔이나 CLI를 통해 ZIP 파일을 업로드한다.
- 트리거 설정: HTTP 요청을 처리하려면 API Gateway를 설정하여 Lambda 함수를 트리거한다.