현대적인 서버 환경에서는 Database만으로 모든 요청을 처리하지 않습니다.
사용자가 많아지면 빠른 응답 속도를 위해 Cache 시스템을 함께 사용합니다.
대표적인 Cache Database가 Redis입니다.
일반적인 서비스 구조:
사용자
↓
Nginx
↓
Application
↓
Redis Cache
↓
Database
Redis를 사용하면 자주 사용하는 데이터를 메모리에 저장하여 Database 접근 횟수를 줄일 수 있습니다.
기존 방식:
사용자 요청
↓
Application
↓
Database 조회
↓
응답
문제:
- Database 부하 증가
- 응답 속도 저하
- 많은 사용자 처리 어려움
Redis 적용:
사용자 요청
↓
Application
↓
Redis 확인
↓
데이터 반환
↓
필요 시 Database 조회
장점:
- 빠른 응답 속도
- Database 부하 감소
- Session 관리 가능
- 실시간 데이터 처리 가능
이번 글에서는 Docker Compose Redis Container 구성부터 환경 변수 설정, Network 연결, Volume 관리, Application 연동, Production 운영 방법까지 알아보겠습니다.
Docker Compose Redis란 무엇인가?
Redis는 메모리 기반 Key-Value Database입니다.
주요 특징:
- 매우 빠른 읽기/쓰기
- Cache 시스템
- Session 저장
- Queue 처리
- 실시간 데이터 관리
기본 구조:
Application
↓
Redis
↓
Memory Storage
Docker Compose에서는 Redis를 하나의 Service로 관리합니다.
예:
services:
redis:
image: redis:7
구조:
Redis Image
↓
Redis Container
↓
Cache 서비스 실행
Docker Compose Redis 기본 설정
기본 docker-compose.yml:
services:
redis:
image: redis:7
ports:
- "6379:6379"
실행:
docker compose up -d
확인:
docker compose ps
결과:
redis
running
6379 port
Docker Compose Redis Port 설정
Redis 기본 Port:
6379
개발 환경:
ports:
- "6379:6379"
구조:
Host 6379
↓
Redis Container 6379
하지만 Production에서는 Redis Port를 외부에 공개하지 않는 것이 일반적입니다.
권장:
expose:
- "6379"
구조:
Application Container
↓
Docker Network
↓
Redis Container
외부 접근 차단:
Internet
X
Redis
Docker Compose Redis Password 설정
Redis는 기본적으로 비밀번호가 없습니다.
Production에서는 반드시 인증 설정을 사용하는 것이 좋습니다.
redis.conf 방식:
requirepass password
Docker Compose 예:
services:
redis:
image: redis:7
command:
redis-server --requirepass password
접속:
redis-cli -a password
확인:
PING
결과:
PONG
Docker Compose Redis 환경 변수 관리
비밀번호는 .env 파일로 분리하는 것이 좋습니다.
.env:
REDIS_PASSWORD=securepassword
docker-compose.yml:
services:
redis:
image: redis:7
command:
redis-server --requirepass ${REDIS_PASSWORD}
구조:
.env
↓
Docker Compose
↓
Redis Container
Docker Compose Redis Network 연결
Application과 Redis는 같은 Network에 연결해야 합니다.
예:
services:
app:
image: my-app
networks:
- backend
redis:
image: redis:7
networks:
- backend
networks:
backend:
구조:
Application
↓
backend Network
↓
Redis
Application 설정:
REDIS_HOST=redis
REDIS_PORT=6379
중요:
잘못된 설정:
REDIS_HOST=localhost
올바른 설정:
REDIS_HOST=redis
이유:
Container 내부 localhost는 자기 자신입니다.
Docker Compose Redis 데이터 저장
Redis는 기본적으로 메모리 기반이지만 데이터 저장 기능도 제공합니다.
Persistence 방식:
- RDB Snapshot
- AOF(Append Only File)
Volume 연결:
services:
redis:
image: redis:7
volumes:
- redis-data:/data
volumes:
redis-data:
구조:
Redis Container
↓
redis-data Volume
↓
Redis 데이터 저장
Docker Compose Redis 접속 방법
Container 접속:
docker compose exec redis bash
Redis CLI 실행:
redis-cli
비밀번호 사용:
redis-cli -a password
데이터 확인:
KEYS *
값 저장:
SET user "Ari"
값 조회:
GET user
결과:
Ari
Docker Compose Redis Application 연결
실제 Application에서는 Redis Client를 사용합니다.
환경 변수:
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=password
구조:
Backend Application
↓
Redis Client
↓
Redis Container
활용:
- 로그인 Session
- API Cache
- 사용자 정보 Cache
- 임시 데이터 저장
Docker Compose Redis Cache 구조 예제
일반적인 Web 서비스:
사용자
↓
Application
↓
Redis Cache 확인
↓
있으면 Redis 반환
↓
없으면 Database 조회
↓
Redis 저장
동작:
첫 요청
↓
Database 조회
두 번째 요청
↓
Redis Cache 반환
Docker Compose Redis와 Database 함께 구성
실제 서버 구성:
services:
app:
image: my-app
redis:
image: redis:7
mysql:
image: mysql:8
구조:
사용자
↓
Application
↓
Redis
↓
MySQL
역할:
Redis:
- 빠른 데이터 처리
MySQL:
- 영구 데이터 저장
Docker Compose Redis 백업
Redis Snapshot 백업:
docker compose exec redis redis-cli save
데이터 파일 확인:
docker compose exec redis ls /data
Volume 백업:
docker volume inspect redis-data
중요 데이터라면 Volume 백업도 함께 구성합니다.
Docker Compose Redis 운영 설정
Production 추천:
services:
redis:
image: redis:7
restart: unless-stopped
command:
redis-server --requirepass password
포함:
- 자동 재시작
- 비밀번호 설정
- Version 고정
Docker Compose Redis 장애 대응
Redis 연결 실패
확인:
docker compose logs redis
확인:
- Port
- Password
- Network
Memory 부족
확인:
docker stats
Redis는 메모리를 많이 사용할 수 있기 때문에 관리가 필요합니다.
Redis 데이터 초기화
주의:
Volume 삭제:
docker compose down -v
하면 Redis 데이터가 삭제될 수 있습니다.
Docker Compose Redis 운영 Best Practice
추천:
- Redis Password 설정
- Port 외부 공개 최소화
- Version 고정
- Memory 모니터링
- Persistence 설정
- Backup 구성
운영 구조:
Application
↓
Private Network
↓
Redis Cache
↓
Database
자주 묻는 질문
Redis는 Database인가요?
네.
Key-Value 형태의 데이터 저장 시스템이며 Cache 용도로 많이 사용됩니다.
Redis는 꼭 Volume이 필요한가요?
Cache만 사용한다면 필요하지 않을 수 있지만 데이터 보존이 필요하면 Volume을 사용하는 것이 좋습니다.
Redis Port를 공개해야 하나요?
Production에서는 Application 내부 Network 연결을 권장합니다.
MySQL과 Redis를 같이 사용할 수 있나요?
가능합니다.
실제 서비스에서는 MySQL 같은 영구 Database와 Redis Cache를 함께 사용하는 구조가 일반적입니다.
마무리
Docker Compose Redis 구성은 빠르고 안정적인 서버 서비스를 만들기 위한 핵심 기술입니다.
Redis를 Application과 연결하면 Database 부하를 줄이고 사용자 요청에 빠르게 응답할 수 있습니다.
실제 Production 구조에서는 다음 형태를 많이 사용합니다.
Nginx
↓
Application
↓
Redis Cache
↓
Database
↓
Volume Backup
다음 글에서는 Document Database로 많이 사용하는 Docker Compose MongoDB 구성 방법을 알아보겠습니다.