소개
라라벨(Laravel)은 확장성 있고 고성능인 웹 애플리케이션을 구축하기 위해 널리 사용되는 PHP 프레임워크입니다.
이 글에서는 라라벨의 세션과 캐시 데이터를 서버리스 Redis 인스턴스에 저장하는 방식으로, 서버리스 Redis를 활용해 라라벨 애플리케이션을 확장하는 방법을 단계별로 살펴보겠습니다.
사전 준비 사항
시작하기 전에 다음 항목들이 준비되어 있어야 합니다.
- Upstash 계정: 아직 계정이 없다면 신용카드 없이 무료로 가입할 수 있습니다.
- 라라벨 설치: 라라벨이 설치되어 있지 않다면 '원클릭으로 라라벨 설치하기' 가이드를 참고해 손쉽게 설치할 수 있습니다.
아키텍처 개요
라라벨을 단일 서버에서 운영하는 대신, 다음과 같은 구성을 생각해 볼 수 있습니다.
- 두 대의 웹 서버에서 실행되는 라라벨 애플리케이션
- 요청을 두 웹 서버로 분산하는 단일 로드 밸런서
- 애플리케이션 데이터를 저장하는 MySQL 데이터베이스 서버
- 데이터 캐싱과 사용자 세션 저장을 담당하는 Upstash 서버리스 Redis 클러스터
전체 구조를 그림으로 표현하면 다음과 같습니다.

서버리스 Redis란?
서버리스 Redis는 완전 관리형 DBaaS(Database as a Service) 상품으로, 명령(command) 단위로 과금되기 때문에 실제 사용한 만큼만 비용을 지불하면 됩니다.
덕분에 서버 용량을 미리 과도하게 프로비저닝할 필요가 없으며, 필요에 따라 애플리케이션을 유연하게 확장할 수 있습니다.
왜 서버리스 Redis일까?
기본적으로 라라벨은 사용자 세션을 웹 서버 디스크의 파일에 저장합니다. 이 경우 로드 밸런서가 사용자의 요청을 다른 서버로 전달하는 순간 세션이 유실될 수 있습니다.
따라서 사용자 세션과 애플리케이션 캐시를 중앙화된 저장소에 보관해 여러 요청과 여러 서버 간에 공유할 수 있도록 하는 것이 중요합니다. 그래야 로드 밸런서가 요청을 어느 서버로 보내더라도 세션이 사라지지 않습니다.
물론 데이터베이스에 세션과 캐시를 저장하는 방법도 있지만, 성능 측면에서는 Redis를 사용하는 것이 좋습니다. 각 옵션의 성능 차이가 궁금하다면 "어떤 라라벨 캐시 드라이버가 성능에 가장 좋을까?"라는 주제의 글을 참고해 보세요.
수평 확장 vs. 수직 확장
두 확장 방식의 차이를 간단히 정리하면 다음과 같습니다.
- 수직 확장(Scale-up): 단일 서버에 CPU 코어, RAM, 디스크 용량 등 더 많은 리소스를 추가해 성능을 높이는 방식입니다.
- 수평 확장(Scale-out): 요청을 처리하는 서버 대수 자체를 늘려 트래픽을 분산하는 방식입니다.
다음 이미지는 수평 확장과 수직 확장의 차이를 보여주는 간단한 예시입니다.

애플리케이션을 수평 확장할 때는 사용자 세션과 캐시 데이터를 확장 가능한 방식으로 처리하는 것이 핵심입니다.
서버리스 Redis 클러스터 만들기
Upstash를 사용하면 다음 단계만으로 30초 안에 서버리스 Redis 클러스터를 만들 수 있습니다.
- Upstash 계정에 로그인합니다.
- Create Database 버튼을 클릭합니다.
- Redis 클러스터 이름을 입력하고 리전(region)을 선택합니다.
- Create 버튼을 클릭합니다.
이것으로 끝입니다! 이제 바로 사용할 수 있는 서버리스 Redis 클러스터가 준비되었습니다.
이후 설정에 필요하니 Redis 클러스터의 엔드포인트, 포트, 비밀번호를 반드시 메모해 두세요.
라라벨에 서버리스 Redis 연결하기
서버리스 Redis 클러스터가 준비되었다면, 일반 Redis 인스턴스를 연결하듯 라라벨을 설정하면 됩니다.
Predis 패키지 설치
예전에는 PHP Redis 확장 모듈을 사용해 Redis에 접속했지만, 이제는 Predis 패키지를 대신 사용할 수 있습니다.
다음 명령어로 Predis 패키지를 설치합니다.
composer require predis/predis
그다음 라라벨 프로젝트의 .env 파일을 열고 다음 항목을 수정합니다.
REDIS_HOST=your_upstash_redis_endpoint
REDIS_PASSWORD=your_upstash_redis_password
REDIS_PORT=your_upstash_redis_port
참고로 Upstash는 기본적으로 TLS 연결을 사용하므로, 환경에 따라 REDIS_SCHEME=tls를 함께 지정해야 할 수 있습니다.
Redis 접속 정보와 함께 캐시 드라이버와 세션 드라이버도 redis로 변경해야 합니다.
CACHE_DRIVER=redis
SESSION_DRIVER=redis
마지막으로 다음 명령어로 설정 캐시를 초기화합니다.
php artisan config:clear
이제 라라벨 애플리케이션은 서버리스 Redis 클러스터를 사용해 캐시와 세션 데이터를 저장하게 됩니다.
마무리
라라벨과 서버리스 Redis의 조합은 애플리케이션을 확장하는 훌륭한 방법입니다. 쿠버네티스 클러스터에서 라라벨을 운영하는 경우에도, 서버리스 Redis 클러스터를 활용하면 세션과 캐시 데이터를 확장 가능한 방식으로 관리할 수 있습니다.
Upstash에 대한 자세한 내용은 공식 문서를 확인하세요.
라라벨 애플리케이션 확장에 대해 더 알고 싶다면 다음 글도 참고해 보세요.
- 관리형 데이터베이스와 오브젝트 스토리지로 확장 가능한 라라벨 6 애플리케이션 구축하기