serverless가 뭔데?
서버리스란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델이다.
그럼 서버리스 모델에는 서버가 진짜 없어?
서버리스 모델에도 서버가 존재하긴 하지만, 애플리케이션 개발에서와 달리 추상화되어 있다. 클라우드 제공업체가 서버 인프라에 대한 프로비저닝, 유지 관리, 스케일링 등의 일상적인 작업을 처리하며, 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 된다.
돈은 어떻게 내면 되는데?
대부분 서버리스를 지원하는 클라우드 제공업체는 이벤트 기반 실행 모델을 사용해 요금을 측정하기 때문에 서버리스 기능이 유휴 상태일 때는 아무런 비용도 들지 않는다. 그리고 서버리스 애플리케이션은 배포되고 나면 필요에 따라 자동으로 스케일 업되거나 스케일 다운된다.
실제 서버를 사용했을 때 vs serverless
만약 내가 실제 서비스 용도의 웹 애플리케이션 하나를 만들었다고 가정하자.
개발 단계에서는 그냥 내 로컬 PC에서 서비스 해서 테스트까지 하니 문제없었다. 여기까지는 동일할 수 있다.
실제 서버를 사용할 때 (PC 제외)
- 서버의 하드웨어 스펙과 호환성, 수량까지 고려해야 함
a. 서버를 용도별로 나누어 쓸 건지, 하나의 전용 서버에 몰빵할 건지(appliance server)
b. 갑자기 서비스를 많이 쓰네? 서버 증설! 했다니 사용량 줄음 ㅠ
- 서버를 물리적으로 보관하고 관리할 공간과 환경
a. 서버가 많아지면 랙에 마운트해서 관리하는게 편하겠지요
- 서버의 물리적 보안과 논리적 보안(FW, WAF 등)을 신경써야 함.
서버의 문단속
- 긴급 상황 발생 시 대처 방안이 필요함
a. NIC bonding, 파워서플라이 이중화, 서버 Active-standby 이중화...
- 서버의 소프트웨어 유지보수
a. OS, DB 취약점 나와서 버전 올려야하네... -> 올렸는데 서비스 안되네 ㅎㅎ..
몇 가지 더 있겠지만 일단 이렇게 나열해 보았는데, 벌써 돈, 시간 깨지는 소리가 어마어마하다. 개인이 감당할 만한 사이즈가 아닐 뿐더러 개발 외적으로 신경써야 할 부분이 너무 많은 느낌이다.
serverless 모델을 적용할 때
- 일단 코드만 신경 쓰는 환경
a. 갑자기 사용량이 늘었어도 내가 허용한 만큼까지 스케일 업
b. 내 서비스 별로 안쓰는데? 그럼 돈 적게 내. (가성비)
- OS, DB 버전? 클라우드 제공업체가 알아서 관리함
- 보안장비? 보안설정? 클라우드 제공업체에서 설정함
개발자가 코드 외적으로 신경 써야 할 부분이 확실히 줄었다. 이제 각 장단점을 알아보자.
serverless 장단점
장점
- 개발자 생산성을 높인다.
- 서버 유지보수 업무 같은 개발 외적 부분을 줄여 개발에 더 집중할 수 있게 한다.
- 이벤트 기반 실행 모델을 사용해 사용량을 측정하기 때문에 적게 쓸 경우 비용 절감을 할 수 있다. (가성비)
- 설정한 가용량 만큼 확장이 용이하다.
- 빠른 배포 및 업데이트가 가능하다.
단점
- 벤더 종속성 문제로 제공업체를 쉽게 변경할 수 없다. 제공 업체를 바꾼다면 많은 시간/비용이 발생할 수 있다.
- 계속해서 사용하는 서비스거나 요청량이 일정 수준 이상 많아지면 가성비가 떨어진다.
- 서비스가 꽤 커지면 IDC에 가상화해서 올리는게 싸다.
- 적지만 주기적으로 계속 서비스 요청이 있으면 클라우드 컴퓨팅 쓰는 게 나을 때도 있다.
- 지속적으로 실행되고 있지 않기 때문에 처음 실행할 때 발생하는 Cold start 문제가 생길 수 있다.
- 이걸 해결하려면 주기적으로 코드를 호출하거나 provisioned concurrency 설정을 해야 하는데 자세한 해결 방법은 나중에 따로 다룰 예정이다.
결론
서버리스는 개발에 집중할 수 있도록 만들어 주는 모델이지만 모든 것이 그렇듯 항상 옳은 것은 아니다. 어떨 때는 클라우드 컴퓨팅 기술이, 어떨 때는 실 서버 운영이, 내 PC에 서비스를 올리는 것이 최적의 방법일 수도 있으니 너무 서버리스만 고집하지 않기를 바란다.
참고 문헌
redhat - what is serverless: https://www.redhat.com/ko/topics/cloud-native-apps/what-is-serverless