2025년 7월 27일
이론
조회 : 32|2분 읽기

[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
    1sudo vi /etc/security/limits.conf
    2
    3redis    soft    nofile  10000
    4redis    hard    nofile  30000
    시스템이 동시에 처리할 수 있는 소켓 연결 수가 증가해, Redis 동시 접속과 대량 명령 실행 시 파일 디스크립터 부족으로 인한 오류를 방지할 수 있습니다.
bash
1   sudo vi /etc/security/limits.conf
2
3   redis    soft    nofile  10000
4   redis    hard    nofile  30000

3. Jump Box 터널링 구성

개발 로컬에서 직접 Redis에 접속하려면, 퍼블릭 접근을 막은 EC2 위 Redis를 점프 박스를 통해 터널링해야 합니다.
bash
1ssh -L 6379:localhost:6379 jump-user@bastion-host
이제 로컬 localhost:6379로 연결하면, Bastion 통해 Redis에 안전하게 접근할 수 있습니다.

4. Redis 소스 빌드 및 설치

bash
1 1) 기본 패키지 설치
2sudo yum update -y
3sudo yum install -y gcc jemalloc-devel tcl
4
5 2) Redis 소스 다운로드
6wget https://download.redis.io/releases/redis-7.2.4.tar.gz
7tar xzf redis-7.2.4.tar.gz
8cd redis-7.2.4
9
10 3) 컴파일 및 설치
11make MALLOC=jemalloc
12sudo make install
설치된 바이너리는 /usr/local/bin/redis-server/usr/local/bin/redis-cli에 위치합니다.

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

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

5.1 Runtime 비밀번호 설정 예시

실행 중인 Redis에 redis-cli로 바로 비밀번호를 설정할 수도 있습니다.
bash
1redis-cli CONFIG SET requirepass "yourStrongPW"
2redis-cli CONFIG REWRITE  # 설정을 redis.conf에 반영
편집 후에는 --protected-mode no 오류와 보안 그룹을 함께 점검하세요.
주의: bind 0.0.0.0protected-mode no 설정은 네트워크 레벨에서 외부 접근이 철저히 차단되어 있어야 안전합니다. AWS 보안 그룹이나 VPC 방화벽을 통해 6379 포트를 Bastion 호스트 또는 내부망에서만 허용하도록 구성했는지 반드시 확인하세요.

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

properties
1// application.properties
2spring.redis.host=localhost
3spring.redis.port=6379
4spring.redis.password=yourStrongPW
spring-boot-starter-data-redis 의존성을 추가하고, LettuceConnectionFactory가 자동 구성되면 비밀번호를 통해 인증됩니다.

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

systemd를 이용하면 서비스 상태 관리, 재시작 정책, 로그 수집 등이 표준화되어 서버 재부팅 후에도 자동으로 Redis가 기동하며, 장애 시 자동 재시작을 통해 운영 안정성을 크게 높일 수 있습니다.
ini
1 /etc/systemd/system/redis.service
2[Unit]
3Description=Redis In-Memory Data Store
4After=network.target
5
6[Service]
7User=redis
8Group=redis
9ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
10ExecStop=/usr/local/bin/redis-cli -a yourStrongPW shutdown
11Restart=always
12
13[Install]
14WantedBy=multi-user.target
bash
1sudo mkdir /etc/redis
2sudo cp redis-7.2.4/redis.conf /etc/redis/redis.conf
3sudo systemctl daemon-reload
4sudo systemctl enable redis
5sudo systemctl start redis
systemctl status redis로 실행 상태를 확인합니다.

8. 보안 강화

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

9. 모니터링 & 유지보수

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

10. 전체 흐름 다이어그램


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