Serverless가 뭔가요?
Serverless는 영어해석대로 하면 '서버가 없다'라는 뜻으로 알아들을 수 있다. 그러나 서버가 없다는 뜻이 아니고 개발자들이 서버 관리에 대한 걱정없이 애플리케이션 개발에 더 집중할 수 있도록 하는 모델을 의미한다.
Serverless는 서버의 구매, 배포, 유지 관리와 같은 복잡한 관리작업을 클라우드 제공업체가 대신 처리하게 해서 개발자가 개발에만 집중할 수 있게 한다. 대표적인 서버리스 서비스로는 AWS Lambda, Azure Functions, Goole Cloud Funtions, planet scale 등이 있다.
Serverless의 장단점
서버리스 모델에서는 실제로 코드가 실행되는 시간에만 비용이 발생하고, 사용하지 않을 때는 발생하지 않는다. 또, 애플리케이션의 사용량에 따라 자동으로 리소스가 조정되는 오토 스케일링 기능이 있다. 트래픽이 증가하면 자동으로 처리 능력이 확장되고, 트래픽이 감소하면 축소된다.
또, 서버 관리에 대한 걱정없이 코드를 작성하고 배포할 수 있으며, 클라우드 제공업체가 서버 유지 관리를 담당한다.
단점으로는 함수가 처음 호출될 때 초기화에 시간이 걸려서 응답 속도가 느려질 수 있다. 또, 실행 시간이나 메모리 크기, 동시 실행 개수 등에 제한이 있을 수 있으며, 전통적인 서버 기반 환경에 비해 디버깅과 모니터링이 더 복잡할 수 있다.
그래서 서버리스는 빠르게 개발해야 하고, 유지보수 및 스케일링에 대한 부담을 줄이고 싶은 프로젝트에 적합하다. 그리고 모든 애플리케이션에 서버리스가 최적의 솔루션이 되는 것은 아니기 때문에, 프로젝트의 요구 사항 및 제한 사항을 고려하여 선택하는 것이 좋다.
직접 사용해본 서버리스 서비스
내가 직접 사용해본 서버리스 서비스로 planet scale이 있다. 플래닛스케일은 유튜브에서 개발된 vitess를 기반으로 한 서버리스 서비스인데, 간편한 인터페이스와 사용자가 명확히 파악할 수 있는 관리도구가 있어 처음 사용한 개발자도 쉽게 서비스를 이용할 수 있다.
참고로 vitess는 서버리스 아키텍쳐를 지원하는 오픈소스 프로젝트인데, 대규모 웹서비스를 위한 MySQL 샤딩(sharding) 시스템이다. 수십억 개의 행과 높은 트래픽을 처리할 수 있는 대규모 DB 시스템을 구축, 관리, 운영하는 데 도움을 주기 위해 설계되었다.
vitess는 아래와 같은 특징이 있다.
- 샤딩: 데이터를 여러 DB로 분산시켜 관리할 수 있게 해준다.
- 레플리케이션 관리: 데이터의 복제본을 자동으로 관리한다.
- 쿼리 최적화: SQL 쿼리를 분석하고 최적화한다.
- 서버리스 아키텍쳐 지원: 클라우드 환경에서의 서버리스 아키텍쳐를 지원한다.
레플리케이션(Replication): 데이터 저장과 백업하는 방법과 관련이 있는 데이터를 호스트 컴퓨터에서 다른 컴퓨터로 복사하는 것이다. 컴퓨터 네트워크 상태에서는 데이터 저장을 할 수 있게 하는데 로컬 데이터 물리적 기억 장치와는 완전히 구분된다.
레플리케이션은 데이터베이스 관리 시스템(RDBMS)에서 추가적으로 제공하거나 여러 대의 데이터베이스 서버의 부하를 맞추어 줄 용도로 제공한다. (참조: 위키백과)
아직 대규모 웹서비스를 만들어보지 않아 실제로 서버리스의 기능을 온전히 경험해보지는 못했지만, 개발하면서 나중에 서비스가 커져도 서버리스의 기능으로 복잡한 DB의 확장 과정을 겪지 않아도 된다는 점 때문에 온전히 현재의 개발에만 집중할 수 있었다. 또한, Prisma와의 조합으로 편리하게 db 내의 브랜치와 기능별 api를 구현하며 서버리스 서비스를 더욱 편리하게 사용할 수 있었다.
