AWS Serverless로 진짜 On-Demand 알아보기 (Mash-Up Node Team 15기 10분 세미나)

Younha Lee·2025년 4월 16일

Mash-Up

목록 보기
4/7

개요

이번 매쉬업 15기 노드팀 10분 세미나(라고 쓰고 10분 만에 끝내는 사람이 아무도 없음)에서 발표한 내용을 정리하려고 해요.
서버리스를 매쉬업 노드팀 템플릿 프로젝트에서 도입했는데, serverless 세팅을 병호형이 해주셨어요.
클라우드에 관심이 많아 10분 세미나에서 서버리스에 대해 발표하게 되었어요.
덕분에 AWS Lambda에 대해 좀 더 알 수 있는 계기가 되었어요.

출처

토크아이티 AWS 실전 노하우 영상을 정리한 글입니다.

서버리스란

클라우드 환경에서 서버의 관리 없이 어플리케이션을 실행할 수 있는 모델

서버리스를 공부하면서 EC2에 기반하여 애플리케이션을 배포했던 기존 방식보다 서버리스를 사용하는 방식이 AWS 클라우드 환경을 더 적극적으로 사용한다고 느꼈어요.

정의를 하나 더 해볼게요

(진짜) 필요한 만큼만 서비스를 제공하는 방법
(True) On-Demand

(True) On-Demand

최소 단위


감자칩이 먹고싶지만 딱 한 조각만 먹고싶다고 가정해봅시다.
하지만 한 조각 먹고싶어도 우리는 포카칩 한 개를 무조건 사야해요.

왼쪽처럼 간단한 함수 하나를 배포하고 싶지만, 우리가 알고있는 상식으로 배포하려면 EC2 환경도 설정하고 노드 설치하고 코드 github에서 받아서.....익숙한 사람이라도 최소 2~3분은 걸린다고 생각해요.

하지만 서버리스 환경에서는 함수의 실제 소요시간만큼만 우리가 클라우드 인프라를 사용할 수 있어요.

인프라 최적화하기


On-Demand가 아닌 환경에서는 피크사용량보다 살짝 높게 서버 사양을 맞춰놔야해요.
EC2의 오토스케일링을 사용해도 잉여 자원이 생기는 건 막을 수 없을 거에요.

완벽하게 최적화 할 수는 없어도 서버리스에서는 거의 잉여자원이 남지 않도록, 사용량만큼의 인프라를 구성할 수 있도록 도와줍니다.

최적화할수록? 돈을 아낄 수 있다!

AWS Lambda

람다는 우리가 서버를 프로비저닝하지 않고도 애플리케이션을 구성할 수 있도록 해주는 이벤트 중심의 서버리스 컴퓨팅 서비스에요.


비용도 상당히 저렴해요.

이벤트 vs 명령

  • 이벤트와 명령에 대해 간단히 정리해볼게요

    이벤트는 생산 주체는 대상의 행동에 관심이 없습니다.
    반면 명령은 생성 주체가 대상의 행동을 가지고 관심을 기다려요.
    예시를 들어볼게요.

명령


우리 페페가 일일 교통경찰을 하기로 했어요.
오가는 차에 관심을 가지고 직접 인솔하는 상황이에요.

이런 상황에서는 오가는 차가 많아지면 교통경찰에게 굉장히 큰 스트레스로 다가올 거에요.

이벤트


이번에는 교통 경찰 대신 신호등이 왔어요.
신호등은 시간이 되면 빨간불과 초록불을 오가는 행위를 합니다. 차는 교통 규칙에 맞게 이동하면 돼요.
이때 신호등은 오가는 차들에게 관심이 없는 상태입니다.
차가 많아져도 이동에 문제가 없는 상황이에요.
이렇듯, 확장성이 높다는 게 이벤트의 특징이에요.

AWS의 이벤트

AWS에서 일어나는 이벤트들은 이벤트 버스를 통해 돌아다녀요.

우리는 이벤트를 말그대로 잡아서 목표로 보내면 돼요.

Lambda 실습

S3 버킷에 사진이 올라갔을 때 람다가 해당 사진를 잡아서 조그마한 사진으로 줄여 버킷에 다시 올려주는 로직을 구현해볼게요.

IAM 설정


S3와 로그용 CloudWatch에 접근할 수 있게 역할을 만들어줬어요.

S3 버킷 생성


빈 버킷을 하나 만들었어요.

람다 함수 생성



람다 레이어도 없고 아무 트리거도 없는 상태에요
(소스 코드는 zip 파일로 올리면 돼요)

S3에 이벤트 알림 생성하기


모든 객체 생성 이벤트에 체크하고

'대상'에 아까 만든 람다 함수를 연결해줍시다.

람다 레이어 연결하기

람다 레이어란?

람다 함수는 용량에 제한이 있어요. node_modules나 prisma client처럼 다앙햔 람다 함수들이 공통적으로 사용하는 것들은 람다 레이어로 따로 빼놓아야해요.

.zip으로 업로드할 때 다음과 같은 규칙을 지켜야해요

nodejs 디렉토리 안에 node_modules를 넣고 zip 압축해야 람다가 인식할 수 있어요.

만든 레이어를 함수에 연결해줘요.


다음과 같은 그림이면 성공이에요.

테스트하기

버킷에 images 디렉토리에 사진을 하나 올렸어요.

로그를 보면 Billed Duration이 보일 거에요.
람다는 ms 단위로 사용량을 측정하는데, 우리는 2486ms만큼 람다를 사용했네요

작아진 상태로 resized/에 매숑이.png가 올라가있는 걸 볼 수 있어요.

람다를 사용할 때 고려해야할 점

  1. 최대 실행 시간이 15분이고 고정이에요.
    더 이상 넘을 수가 없습니다. 그러니 시간이 오래 걸리는 머신러닝 작업 시 작업간 디커플링을 강하게 가져야해요.
  2. 용량 제한도 있어요. 이 때문에 람다 레이어를 사용합니다.
  3. Cold Start, 처음 실행될 때 시간이 좀 걸리는 문제가 있어요.
  4. Concurrency, 동시에 수십, 수백 개의 람다가 실행되는 상황에서 동시성 문제를 조심해야해요.
profile
할 땐 하고 놀 땐 노는 일일놀놀입니다.

0개의 댓글