강연을 들은 계기

아젠다에 수요지식회 강연 목록이 쭉 뜨고, 그 중에 “으잉?” 하는 의문을 자아내는 단어를 봤다. 바로 “Serverless” 였다.
저 단어를 보는 순간 든 생각은 “서버가 없어? 서버가 없으면 데이터는? 데이터베이스는? 전부 프론트에서 하는 건가? 그러면 백엔드 개발자는 왜 있는 거지? 나 직장 들어가기도 전에 실직하는건가?” 였다(의식의 흐름).

진상을 알기 위해 과연 서버가 없이 어떻게 어플리케이션이 돌아가는 건지 너무 궁금해서 1%의 망설임도 없이 바로 등록 버튼을 눌렀다.

나는 서버리스 아키텍처가 무엇인지, 어디에 쓰는지, 그리고 어떻게 구현하는지를 아는 것을 이 강연을 들음으로써 내가 얻고자 하는 것으로 설정하고 강연을 들으러 갔다.

Serverless right now!

서버가 없을 수 있을까?

필요한 서비스는 제공 받으면 된다. 사용하고 나면 클라우드 벤더에 다시 돌려준다.

-a-a-S, etc.: anything as a service

어떤 것을 서비스로 제공받는다; 대여

  • IaaS: 서버, 스토리지, 네트워크 등 인프라 대여
  • PaaS: 개발을 도와주는 플랫폼 대여
  • SaaS: 소프트웨어 대여
  • BaaS(serverless): 백엔드 기능을 대여
  • FaaS(serverless): 함수를 대여

BaaS

개발자가 직저 개발하지 않고 클라우드 공급자가 제공하는 서비스를 이용해 쉽고 안정적으로 구현.

API 방식으로 제공받아 필요한 기능을 호출하여 사용.

FaaS

기능을 하나의 함수로 구현해두고, 실행할 때마다 서버 자원을 할당받아 사용하는 것.

서버는 대기하면서 이벤트를 기다리지 않고, 이벤트가 발생할 때마다 실행됨.

서버리스의 장점

  • 비용 최적화: 인보케이션 횟수와 처리 시간에 따른 요금 부과
  • 비즈니스 로직에 집중
  • 쉬운 스케일 아웃
  • 편한 관리
  • 마이크로 서비스: 모듈화하기 좋음
  • 유닛 테스트하기 쉬움

서버리스의 단점

  • 콜드 스타트: 클라우드를 켜는 시간 (보통 100ms ~ ns)
  • 타임아웃: 장시간의 런타임은 어려움
  • 벤더락인: 마이크로 서비스 간의 상호 의존 관계 고려
  • 가격 예측 어려움
  • 통합 테스트 어려움: Hexagonal architecture principles로 극복 가능
  • (설계 방식의 변화):
  • (Stateless): Step functions 등으로 극복 가능

서비스 사례

  • 정적 웹페이지
  • 챗봇
  • 아웃게임: 배틀 그라운드
  • 분석과 모니터링
    • 데이터 분석 리포팅
  • 자동화 작업
    • 동영상 유해성 여부 확인 기능
  • 배치 작업

서버리스 아키텍쳐가 적합한 서비스

  • 관리보다 개발에 집중하여 출시해야 하는 서비스
  • 함수 단위 로직으로 코드 유지보수나 기능 추가가 가능한 서비스
  • 이벤트 기반 실행으로 유지비를 낮출 목적이 있는 경우
  • 반복적으로 타 시스템과 연계하여 비즈니스 인사이트를 도출해야 하는 서비스

서버리스 아키텍쳐가 적합하지 않은 서비스

  • 장기간 지속 작업: 타임아웃
  • 상시 커넥트 되어야 하는 서비스; 웹 소켓
  • 콜드 스타트를 허용할 수 없은 서비스; 암호 화폐
  • 서비스 처리 결과에 대한 데이터 저장이 필요한 경우: Stateless

질문

콜드 스타트의 시점?

콜드 스타트는 서버가 시작하고 이벤트 버스에 들어오기까지의 시간을 의미한다. 따라서 이벤트 브릿지에서는 콜드 스타트가 일어나지 않는다.

레이어란?

의존성을 쉽게 관리하기 위해 만든 서비스

람다 함수 요청에서 DDos 공격 처리를 어떻게 하는지?

API Gateway를 통해서 HTTP 요청을 하면, 트래픽이 예상보다 많아지면 끊어내는 방식으로 대응할 수 있다.

추가로 알아보면 좋을 것들

  • 퍼블릭하게 배포하는 방법
  • 블루/그린 전략

댓글남기기