[Infra] 서버리스(Serverless)에 대하여

Jihyoung·2023년 5월 18일

Infra

목록 보기
1/1
post-thumbnail

인턴쉽 당시 AWS의 Lambda를 사용하여 서버리스 형태로 플랫폼을 운영했습니다. 그리고 해외의 각종 플랫폼 예를들면 넷플릭스와 인스타그램에서도 서버리스를 이용한다고 하여 어떤 장점 때문에 사용하는지, 어떻게 사용하는지가 더 궁금해졌습니다.

저는 서버리스를 직접 사용해보며 편리하다 라는 장점과 느리다 라는 큰 단점이 있다고 생각했는데요, 어떻게 이를 적절히 활용하면 좋을지와 느린 속도를 개선하는 방법에 대해서도 알아보려고 합니다.

따라서 서버리스와 관련된 공부를 해보며 어떠한 장단점이 있는지 파악해보고, 어떤 곳에서 어떻게 사용하는 것이 좋을지 차근차근 학습해보도록 하겠습니다 😀

서버리스(Serverless)란?

서버(Server) + 리스(Less)의 합성어라 간혹 '서버가 없다'라고 문자 그대로 이해할 수 있지만, 절대 그렇지 않다.

서버리스(Serverless)는 클라우드 컴퓨팅의 모델 중 하나로 개발자가 서버를 직접 관리할 필요가 없는 아키텍처를 의미한다.

서버리스는 동적으로 서버의 자원을 할당하기 때문에 사용자가 없다면 자원을 할당하지 않고 대기하다 요청이 들어오면 그 때 자원을 할당해서 요청을 처리하고 다시 대기 상태로 들어가게 된다.
즉, 자원을 효율적으로 사용할 수 있는 것이다.
비용 또한 대기상태를 제외한 실제 사용 자원에 대해서만 청구되기 때문에 굉장히 경제적이며,
해당 서버는 클라우드 제공 기업에서 전적으로 관리하기 때문에 개발자는 스케일링, 업데이트, 백업, 보안 등 서버에 대해 일절 관리하거나 신경 쓸 필요가 없어 비즈니스 로직에 집중하여 개발을 할 수 있다.


기존에 사용하던 기술

자체적 시스템 설계

  • 시스템에서 필요한 모든 인프라를 직접 관리하는 것을 의미
  • 전산실과 같은 공간에서 하드웨어, 네트워크, 운영체제, 모두 직접 관리를 해주는 것을 말함
  • 시스템이 커짐에 따라 관리를 위한 인력과 비용 문제 발생

IaaS (Infrastructure as a Service)

  • Infrastructure 레벨을 제공하는 서비스를 의미
  • 인프라를 가상화하여 관리하기 쉽게 해주는 서비스 서비스를 통해, 관리자패널에서 인프라를 구성하고, 사용
  • 사용자는 가상머신 생성, 네트워크 및 하드웨어도 설정하고 운영체제를 설치해서 애플리케이션을 구동 할 수 있게됨
  • 사용량 모니터링 가능

PaaS (Platform as a Service)

  • 개발자가 응용 프로그램을 작성할 수 있도록 플랫폼 및 환경을 제공하는 모델
  • 사용자는 어필리케이션 자체에만 집중 가능

서버리스 아키텍처(Serverless Architecture)의 구현 방식

서버리스 아키텍처의 대표적인 두 가지 구현 방식은 FaaS와 BaaS로 나뉜다. (일반적으로 FaaS를 의미)

  • FaaS (Function as a Service) : AWS Lambda, Microsoft Azure Function, Google Cloud Functions ...
  • BaaS (Backend as a Service) : Firebase, Kinvey, Parse ...

FaaS(Function as a Service)

FaaS는 Function 즉, 함수를 서비스로 제공하는 것을 의미한다.

사용자가 작성한 코드(백엔드)를 서버리스 제공자의 서버에 업로드하면 해당 서버는 업로드한 코드를 함수 단위로 쪼개 대기상태로 두게된다.
그러다 요청이 들어오면 서버가 대기상태에 두었던 함수를 실행시켜 처리한 후 작업이 끝나면 다시 대기상태로 만드는 구조이다.

쉽게 말해 업로드한 코드는 평소에 자고있고, 요청이 들어오면 서버가 코드를 깨워 요청을 처리한 후 다시 재운다.

FaaS의 특징

1. Stateless

FaaS 서비스는 함수가 실행되는 동안에만 관련된 자원을 할당하게 되며, 함수가 항상 같은 머신에서 실행된다는 보장이 없다. 따라서 함수 실행 시 로컬에서 어떤 상태(State)가 유지될 수 없다.
이를 해결하고 싶다면 메모리에 상태를 저장하지 않고 AWS의 경우 S3을 이용하거나 아예 DB를 사용해야 한다.

2. Ephemeral

위에서 말한 것과 같이 함수는 특정 이벤트가 발생했을 때만 컨테이너로서 배포되고, 실행이 끝난 후엔 자원이 회수되므로 일시적으로만 배포된다고 할 수 있다.


BaaS (Backend as a Service)

BaaS는 일반적으로 SPA, 안드로이드와 같은 클라이언트 중심으로 개발된 어플리케이션이다.

클라이언트단에서 BaaS가 제공하는 인증, DB, 사용자 관리 등과 같은 백엔드 관련 외부 서비스를 사용해서 대부분의 비즈니스 로직을 처리한다.

쉽게말해 SNS연동이나 DB와 같이 백엔드에 필요한 기능들을 사용자가 직접 구현할 필요 없이 제공하는 API로 해당 기능을 구현할 수 있게 해주는 것이다.


서버리스(Serverless)의 장단점

장점

  • 기존 IaaS나 PaaS와는 다르게 실제 사용량에 대해서만 비용이 청구되므로 경제적
  • 서버에 신경 쓸 필요가 없으므로 개발자 생산성 향상 및 개발 시간 단축
    • 비즈니스 로직에 집중 가능
  • 자동 스케일 업 및 스케일 다운
  • 간단한 패키징 및 배포
  • 릴리즈 주기 감소
  • 높은 생산성

단점

  • Cold Start
    • 서버가 항시 요청에 대기하고 있는게 아니라 느리다. 프로젝트 규모가 작다면 크게 신경쓸만한 사항은 아니지만 규모가 커지거나 속도를 요구하는 프로젝트라면 서버리스는 좋은 선택이 아닐 수 있다.
  • 실행 시간 한계
    • 서버리스는 단순 작업(댓글 쓰기, 이메일 보내기 등)에는 적합하지만 긴 시간이 필요한 작업(동영상 업로드, 데이터 백업 등)에는 굉장히 비효율적이다. 서버리스는 함수가 1회 호출 될 때 사용할 수 있는 메모리 및 시간에 제한이 있기 때문이다. 만약 작업이 끝나지 않은채로 해당 시간이 지나면 작업이 완료될때까지 일정 시간마다 계속 함수를 다시 호출하게 된다.
  • 클라우드 제공 플랫폼에 종속적
  • 디버깅 및 테스트 불편
  • 실행 시간 한계
  • 로컬 데이터를 사용할 수 없음 (Stateless)

오늘은 서버리스의 기본 개념들에 대해 알아보는 시간을 가졌습니다.
그리고 다음 글에서는 서버리스 서비스인 AWS Lambda에서 Cold Start와 그 해결 방법에 대해 알아보도록 하겠습니다. 🧠

Reference

profile
로그를 생활화

1개의 댓글

comment-user-thumbnail
2023년 5월 22일

회사에서 프로젝트를 하며 서버리스를 경험해보셨다고 했는데, 어떠한 이유로 서버리스 선택하게 되셨는지 궁금합니다! 추후 포스팅 될 cold start 해결법도 궁금하네용🙂

답글 달기