도커 실습 7 - 역방향 프록시를 이용한 마이크로 서비스의 세션 처리 > 도커 & 쿠버네티스

본문 바로가기

[실습] 도커 실습 7 - 역방향 프록시를 이용한 마이크로 서비스의 세션 처리

필기자
2024-10-29 15:13 308 0

본문

목차
  • Redis 개요
  • Redis Session
  • Redis 컨테이너 설치 및 세션 테스트

Redis 개요
Redis(Remote Dictionary Server)는 고성능 키-값 저장소로, 데이터베이스, 캐시, 메시지 브로커 등 다양한 용도로 사용됨. Redis는 메모리 기반으로 동작하기 때문에 디스크 기반의 데이터베이스보다 훨씬 빠른 속도를 자랑함. 다양한 데이터 타입을 지원하며, 단순한 문자열뿐만 아니라 리스트, 셋, 해시 등도 저장할 수 있음.
 
2049277884_KDYxklMm_fceb4aa05aecbb61c09781f7f37981aacdd56d69.png
특징
  • 메모리 기반: 빠른 읽기/쓰기 속도
  • 지속성: 필요에 따라 디스크에 데이터를 저장할 수 있음
  • 레플리케이션: 데이터 복제를 통한 고가용성 지원
  • 트랜잭션: 여러 연산을 원자적으로 처리
  • Pub/Sub: 메시지 브로커 기능도 제공

Redis Session
웹 애플리케이션은 사용자의 상태를 유지하기 위해 세션을 사용함. 그러나 세션 데이터를 애플리케이션 서버에 저장하면 서버가 여러 대일 경우 세션 공유에 대한 문제가 있음. 이런 문제를 해결하기 위해 Redis 같은 메모리 저장소를 사용하여 세션 정보를 중앙에서 관리함.

2049277884_B4Ge9nqd_81ff91a425b572a2e41b2616519ea81cf360beb3.png

장점
  • 빠른 접근: 메모리 기반으로 빠르게 세션 데이터에 접근 가능
  • 확장성: 여러 서버 간의 세션 공유가 쉬움
  • 지속성: 필요에 따라 세션 데이터를 디스크에 저장하여 안정성 확보
Redis는 빠른 속도와 다양한 용도로 인해 많이 사용되고 있으며, 특히 세션 관리에 유용함.

Redis 컨테이너 설치 및 세션 테스트

redis 도커 허브
역방향 프록시를 이용한 마이크로 서비스의 세션 처리 구성도

2049277884_tufFNjI4_ce62a303e56e11dcb4f993eb5acec2b146179976.png
redis 컨테이너 설치 명령어

docker run -d --name myredis --net php-mysql -p 6379:6379 redis


2049277884_Dfv2NGkt_cc8f6f8f1bd9ea2f0386e6368aa7de798acd9208.png

redis session store 사용을 위한 각 컨테이너(mytaskapi, myuserapi) 모듈 설치

docker exec -it mytaskapi /bin/bash
pecl install redis
docker-php-ext-enable redis
exit
docker exec -it myuserapi /bin/bash
pecl install redis
docker-php-ext-enable redis
exit


redis_session.php 설정 파일 생성
  • /home/kky/php/task/redis_session.php
  • /home/kky/php/user/redis_session.php

// Redis에 연결
$redis = new Redis();
$redis->connect('myredis', 6379);

// 세션 핸들러 설정
session_set_save_handler(
    function ($save_path, $session_name) use ($redis) {
        return true;
    }, function () use ($redis) {
        return true;
    }, function ($session_id) use ($redis) {
        $data = $redis->get("session:$session_id");
        error_log("Read session data: $data");
        return $data ? $data : '';
    }, function ($session_id, $session_data) use ($redis) {
        return $redis->setex("session:$session_id", 3600, $session_data);
    }, function ($session_id) use ($redis) {
        return $redis->del("session:$session_id");
    }, function ($maxlifetime) use ($redis) {
        return true;
    }
);


redis 세션 설정 및 확인 테스트 파일 생성
  • home/kky/php/user/redis_session_set.php

include_once ("./redis_session.php");
session_start();
$_SESSION['username'] = "홍길동";
$_SESSION['userid'] = "kky";

echo "사용자 이름 : {$_SESSION['username']}<br>";
echo "사용자 아이디 : {$_SESSION['userid']}<br>";
  • home/kky/php/task/redis_session_get.php

include_once ("./redis_session.php");
session_start();

echo "사용자 이름 : {$_SESSION['username']}<br>";
echo "사용자 아이디 : {$_SESSION['userid']}<br>";


역방향 프록시 설정 확인
2049277884_5UuAIxh3_1cdbbfa4bae034325324be6e2f173ce2eb8e7a13.png

redis 세션 테스트 2049277884_LcfRxoQ1_43128efd6e140440656a095546094dbf04edf29b.png2049277884_751zjpBI_7b68ae5c89edd3b8d66bc3183666f1485ffbae89.png2049277884_ZJAiOj28_414c0e49a01dd6bac1bd8f7e6549d3fda47cae59.png
 

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색