이 글에서는 AWS Lambda와 Redis Enterprise Cloud를 연동하는 방법을 알아봅니다. 샘플 영화 데이터베이스 애플리케이션을 예제로 사용하여, Node.js로 작성된 함수 하나와 Python으로 작성된 함수 하나, 총 두 개의 Lambda 함수를 빌드하고 배포하는 과정을 살펴보겠습니다. 이 두 Lambda 함수는 Redis 데이터베이스와 상호작용하여 데이터를 삽입, 수정, 삭제하고 조회하는 역할을 담당합니다. 애플리케이션은 풍부한 쿼리 및 검색 기능을 제공하는 RediSearch API를 활용합니다.
서버리스 아키텍처는 AWS Lambda를 기반으로 마이크로서비스 아키텍처로의 전환이라는 흐름과 잘 맞물립니다. 개발자는 비즈니스 '서비스'의 범위를 자신이 선호하는 프로그래밍 언어로 구현할 수 있는 작은 프로젝트 단위로 줄일 수 있기 때문입니다. 아래 동영상을 시청하시고, AWS Lambda에 대한 간단한 개요와 함께 Redis Enterprise Cloud와 Lambda를 활용한 애플리케이션 구축 방법에 대한 심화 내용을 이어서 확인해 보세요.
AWS Lambda 핵심 정리
AWS Lambda, 즉 Function-as-a-Service(FaaS)라고도 불리는 AWS의 서버리스 컴퓨팅 런타임이 익숙하지 않다면 다음 기본 사항부터 짚고 넘어가겠습니다. (Lambda 전문가라면 바로 다음 섹션으로 넘어가셔도 좋습니다.)
AWS Lambda는 특정 이벤트에 대한 응답으로 요청 시(on-demand) 함수를 실행할 수 있게 해주므로, 이벤트 기반 아키텍처(EDA) 애플리케이션을 구축하기에 적합합니다. AWS에서 완전히 관리되는 Lambda 함수는 다양한 프로그래밍 언어로 작성할 수 있으며, 가장 큰 장점 중 하나는 개발자가 애플리케이션의 전체 라이프사이클을 깊이 이해하지 않아도 된다는 점입니다.
AWS Lambda는 여러 가지 방식으로 호출될 수 있습니다. AWS 콘솔에서 직접 호출하거나, SNS·SQS·Kinesis 같은 다른 AWS 서비스의 이벤트를 통해 트리거하거나, CloudWatch 또는 S3 이벤트로 실행할 수도 있습니다. 이번 샘플 영화 데이터베이스 애플리케이션에서는 HTTP REST 엔드포인트를 통해 Lambda 함수를 호출하며, 이를 위해 AWS API Gateway를 사용합니다. (Lambda 함수 호출에 관한 더 자세한 내용은 공식 문서를 참고하세요.)
AWS Lambda의 HTTP 실행 과정
구체적으로 살펴보면, HTTP를 통한 요청은 AWS의 API Gateway 관리 도구로 라우팅되며, API Gateway는 요청 본문(body), 헤더(header), 파라미터를 파싱한 후 이 페이로드를 담아 Lambda 함수를 트리거합니다.

개발자 입장에서는 REST 엔드포인트를 노출하는 코드를 작성하고, 해당 엔드포인트가 AWS API Gateway 안에서 노출되도록 배포 설정만 해주면 됩니다. (이 부분은 뒤에서 다룰 샘플 영화 데이터베이스 애플리케이션 섹션에서 더 자세히 설명합니다.)
서버리스 애플리케이션에서 상태와 데이터 관리
AWS Lambda는 상태를 저장하지 않는(stateless) 환경입니다. 하지만 많은 애플리케이션에서는 여전히 서비스나 호출 간에 상태를 공유해야 하는데, 이때 Redis가 큰 도움이 됩니다. 간단한 상태 관리에는 AWS 개발자들이 ElastiCache를 자주 사용하지만, 많은 애플리케이션은 단순 상태 관리 그 이상을 필요로 합니다. 즉, 영속성(persistence), 풍부한 데이터 모델, 높은 성능, 쿼리 모델까지 갖춰야 하는 경우가 많습니다. Redis Enterprise Cloud는 AWS(Google Cloud와 Microsoft Azure도 지원) 위에서 제공되는 완전관리형 서비스로 이러한 요구사항을 충족합니다.
Redis 영화 데이터베이스 샘플 애플리케이션
이제 Redis Enterprise Cloud와 AWS Lambda를 사용해 애플리케이션을 구축하는 핵심 단계를 살펴볼 차례입니다.
이 애플리케이션은 RediSearch 시작하기 튜토리얼에서 소개된 데이터셋을 사용하며, Redis Hash로 구성된 영화 카탈로그로 이루어져 있습니다. 아래 다이어그램에서 볼 수 있듯이 프런트엔드는 Vue.js로 구축되었으며, 다음과 같은 작업을 수행하는 REST 엔드포인트를 호출합니다.
- 영화 목록 조회, 정렬 및 필터링
- 영화 정보 수정, 댓글 추가/삭제
- 전체 텍스트 검색과 패싯 검색(faceted search)을 활용한 영화 검색


앞서 언급했듯이 이 애플리케이션은 AWS API Gateway, AWS Lambda, 그리고 데이터 스토어로서의 Redis Enterprise Cloud를 활용합니다. 또한 Python 서비스는 Redis 데이터베이스 비밀번호를 저장하고 암호화하기 위해 AWS Key Management Service를 사용합니다.
데모 애플리케이션 설치 및 실행
시작하기 전에 몇 가지 사전 준비물이 필요합니다.
- AWS 계정과 자격 증명, 그리고 설치된 AWS CLI
- RediSearch 모듈이 활성화된 Redis Enterprise Cloud 계정 및 데이터베이스
- Git
- Node.js
- Python
- Redis 명령줄 인터페이스(CLI)
준비가 끝났다면, 샘플 애플리케이션을 설치하고 실행하는 과정을 단계별로 진행해 보겠습니다.
1단계: Redis Enterprise Cloud 데이터베이스 정보 확인
아직 Redis Enterprise Cloud에 데이터베이스를 생성하지 않았다면, 'Get Started with Redis Modules' 가이드의 안내에 따라 먼저 생성해 주세요.
Redis Enterprise Cloud에 연결하면 웹 콘솔에서 데이터베이스 연결 정보를 확인할 수 있습니다. 이때 반드시 데이터베이스에 'RediSearch 2' 모듈을 추가해야 합니다.

Lambda 함수를 Redis 데이터베이스에 연결하려면 다음 속성값들이 필요합니다.
- REDIS_HOST: redis-18541.xxx.xxxx.xxx.cloud.redis.com
- REDIS_PORT: 18541
- REDIS_PASSWORD: <화면에 표시된 비밀번호>
2단계: GitHub에서 프로젝트 받아오기
저장소를 로컬 환경으로 클론하고 프로젝트 디렉터리로 이동합니다.
> git clone https://github.com/redis-developer/aws-redis-cloud-demo.git
> cd aws-redis-cloud-demo
프로젝트의 디렉터리 구조는 다음과 같습니다.
aws-redis-cloud-demo
├── README.md
├── front-end => Vue.js 프로젝트
│ ├── .env.development => 개발 모드에서 Lambda URL 설정
│ ├── .env.production => 운영 모드에서 Lambda URL 설정
│ ├── ...
│ └── vue.config.js
│ └── ...
├── movie-comments-microservice => Python 기반 댓글 서비스
│ ├── .chalice
│ │ └── config.json => Lambda & 서비스 설정
│ ├── app.py
│ ├── chalicelib => 애플리케이션 코드와 라이브러리 포함
│ │ └── ….
│ ├── readme.md
│ └── requirements.txt
└── movies-list-microservice => Node.js 기반 영화 서비스
├── import_movies.redis => 데이터셋 파일
├── ...
├── serverless.yml => Lambda & 서비스 설정
├── src
│ └── ...
└── ...
3단계: 영화 데이터베이스 데이터셋 가져오기
aws-redis-cloud-demo/movies-list-microservice/import_movies.redis 파일에는 영화를 데이터베이스에 삽입하는 데 필요한 모든 Redis 명령어가 담겨 있습니다. 사용되는 명령어는 다음과 같습니다.
- 영화마다 HSET 명령어 사용
- RediSearch 인덱스 생성을 위한 FT.CREATE
데이터셋을 가져오려면 터미널을 열고 다음 명령어를 실행합니다.
> export REDISCLI_AUTH=<YOUR_DB_PASSWORD>
> redis-cli -h redis-18541.xxx.xxxx.xxx.cloud.redis.com \
-p 18541 < movies-list-microservice/import_movies.redis
4단계: Redis Enterprise Cloud 인스턴스를 사용하도록 애플리케이션 설정
애플리케이션을 테스트하기 전에 Node.js 서비스와 Python 서비스가 Redis Enterprise Cloud 데이터베이스 인스턴스를 사용하도록 설정해야 합니다. 다음 파일들을 열어주세요.
- ./movies-list-microservice/serverless.yml
- ./movie-comments-microservice/.chalice/config.json
그다음 Redis 호스트, 포트, 비밀번호(REDIS_HOST, REDIS_PORT, REDIS_PASSWORD)를 지정합니다.
5단계: 영화 마이크로서비스 빌드 및 실행(Node.js)
다음 단계에 따라 프로젝트를 빌드하고 실행합니다. (자세한 내용은 프로젝트의 Readme 파일에서도 확인할 수 있습니다.)
- Serverless 프레임워크 설치
> npm install -g serverless
2. movies-list-microservice 디렉터리로 이동
> cd movies-list-microservice
3. 의존성 설치
> npm install
4. Lambda 함수 로컬 실행
> npm start
5. 브라우저에서 https://localhost:3000/api/movies/1 에 접속하여 REST 서비스를 테스트
6. 다음 명령어를 실행해 함수를 AWS 환경에 배포
> serverless deploy
................................
Serverless: Stack update finished...
Service Information
service: movies-list-microservice
stage: api
region: us-east-1
stack: movies-list-microservice-api
resources: 33
api keys:
None
endpoints:
GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/search
GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/group_by/{field}
GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id}
POST - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id}
functions:
listMovies: movies-list-microservice-api-listMovies
searchMovies: movies-list-microservice-api-searchMovies
getMovie: movies-list-microservice-api-getMovie
saveMovie: movies-list-microservice-api-saveMovie
layers:
None
7. 브라우저에서 https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/1 에 접속해 API를 테스트
참고: 오류가 발생하면 AWS CloudWatch의 함수 로그를 확인해 원인을 파악하세요.
코드 심층 분석:
- package.json 파일에는 이 Node.js 프로젝트에서 사용하는 의존성이 정의되어 있습니다. 이 프로젝트는 매우 단순하며 다음 의존성들을 사용합니다.
- redis와 redis-redisearch 라이브러리는 Redis에 접속하고 RediSearch 명령어를 노출하는 데 사용됩니다.
- aws-lambda 라이브러리는 AWS Lambda 함수를 호출하고 Node.js 애플리케이션을 AWS 환경에 배포하는 데 사용됩니다.
- serverless.yml 파일은 HTTP 액션을 실제로 호출될 JavaScript 함수(handler.ts에 정의)에 매핑하는 서버리스 함수를 정의하며, 환경 변수(이 데모에서는 대부분 Redis 연결 문자열)를 포함합니다.
- handler.ts 파일은 AWS Gateway로부터 들어오는 이벤트를 캡처하고, Redis 데이터베이스에 대한 모든 호출을 처리하는 애플리케이션 라이브러리 SearchService를 호출하는 클래스입니다.
- SearchService.ts 파일에는 Redis 데이터베이스와 상호작용하는 모든 메서드가 포함되어 있으며, Redis와 RediSearch API인 client.ft_search(), client.aggregate(), client.hmset() 등을 사용합니다. (Redis 및 RediSearch 명령어에 대해 더 알아보려면 Redis University와 GitHub의 'Getting Started with RediSearch 2.0' 튜토리얼을 참고하세요.)
6단계: 댓글 마이크로서비스 빌드 및 실행(Python)
다음은 프로젝트를 빌드하고 실행하는 단계입니다. (자세한 내용은 프로젝트의 Readme 파일에서 확인할 수 있습니다.)
- Python 프로젝트로 이동한 후 가상 환경을 생성합니다.
> cd movie-comments-microservice
> python3 -m venv chalice-env
> source chalice-env/bin/activate
2. 의존성을 설치합니다.
> pip install -r requirements.txt
3. AWS 환경을 설정합니다. 다음 명령어를 실행하고 ID와 Secret을 입력하세요.
> aws configure
AWS Access Key ID [None]: ****************ABCD
AWS Secret Access Key [None]: ****************abCd
Default region name [None]: us-west-2
Default output format [None]:
4. 다음 명령어를 실행해 함수를 AWS 환경에 배포합니다.
> chalice deploy
Reusing existing deployment package.
Updating policy for IAM role: movie-comments-microservice-dev
Creating lambda function: movie-comments-microservice-dev
Creating Rest API
Resources deployed:
- Lambda ARN: arn:aws:lambda:us-east-1:11111111111:function:movie-comments-microservice-dev
- Rest API URL: https://XXXXXXX.execute-api.us-east-1.amazonaws.com/api/
코드 심층 분석:
- requirements.txt 파일에는 이 Python 프로젝트에서 사용하는 의존성이 정의되어 있습니다. 이 프로젝트 역시 매우 단순하며 다음 의존성들을 사용합니다.
- Chalice는 Python으로 서버리스 애플리케이션을 만들 때 사용하는 AWS 프레임워크입니다.
- redis와 redisearch는 Redis에 접속하고 RediSearch API를 사용하는 데 활용됩니다.
- config.json 파일은 서버리스 애플리케이션을 정의하며, 환경 변수(이 애플리케이션에서는 Redis 데이터베이스 연결 정보)를 지정하는 데 사용됩니다.
- app.py 파일은 애플리케이션의 진입점으로, 다양한 라우트를 통해 모든 REST 엔드포인트를 정의합니다. 애플리케이션은 여러 의존성을 임포트하는데, 특히 Redis와 상호작용하는 CommentService가 핵심입니다. 여러 파일을 사용하려면 반드시 chalicelib 폴더 안에 파일을 넣어야 합니다.
- comment_service.py 파일에는 댓글 생성, 조회, 삭제를 위한 모든 Redis 상호작용 코드가 들어 있습니다. 댓글 기능에서 주목할 부분은 search() 메서드입니다. 이 메서드는 search_client.search() 호출을 통해 영화에 달린 댓글을 생성 날짜 순으로 정렬하여 반환합니다.
선택 사항으로, Redis 데이터베이스 비밀번호를 AWS Key Management Service에 저장할 수도 있습니다. 설정 방법은 프로젝트 문서에서 확인할 수 있습니다.
7단계: 프런트엔드 애플리케이션 실행
- 프런트엔드 디렉터리로 이동해 의존성을 설치합니다.
> cd front-end
> npm install
2. .env.development 파일을 편집해 영화 서비스와 댓글 서비스의 URL을 설정합니다.
VUE_APP_MOVIES_SERVICE=https://<xxx>.execute-api.<reg>.amazonaws.com/api
VUE_APP_COMMENTS_SERVICE=https://<xxx>..execute-api.<reg>.amazonaws.com/api
3. 애플리케이션을 실행합니다.
> npm run serve
4. 브라우저를 열고 https://localhost:8084 에 접속합니다.
이제 애플리케이션에서 영화를 탐색하고 수정·검색하며, 댓글을 추가하거나 삭제할 수 있습니다.
선택 사항으로, S3와 CloudFront를 사용해 Vue 애플리케이션을 AWS 환경에 배포하고 사용자에게 공개적으로 서비스할 수도 있습니다. 이 방법은 프로젝트 문서에 설명되어 있습니다.
마무리
AWS Lambda와 Redis Enterprise Cloud를 함께 사용하면 서비스 배포가 한층 간편해집니다. Redis Enterprise Cloud와 RediSearch를 조합하면 값 기반으로 Redis 데이터를 손쉽게 쿼리할 수 있어, Redis를 서비스의 메인 데이터베이스로 활용할 수 있습니다.
Redis Enterprise Cloud는 Redis와 호환되므로, 오픈소스든 관리형 서비스든 기존 Redis 배포 환경을 손쉽게 마이그레이션할 수 있습니다. 데이터베이스 엔드포인트 같은 연결 파라미터만 변경하면 되며, 라이브 마이그레이션을 수행하는 방법은 여러 가지가 있습니다.
- 블루-그린 배포(blue-green deployment)
- Active-Passive Geo-Distribution을 활용한 Amazon ElastiCache와 Redis Enterprise Cloud 동기화
- 오픈소스 RIOT 도구를 활용한 데이터 마이그레이션
RediSearch 외에도 Redis Enterprise Cloud는 그래프, JSON, 타임 시리즈, Bloom 필터 등 유망한 다양한 데이터 모델을 지원하며, 고가용성, 확장성, 영속성, 보안, Active-Active 지역 분산 같은 프로덕션 환경에 필수적인 폭넓은 데이터베이스 기능도 제공합니다.
더 알아보고 싶으신가요? AWS re:Invent 홈페이지를 방문하고 아래 튜토리얼과 블로그 포스트도 함께 확인해 보세요.
- AWS에서 Redis 모듈 시작하기(Get Started with Redis Modules on AWS)
- DBaaS 제공업체 선택 시 고려해야 할 6가지 핵심 기능
- Redis Enterprise Cloud가 AWS에서 성숙해가는 엔터프라이즈 고객의 요구를 충족시키는 방법