2025년 7월 27일조회 612분 읽기
이론

[2편] AWS EC2에 Redis 직접 설치해보기

[2편] AWS EC2에 Redis 직접 설치해보기 — 개발 서버 구성기



1. 서론: 왜 직접 설치했나

개발용 Redis가 필요한 상황에서 비용 절감을 위해 EC2 인스턴스를 하나 더 띄우거나 AWS ElastiCache를 사용하지 않고, 기존에 젠킨스를 운영 중인 서버에 Redis를 설치해 활용하기로 결정했습니다.


2. 환경 준비

  1. EC2 인스턴스 선택: Amazon Linux 2 (t3.medium 이상 권장)

  2. 보안 그룹 설정:

    SSH(22번) 허용 Redis 기본 포트 6379은 점프 박스 터널링 전용

  3. ulimit 조정: 최대 파일 디스크립터 수 확대

    bash
    sudo vi /etc/security/limits.conf
    
    redis    soft    nofile  10000
    redis    hard    nofile  30000
    

    시스템이 동시에 처리할 수 있는 소켓 연결 수가 증가해, Redis 동시 접속과 대량 명령 실행 시 파일 디스크립터 부족으로 인한 오류를 방지할 수 있습니다.

bash
   sudo vi /etc/security/limits.conf

   redis    soft    nofile  10000
   redis    hard    nofile  30000

3. Jump Box 터널링 구성

개발 로컬에서 직접 Redis에 접속하려면, 퍼블릭 접근을 막은 EC2 위 Redis를 점프 박스를 통해 터널링해야 합니다.

bash
ssh -L 6379:localhost:6379 jump-user@bastion-host

이제 로컬 localhost:6379로 연결하면, Bastion 통해 Redis에 안전하게 접근할 수 있습니다.


4. Redis 소스 빌드 및 설치

bash
 1) 기본 패키지 설치
sudo yum update -y
sudo yum install -y gcc jemalloc-devel tcl

 2) Redis 소스 다운로드
wget https://download.redis.io/releases/redis-7.2.4.tar.gz
tar xzf redis-7.2.4.tar.gz
cd redis-7.2.4

 3) 컴파일 및 설치
make MALLOC=jemalloc
sudo make install

설치된 바이너리는 /usr/local/bin/redis-server/usr/local/bin/redis-cli에 위치합니다.


5. 주요 설정 변경 (redis.conf)

Redis 비밀번호 설정을 위해 requirepass를 추가하고, 터널링 환경에 맞춰 보호 모드를 해제합니다.

ini
// redis.conf
bind 0.0.0.0             # 모든 인터페이스에서 바인딩
protected-mode no        # 터널링 환경에서 보호 모드 해제
requirepass yourStrongPW # Spring 앱 연동을 위한 비밀번호
appendonly yes           # AOF 영속성 활성화
.. save 900 1             # RDB 스냅샷 주기 (원하면 설정)

5.1 Runtime 비밀번호 설정 예시

실행 중인 Redis에 redis-cli로 바로 비밀번호를 설정할 수도 있습니다.

bash
redis-cli CONFIG SET requirepass "yourStrongPW"
redis-cli CONFIG REWRITE  # 설정을 redis.conf에 반영

편집 후에는 --protected-mode no 오류와 보안 그룹을 함께 점검하세요.

주의: bind 0.0.0.0protected-mode no 설정은 네트워크 레벨에서 외부 접근이 철저히 차단되어 있어야 안전합니다. AWS 보안 그룹이나 VPC 방화벽을 통해 6379 포트를 Bastion 호스트 또는 내부망에서만 허용하도록 구성했는지 반드시 확인하세요.


6. Spring Boot 애플리케이션 연동

properties
// application.properties
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=yourStrongPW

spring-boot-starter-data-redis 의존성을 추가하고, LettuceConnectionFactory가 자동 구성되면 비밀번호를 통해 인증됩니다.


7. systemd 서비스 등록 및 자동 실행

systemd를 이용하면 서비스 상태 관리, 재시작 정책, 로그 수집 등이 표준화되어 서버 재부팅 후에도 자동으로 Redis가 기동하며, 장애 시 자동 재시작을 통해 운영 안정성을 크게 높일 수 있습니다.

ini
 /etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli -a yourStrongPW shutdown
Restart=always

[Install]
WantedBy=multi-user.target
bash
sudo mkdir /etc/redis
sudo cp redis-7.2.4/redis.conf /etc/redis/redis.conf
sudo systemctl daemon-reload
sudo systemctl enable redis
sudo systemctl start redis

systemctl status redis로 실행 상태를 확인합니다.


8. 보안 강화

  • AWS 보안 그룹: 6379 포트는 점프 박스 IP만 허용
  • OS 방화벽: iptables 또는 firewalld로 외부 직접 접근 차단
  • ACL/TLS: 필요 시 redis.conf에 TLS 설정과 ACL 사용자 역할 관리 구성

9. 모니터링 & 유지보수

bash
// 실시간 상태 확인
redis-cli -a yourStrongPW INFO memory CPU
redis-cli -a yourStrongPW --stat
  • Prometheus + Grafana: redis_exporter를 설치하여 메트릭 수집
  • CloudWatch: 사용자 정의 스크립트로 AOF 크기, 연결 수 전송

10. 전체 흐름 다이어그램


위 단계를 따라 EC2 개발 서버에 Redis를 직접 설치하고, Spring Boot 애플리케이션과 안전하게 연결하는 과정을 완료했습니다.