Serverless?

서버리스가 뭐야?

Serverless architect 서버리스를 직역하면 Server(서버) + less(없는) 즉, 서버는 없다이다. 서버를 배포해야 하는데 서버가 없다니...? 정확히는 서버 없이 서버를 운영하는 것이 아니다. 항상 대기하는 전용 서버가 없다고 표현하는 것이 더 적한 것 같다.
서버리스는 API 호출과 동시에 서버가 세팅(생성)되는 형태의 서비스를 띄고 있다. 즉, 특정 API의 호출이 있을 때 서버가 생성되고, 해당 코드만 실행되는 것이다.
대표적인 서비스로 AWS LambdaGoogle Firebase가 있다.

Serverless architect
상시 대기 중인 서버 없이 서비스를 제공하는 구조로 서버에 요청(request)이 들어올 때마다 서버가 생성, 실행 그리고 반납되는 형태의 구조

서버리스의 2가지 형태

서버리스에는 크게 두가지 형태가 있다.

BaaS(Backend-As-A-Service)

클라우드 공급자가 제공하는 서비스를 이용해 백엔드 기능을 구현하는 서비스이다. 대표적으로 Google Firebase가 있다. 제공되는 서비스를 가져와 사용하기 때문에 커스터마이징이 어렵지만 빠른 개발이 가능하다.

FaaS(Function-As-A-Service)

개발자가 직접 작성한 로직, 기능을 하나의 함수로 구현해주는 서비스이다. 대표적으로 AWS Lambda가 있다. API는 트리거가 실행될 때마다 서버 자원을 할당 받아 사용된다. 그렇기 때문에 커스터마이징이 쉽지만 기능을 직접 개발해야하는 만큼 상대적으로 느린 개발 속도를 갖는다.

서버리스의 장단점과 과금 구조

장점

  1. 서버 관리가 불필요하다
    서버가 자동으로 확장되고 장애도 방지되기 때문에 내가 직접 서버를 관리할 일이 사라진다. (서비스 제공사에서 해결해야 할 일)

  2. 관리보다 개발에 집중이 가능해진다
    인프라에 관심을 줄인 만큼 서비스 개발에 집중할 수 있다.

  3. 급격한 트래픽 변화에 유연하다
    EC2를 사용하면 AWS Load Balancer나 Elastic Load Balancing을 사용해 대량의 트래픽을 분산 처리해줘야 하는데, 서버리스의 경우에는 각 트래픽마다 각각 다른 서버가 세팅되기 때문에 트래픽 변화에 유연한 측면이 있다.

단점

  1. 장기적인 작업에는 적합하지 않다
    서버리스의 최대 대기 시간을 넘어가면 함수가 작동하지 않는다. AWS에서는 최대 1,500MB 메모리와 300초의 처리 시간을 제공하고 있다. 즉, 예를 들어 크롤러 기능이 오랫동안 실행되다가 최대 대기 시간을 넘긴다면 에러가 발생하게 된다.

  2. 상대적으로 느리다
    서버리스는 호출과 동시에 서버가 세팅되기 때문에 느릴 수밖에 없다. 이런 동작 방식을 다른 말로 콜드 스타트(Cold start)라고 한다. AWS lambda의 경우 콜드 스타트가 평균적으로 0.8초(1초 안쪽)정도 소요된다. 그래서 어떤 함수가 최초 실행 될 때 콜드 스타트 시간과 함수의 로직 실행 시간까지 필요로한 것이다. 클라이언트 입장에서 검색 기능을 사용하고 싶은데, 수초가 걸리는 서비스라면 화가 끓어오르지 않을까?

  3. 함수의 처리 결과에 따라 상태를 따로 저장하게 된다
    서버리스는 각각의 함수가 독립적으로 작동하기 때문에 함수의 처리 결과를 stateful 하게 DB에 저장할 수도 없다. (AWS S3, Azure와 같은 서비스를 이용하거나 EFS filesystem을 이용해 연동해 처리해줘야 함)

  4. 클라우드 공급자에 의존도 증가
    BaaS의 경우에는 클라우드 공급자가 제공해주는 함수만 사용할 수 있으므로 그 외에 복잡한 서비스 개발에 어려움이 생긴다. 또한 FaaS의 경우도 서버 기능을 완벽하게 구현하기 위해서 서버리스 서비스뿐만 아니라 같은 회사의 다른 서비스를 연동해서 백엔드 사이드를 구축할 수밖에 없다.

과금은?

과금 기준은 함수 트리거 실행 시간과 횟수에 비례한다. 때문에 절대적으로 저렴하다, 아니다를 단정지을 수 없지만 서비스 규모가 커질수록 다른 클라우드 컴퓨팅 리소스보다 상대적으로 많은 비용을 요구하는것은 사실이다. 또한 작은 규모일지라도 반복적으로, 많이 호출되는 서비스일수록 더 많은 비용이 필요로해진다.
반대로 얘기하면 적은 수요와 복잡하지 않은 API라면 장시간 이용해도 많은 비용이 발생하지 않기 때문에 서버리스를 사용하는 것이 좋을 수 있다.

서버리스에 적합한 프로젝트

단점이 더 많이 서술되었는데 과연 좋은 서비스인지 의심이 되기도 한다. 하지만 많은 사람이 얘기하기론 초기 빠른 빌드업을 목표로 하는 프로젝트에 어울린다고 얘기한다. 필요한 AWS의 서비스를 종합, 활용해 서버를 배포하는 것보다 빠르게 백엔드 사이드를 구성할 수 있기 때문이다. 또한 초기 프로젝트인 만큼 서비스 사용 빈도도 낮을 것이고, 그만큼 과금의 부담도 적기 때문이다.
그리고 대규모 서비스 중 특수한 상황에 필요한 함수의 경우 서버리스를 이용해 자동화 시스템을 구축할 수 있다. 대표적으로 Siemens IC라는 회사는 AWS 람다를 사용해 분석 프로세스를 자동화 하고있다.

AWS Lambda

출처

썸내일 이미지 - 서버리스 아키텍쳐(Serverless)란?
내용 - 한 번에 끝내는 AWS 인프라 구축과 DevOps 운영

profile
안녕하세요 :) 1년 차 Pythonist 백엔드 개발자 윤서준입니다.

0개의 댓글