Lambda - Serverless

stateless 코드 실행을 위한 서비스

Serverless

  • 사실 실제 서버가 없을수는 없음

  • 어디에서든 물리머신이 있고 그 위에 버츄얼머신이 있고 그 위에 컨테이너로 서버리스를제공하는게 실체

  • 사용자 입장에서 "호스트레벨 신경쓰지 않고 필요한 로직과 코드만 가지고 배포해서 컴퓨팅 파워 필요한만큼 가져다써" 강조하기 위해 서버리스라는 표현을 함

  • 대신 코드는 굉장히 가볍게 사용하길 권고함

    • 서버리스는 지속적인 로직을 처리하기 위한 컴퓨팅파워가 아닌 단일 미션을 들고 빠르게 처리하기 위한 옵션

    • 그래서 서비스를 펑션 서비스라고도 한다.

    • 하나의 기능을 수행하기 위해서 Lambda를 보통 씀

AWS Lambda

이벤트 처리 방식의 컴퓨팅 서비스

웹 서비스에서 주로 백엔드의 특정 작업을 자동으로 처리하는 서버리스 함수로 활용

  • S3: 파일 업로드 시 이미지 리사이징, 데이터 변환

  • 클라이언트 요청에 따라 데이터베이스 쿼리, 비즈니스 로직 처리

  • 요청이 들어오면 필요한 작업만 수행하고 쉬는(죽는) 이벤트 함수

  • 다양한 언어 지원

  • 이벤트로 인해서 인보크가 된다?

    • 이벤트가 람다를 인보크하면 람다내에 정의된 핸들러가 받아서 처리함

    • ex: 모니터링 시스템, 특정 이벤트를 받아 처리하고 어딘가에 저장한다는지,

  • 이벤트가 람다를 인보크하면 새로운 람다가 수행되고 죽음 (반복)

    • 그래서 람다는 stateless하게 사용됨

    • 람다 내에 사용되는 저장소는 휘발성(임시) 메모리

    • 결과물을 저장한다는 필요성이 있다면 외부 영구 저장소에 연결해서 관리해야함

  • 람다의 비용은 메모리 리소스와 실행 시간 기준으로 과금됨

    • 람다는 오래돌면 돌수록 EC2와 같은 일반 온디멘트 버츄얼 머신 서비스보다 훨씬 가파르게 비용이 증가함

    • 오래 실행되고 세션이 유지되어야하는 워크로드는 람다는 맞지 않음

서버리스 호출 방식

각 서비스가 가진 성격에 따라 호출방식을 지원함

동기식 호출

  • 람다함수를 실행하고, 람다가 완료될 때 까지 응답을 기다림

비동기 호출

  • 람다는 이벤트를 대기열 큐에 넣어 배치하고, 기다리지 않고 즉시 성공을 반환함

  • 이메일/SMS 전송, 데이터 처리 작업, 알림 발송 등 결과가 즉시 필요하지 않은 비동기 워크로드에 적합

  • 서버리스는 최대한 디커플링하고 이벤트 드리븐 아키텍처를 구현하기 위해 비동기식 방식의 코드를 지향함

스트림 폴링

  • 엄밀히 말하자면 동기방식이지만, AWS 큐기반 서비스와 통합될 수 있도록 설계됨

  • 스트림 기반으로 동작하는 애들을 편하게 처리할수 있도록 구성됨

Last updated