Serverless란?

Serverless란 무엇일까?

서버가 없다고..? 이게 무슨소리인가 매번 궁금했었다. 스터디 발표를 준비해야했기에 이번 기회에 AWS lambda 서비스로 serverless application을 만들어보면서 serverless가 무엇인지 알아보도록 하자.


Serverless란?

Serverless is a cloud-native development model that allows developers to build and run applications without having to manage servers.

쉽게 말하자면 진짜 서버가 없는게 아니라 “개발자가 서버를 굳이 직접 관리할 필요가 없이” 어플리케이션을 구축하고 실행할 수 있는 cloud-native 개발 모델이라는 것이다.

그러니깐 내가 하고 있던 오해는 바로

Server + less = 서버 + 없는 = 서버가 없는…?

이었던 것이다. 하지만 당연하게도 이건 틀린 말이고 위 글을 읽었다면 다음과 같이 이해할 수 있을 것 같다.

server + less = 서버 + 없는 = 서버를 ‘관리할’ 필요가 없는

이렇게 첫 걸음을 땔 수 있을 것 같다.


Why? 왜 쓰는데?

아니 그러면 기존에 서버에 코드 빌드 잘해서 올려놓고 잘만 쓰고 있었는데 왜 갑자기 serverless? 라는 생각이 들었다. 이건 역사의 흐름을 보면서 serverless가 등장한 이유를 알면서 이해를 할 수 있었다.


History

과거에 우리는 서버를 어떻게 운영을 했는가?

라는 질문으로 시작할 수 있겠다. (얼마전 면접 때 MSA 아키텍처가 왜 등장했는지에 대한 질문을 받았을 때 개발의 역사를 간략하게 설명하고, 과거에 불편했던 점을 개선하기 위해서 이러한 아키텍처 설계가 등장했다! 라는 식으로 말했을 때 면접관분들께서 매우 만족하셨던 기억이 있다. 어떤 기술에 대해 공부할 때는 ‘왜 그 기술이 등장하였는가?’를 항상 생각해보는 자세를 가지는게 좋다고 생각한다.)


과거에 우리는 on-premise 방식으로 서버를 운영하였다. 이러한 서버를 구축하기 위해서는 여러 대의 서버 컴퓨터를 놓을 공간의 확보와 동시에 scale-up, scale-out을 하기 위해서는 직접 컴퓨터에 메모리를 더 추가하거나 컴퓨터 한 대를 옆에 추가하는 작업 또한 필요했다. 따라서 직접 하드웨어/소프트웨어 자원을 관리했어야 했다.

그러나 AWS와 같은 클라우드 컴퓨팅 사업을 하는 기업이 나타나면서 다음과 같이 변했다.

컴퓨터? 원격으로 쓰기만 해! 하드웨어는 우리가 관리해줄게!

일정 비용만 지불하면 제공하는 클라우드 서버를 자유롭게 사용이 가능하게 된 것이다.(ex - EC2) 하지만 하드웨어 관리는 신경 쓸 필요가 없어졌으나 여전히 소프트웨어는 우리가 관리를 해줘야 한다. 예를 들어서 API서버를 구했다면, 해당 서버에 우리가 원하는 배포환경과 같은 소프트웨어적인 설정을 해줘야하기 때문이다. 그 외에도 보안, 데이터 백업, 소프트웨어 업데이트 등등 신경써줘야할 것들이 많다.

그래서! serverless가 등장한 것이다.

scaling, update, 서버 관리? 내가 할게! 기능만 구현해!

인프라적인 부분에 대해 어느정도 신경을 덜 써도 되기 때문에 개발에 더 집중할 수 있게 될수도 있다. 이러한 흐름에 의해 변동성이 클 수 있는 현대적인 어플리케이션에 대해서 변화하는 상황에 맞춰 자동으로 서버를 늘려주고 사용하지 않을 때에는 비용이 지불되지 않는 aws lambda와 같은 서비스가 등장하게 된 것이다.


단점

오… 그러면 serverless가 무조건 좋네!! 저거 써야겠다!

라고 생각한다면 오산이다. 다음과 같은 단점들이 존재하는 것을 보고 본인의 어플리케이션이 serverless환경에 적합한지 판단을 한 후에 써야한다고 생각하기 때문이다.

  1. Cold start

    기본적으로 aws lambda와 같은 serverless 서비스는 event driven architecture 이다. 따라서 사용자의 요청이 없으면 평소에는 잠들어 있는데, 여기서 요청 이벤트가 들어오게 될 때 24시간 대기하고 있는 EC2서버보다는 조금 더 긴 시간이 걸릴 수 있다는 것이다.

    필요할 때만 쓸 수 있다는 장점이 반대로 단점이 될 수 있다는 것이다.

  2. 클라우드 서버 제공 측에 대한 의존성

    서버의 모든 관리를 제공 측에게 위임했기에 해당 플랫폼에 대해 의존성이 커지게 된다는 것이다. 다른 클라우드 서버나 serverless 플랫폼으로의 마이그레이션이 힘들어질 수 있다는 것이다.

따라서 지금 나와 같이 서버환경설정에 신경을 덜 쓰고 개발에만 집중할 수 있는 토이프로젝트의 경우에 serverless로 어플리케이션을 구성하면 좋을 수 있다고 생각했다.


Next…

여기까지 간단하게 serverless에 대해 알아보았고 다음 포스팅으로는 aws lambda 서비스를 사용하여 직접 나만의 어플리케이션을 만들어보도록 하자.


Reference

What is serverless - Red Hat

Serverless - Nomad coder(Youtube)