도커 (Docker)

Docker에서 PHP와 Redis 연동하기: 세션 관리의 새로운 표준


Docker에서 PHP와 Redis 연동하기: 세션 관리의 새로운 표준




최초 작성일 : 2025-07-30 | 수정일 : 2025-07-30 | 조회수 : 10


Docker에서 PHP와 Redis 연동하기: 세션 관리의 새로운 표준

안녕하세요! 오늘은 Docker 기반의 Ubuntu, Apache, PHP 환경에서 Redis를 연동하여 PHP 세션을 관리하는 방법에 대해 알아보겠습니다.

웹 애플리케이션의 사용자가 늘어나거나 서버를 여러 대로 확장(Scale-out)할 때, 기본 파일 기반 세션은 한계를 드러냅니다. 이때 메모리 기반 스토리지인 Redis를 세션 핸들러로 사용하면, 여러 서버 간에 세션을 손쉽게 공유할 수 있고 속도 또한 비약적으로 향상됩니다.

이 글에서는 Docker 컨테이너 내부에서 Redis PHP 확장을 설치하고, CLI와 Apache 환경 모두에 설정을 적용하여 안정적으로 세션 공유를 구현하는 전체 과정을 안내합니다.

 

1. Redis PHP 확장 모듈 설치

 

가장 먼저 PHP가 Redis와 통신할 수 있도록 redis.so 확장 모듈을 설치해야 합니다. Docker 컨테이너 내부에 접속하거나 Dockerfile에 아래 명령어를 추가하여 실행하세요.

Bash

 

# apt 패키지 리스트 업데이트 및 필수 패키지 설치
apt-get update && apt-get install -y \
    php-pear \
    php-dev \
    gcc \
    make \
    autoconf

# pecl을 통해 redis 확장 모듈 설치
pecl install redis

💡 pecl 설치 후에는? pecl install redis 명령이 성공적으로 끝나면, PHP가 모듈을 인식할 수 있도록 설정을 활성화해야 합니다. 가장 깔끔한 방법은 phpenmod를 사용하는 것입니다. PHP 버전에 맞게 아래 명령어를 실행하세요. (예: PHP 7.4)

Bash

 

phpenmod -v 7.4 -s ALL redis

이 명령어는 php.ini 파일을 직접 건드리지 않고, 모듈별 설정 파일을 체계적으로 관리하게 해 주어 유지보수에 매우 유리합니다.

 

2. php.ini 위치 확인 및 Redis 세션 설정

 

PHP는 실행 환경(CLI, Apache 등)에 따라 다른 php.ini 설정 파일을 로드합니다. 따라서 커맨드 라인(CLI)용과 웹 서버(Apache)용 설정을 반드시 각각 진행해야 합니다.

여기서는 php.ini를 직접 수정하는 대신, conf.d 디렉터리에 별도의 설정 파일을 생성하여 관리하는 모범 사례를 따릅니다.

 

▶️ CLI용 php.ini 설정

 

Cron 작업이나 배치 스크립트 등 커맨드 라인에서 실행되는 PHP 스크립트가 Redis 세션을 사용하도록 설정합니다.

설정 파일 위치 확인:

Bash

 

php --ini

출력된 내용에서 Loaded Configuration File 항목을 통해 설정 파일의 전체 경로를 확인합니다. (예: /etc/php/7.4/cli/php.ini)

Redis 세션 설정 파일 생성: conf.d 디렉터리에 세션 설정 파일을 생성합니다. 파일 이름 앞의 숫자는 설정 파일의 로딩 순서를 의미합니다.

Bash

 

# /etc/php/7.4/cli/conf.d/30-redis-session.ini 파일 생성 및 설정 추가
echo 'session.save_handler = redis' > /etc/php/7.4/cli/conf.d/30-redis-session.ini
echo 'session.save_path = "tcp://127.0.0.1:6379"' >> /etc/php/7.4/cli/conf.d/30-redis-session.ini

 

▶️ Apache용 php.ini 설정

 

사용자가 웹 브라우저를 통해 접속할 때 사용되는 PHP 환경에 Redis 세션을 적용합니다.

설정 파일 위치 확인:

⚠️ 주의: 잘못된 방법 터미널에서 php -i | grep "Loaded Configuration File" 명령어를 실행하는 것은 Apache용 설정이 아닌 CLI용 설정 경로를 보여주므로 절대 사용하면 안 됩니다.

가장 확실한 방법은 웹 서버에 <?php phpinfo(); ?> 코드를 담은 PHP 파일을 만들고, 웹 브라우저로 접속하여 Loaded Configuration File 항목을 직접 확인하는 것입니다. 일반적으로 경로는 /etc/php/7.4/apache2/php.ini 입니다.

Redis 세션 설정 파일 생성: CLI와 마찬가지로 Apache용 conf.d 디렉터리에도 설정 파일을 추가합니다.

Bash

 

# /etc/php/7.4/apache2/conf.d/30-redis-session.ini 파일 생성 및 설정 추가
echo 'session.save_handler = redis' > /etc/php/7.4/apache2/conf.d/30-redis-session.ini
echo 'session.save_path = "tcp://127.0.0.1:6379"' >> /etc/php/7.4/apache2/conf.d/30-redis-session.ini

💡 session.save_path IP 주소 127.0.0.1은 Redis가 웹 서버와 같은 컨테이너에 설치된 경우입니다. 만약 Redis가 별도의 Docker 컨테이너(예: my-redis-container)에 있다면 해당 컨테이너의 이름이나 IP 주소(tcp://my-redis-container:6379)를 사용해야 합니다.

 

3. 서비스 재시작 및 확인

 

모든 설정이 끝났으면 변경 사항을 시스템에 적용할 차례입니다.

Apache 재시작

Bash

 

service apache2 restart

설정 적용 확인

CLI: 터미널에서 php -m | grep redis 명령어로 redis 모듈이 보이는지 확인합니다.

Apache: phpinfo() 페이지를 새로고침하여 session 섹션의 session.save_handler 값이 redis로 변경되었는지 확인합니다.

 

4. 최종 세션 테스트

 

이제 실제로 Redis에 세션 데이터가 저장되는지 테스트해 보겠습니다. 웹 서버 루트 디렉터리에 session_test.php 파일을 만들고 아래 코드를 작성하세요.

PHP

 

<?php
// 세션을 시작합니다. 설정이 올바르다면 이 세션은 Redis에 저장됩니다.
session_start();

// 'visit_count' 세션 변수를 가져와 1 증가시킵니다. 없으면 1로 초기화합니다.
$count = isset($_SESSION['visit_count']) ? $_SESSION['visit_count'] : 0;
$count++;
$_SESSION['visit_count'] = $count;

// 현재 서버의 호스트 이름과 방문 횟수를 출력합니다.
echo "<h1>PHP-Redis Session Test</h1>";
echo "Server Hostname: <b>" . gethostname() . "</b><br>";
echo "Your visit count on this server is: <b>" . $count . "</b>";
?>

웹 브라우저에서 session_test.php 파일에 접속한 뒤 새로고침할 때마다 visit count가 1씩 꾸준히 증가한다면 모든 설정이 성공적으로 완료된 것입니다.

 

📝 정리 및 핵심 포인트

 

구분설정 파일 경로 (예시: PHP 7.4)설정 방법
모듈 활성화/etc/php/7.4/mods-available/redis.inipecl install redis 후 phpenmod로 활성화
CLI 세션/etc/php/7.4/cli/conf.d/30-redis-session.inisession.save_handler, save_path 설정
Apache 세션/etc/php/7.4/apache2/conf.d/30-redis-session.inisession.save_handler, save_path 설정

Sheets로 내보내기

 

마무리하며

 

지금까지 Docker 환경에서 PHP와 Redis를 연동하여 세션을 관리하는 방법을 자세히 살펴보았습니다. 이 가이드를 통해 여러분의 PHP 애플리케이션은 더 빠르고 확장성 있는 세션 관리 시스템을 갖추게 되었습니다. 이제 여러 서버 인스턴스에서도 사용자의 로그인 상태를 일관되게 유지할 수 있습니다.

Tags  #Docker  #PHP  #Redis  #세션관리  #웹개발  

닉네임:
댓글내용:

📸 이미지 프롬프트 복사 완료!
이제 어떤 이미지 생성 도구로 이동하시겠어요?
🧠 ImageFX 🧪 Whisk