서버리스?

오형근·2022년 4월 9일
0

Serverless

목록 보기
2/3
post-thumbnail

#해당 글은 네이더 다빗의 'Fullstack Serverless' 에서 공부한 내용을 정리한 글입니다.

서버리스란?

서버리스(serverless)란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델이다. - Red Hat Doc

간단히 말해 서버가 배제된 형태의 애플리케이션을 의미한다. 물론 서버가 존재하긴 하지만, 일반적인 애플리케이션과 달리 추상적으로만 존재한다. AWS, Firebase와 같은 클라우드 제공업체가 서버 관련 작업을 모두 진행하며 결과적으로 개발자는 코드만 작성하면 되는 형태이다.

서버리스는 FaaS와 비슷하게 여겨지기도 하지만, FaaS + BaaS라고 생각하는 것이 더 옳다. 개발자가 작성한 코드를 가지고 애플리케이션을 빌드하는 반면, 관리형 서비스의 도움을 충분히 받는 상태에서 개발이 이루어지기 때문이다.

서버리스는 이처럼 간단한 배포와 개발 로직 단순화로 최근 많은 이들에게 관심받고 있는 모델이다. 서버리스 모델의 인기가 높아지면서 최근 다양한 클라우드 공급 업체에서 이에 대한 도구를 제공하고 있다.

서버리스는 인프라를 위한 개발보다 비즈니스 로직 작성과 비즈니스 가치를 가장 효율적으로 제공하는 방법에 초점을 맞춘 기술이다. 그도 그럴 것이 백엔드의 구현 자체를 날리고 프론트엔드와 데이터베이스 간의 간격을 줄임으로서 애플리케이션 구축의 난이도와 비용을 확 낮추었다.

초기 테스트 모델 개발이나 스타트업에서 사용하기 매우 좋은 기술이라고 생각한다


이러한 서버리스의 기본적인 특징에는 무엇이 있을지 살펴보자.

서버리스 애플리케이션의 특성

운영 책임 감소

서버리스로 애플리케이션을 구현하면 신경써야 할 것이 소스코드 하나로 집중된다. 이는 서비스의 퀄리티나 렌더링 타임 감소와 같은 퍼포먼스에 더 신경을 쓰면서 좋은 UX를 끌어내기에 최적의 조건을 마련해준다.

서버리스 아키텍처의 장점

애플리케이션 설계 초기에 내리는 결정은 매우 중요하다. 최근 공부를 이어나가면서 이 점을 강조하는 개발자분들의 글을 많이 보아 중요성을 다시금 떠올리고 있다. 초기 기반을 제대로 다져놓지 않으면 이후 스케일업이나 리팩토링 등의 작업에서 무너지기 쉽다.

그런 방면에서도 서버리스는 많은 장점을 가지고 있는데, 이를 지금부터 하나씩 살펴보자.

확장성

서버리스는 확장성이 뛰어나다. 초기에 J커브를 그리는 사업의 상황에서 사용자 증가에 따른 트래픽 관리가 하나의 중요한 과제인데, 서버리스 애플리케이션은 이를 전적으로 클라우드 공급업체에서 맡는다. 즉 인프라 관련 엔지니어링을 클라우드 공급업체에게 넘기는 것이다. 서버리스 함수에서 코드는 병렬로 실행되며 각 요청들을 개별적으로 처리한다. 인프라에 대한 걱정을 던다는 것은 초기 스타트업에게 큰 이점으로 다가온다.

비용

일반적으로 클라우드 서비스를 이용해 구축한 애플리케이션은 리소스의 사용 여부와 무관하게 비용을 지불해야 했다. 사용량을 예상한 최대 작업량만큼 요청을 보내 비용을 지불했어야 했고, 그만큼의 낭비가 발생하기 마련이었다.

그러나 서버리스 기술은 사용된 리소스만큼의 비용만 지출한다. FaaS를 사용하면 기능에 대한 요청 횟수, 기능의 코드가 실행되는 데 걸리는 시간, 각 기능에 할당된 메모리를 기반으로 비용이 청구된다. 따라서 초기 인프라 비용 없이 서비스를 출시할 수 있고, 추후 확장이 필요한 만큼만 비용을 지불하면 된다.

이는 개발 시간 단축을 통한 빠른 출시개발 비용 절감을 용이하게 한다.

개발 속도

신경 써야할 부분이 줄어들고 하나로의 집중이 가능해지면 개발 속도의 가속화는 자연스레 따라온다. 데이터베이스, 인증, 스토리지, API와 같은 대부분의 기능들이 제공되기 때문에 핵심 기능과 비즈니스 로직을 작성하는 데 더 집중할 수 있다.

실험

많은 이들이 들어보고 적용중인 애자일 방법론은 초기 서비스 발전에 매우 유용한 방법론이다.

이러한 애자일 개발이나 A/B 테스트 등 다양한 실험적인 개발을 진행할 때 서버리스 기술이 이를 충분히 뒷받침할 수 있다. 서버리스 기술을 이용하면 코드 수정 및 배포 과정이 간단화되어 실험적인 발전을 하기 용이하다.

보안과 안정성

서버리스 기술은 클라우드 공급업체가 공을 들여 개발하고 운영하는 서비스인만큼 보안과 안정성 부분에서 허점이 존재하기 어렵다. 이와 동일한 역할을 할 정도의 서버와 인프라를 직접 구축하기 위해서는 막대한 비용과 인력이 필요할 것이 분명하기 때문에 이를 제공해주는 서비스를 이용하여 보안과 안정성을 보장받고 비용을 절감하는 것이 성장에 큰 도움이 된다.

적은 코드

서비스에서 가치가 있는 것은 코드가 아닌 이를 통해 구현한 기능이다. 유지 관리에 필요한 코드의 양을 제한하거나 코드 없이 기능을 출시하는 방법을 찾을 때 프로그램의 전반적인 복잡성이 줄어든다.

이는 버그 감소로 이어지고, 새로운 엔지니어가 쉽게 적응할 수 있으며, 기능 추가와 유지에 드는 부하가 줄어드는 결과를 가져온다.


그렇지만...

이와 같이 다양한 장점을 가지는 서버리스 기술이지만, 정형화된 서비스를 끌어다 사용하는 것이 언제나 옳은 방법은 아니다. 이렇게 서비스 개발을 진행하면 의존성이 상당히 높아진다는 큰 단점이 존재하고(물론 클라우드 공급업체가 서비스를 중지할 가능성이 현저히 낮은 것이 사실이다.) 서버를 통해 실현하고 싶은 기능들을 개발하는 데 있어 제약이 생기게 된다. 그렇기에 추후 서비스의 규모가 커지고 더 많은 개발자를 고용할 수 있는 여건이 주어진다면 언제든지 직접 백엔드를 구축하고 배포할 수 있는 유연함이 필요할 것이다.

지금까지 서버리스에 대한 전반적인 개념과 특징에 대하여 살펴보았다. 이제 실습을 통해 서버리스를 직접 구현해보자.

profile
https://nohv.site

0개의 댓글