본문 바로가기
AWS

스프링프레임워크&부트 aws redis 연동(로컬에서 실서버까지)[3]

by 코딩공장공장장 2021. 10. 17.

안녕하세요. 

 

스프링프레임워크&부트  aws redis 연동(로컬에서 실서버까지) 3편입니다.

 

이전 포스팅에서 로컬환경에서 세션정보를 레디스 로컬 서버에 옮겨 관리 하게끔 했다면 

 

이번 포스팅에서 실서버에서 작업을 해보도록 하겠습니다.

 

 

이전 포스팅을 안 보신 분들은 이전 포슽팅을 꼭 따라하신 후 이번 포스팅으 따라하시기 바랍니다.

https://developer111.tistory.com/73

 

 

스프링 프레임워크 redis 연동(로컬에서 실서버까지)[1]

안녕하세요. 다중서버 환경에서 세션이 was 안에서 관리가 되면 세션 간의 공유가 되지 않아 특정 서버가 다운 되었을때 해당 서버의 사용자들은 다른 서버로 접속경로가 바뀌어도 로그인을 다

developer111.tistory.com

 

 

 

 

작업환경

  • aws ec2 amazon linux2
  • Amazon ElastiCache redis
  • 스프링 프레임워크 4.3.2(스프링 시큐리티 4.1.3)
  • 톰캣7
  • mariadb
  • jdk1.8

 

이전편에서 테스트한 프로젝트를 실서버에 그대로 호스팅을 하였으며 

 

redis 관련 설명이 주 목적이기 때문에 프로젝트 호스팅 내용은 다루지 않고 바로 본론으로 들어가겠습니다. 

 

테스트를 하실 분들은 이전편부터 참조하여 실서버에 자바, was, db, 프로젝트가 모두 잘 작동할 수 있게 설치하여

 

호스팅하시기 바랍니다.

 

 

목차

  • aws redis 서버 생성
  • 실서버에 redis 설치
  • was(톰캣) library 다운
  • was(톰캣)와 redis서버 연동 설정
  • 테스트
  • 세션 클러스터링 테스트

 

 

aws redis 서버 생성

 

 

먼저 ec2의 보안그룹에서 다음과 같은 인바운드 규칙의 보안그룹을 하나 만들어주세요.

 

redis에서 사용할 방화벽 설정입니다.

 

 

 

 

ElastiCache 메뉴로 들어가서 왼쪽 탭의 Redis 항목을 선택하고 파란색 생성버튼을 클릭합니다.

 

 

 

 

아래와 같은 설정으로 redis 서버를 생성합니다.

 

 

 

 

 

실서버에 redis 설치

 

ec2 설정

sudo yum -y update
sudo yum -y install gcc make

 

redis 설치 명령어

wget https://download.redis.io/releases/redis-3.2.10.tar.gz
tar xzf redis-3.2.10.tar.gz
cd redis-3.2.10
make

 

 

redis 환경설정

sudo mkdir /etc/redis

sudo mkdir /var/lib/redis

sudo cp src/redis-server src/redis-cli /usr/local/bin

sudo cp redis.conf /etc/redis/

 

 

 

 

was(톰캣) library 다운

 

  • tomcat-redis-session-manager-2.0.0.jar
  • jedis-2.5.2.jar
  • commons-pool2-2.2.jar

로컬환경에서 was 아래 설치했던 위의 jar 파일들을 실서버에서도 동일하게 다운 해줍니다. 

 

저는  실서버 was 경로가 /usr/local/tomcat7 이기 때문에

 

/usr/local/tomcat7/lib 밑에 위의 세 jar파일을 다운 받았습니다.

 

(별도의 명령어 없이 파일질라를 통해 넣어주었습니다.)

 

 

 

 

was(톰캣)와 redis서버 연동 설정

 

 

was의 context.xml 을 설정합니다.

vi /usr/local/tomcat7/conf/context.xml

 

참고로 경로는 자신의 was 경로에 맞춰서 cont/context.xml을 열어주세요.

 

 

<Context> 태그안에 로컬에서 적어준것 처럼

 

<Valve className="com.bluejeans.tomcat.redissessions.RedisSessionHandlerValve"/>

<Manager className="com.bluejeans.tomcat.redissessions.RedisSessionManager" database="0" host="redis 엔드포인트" maxInactiveInterval="30" port="6379"/>

 

 

참고로 위의 redis 엔드 포인트는 아래 이미지에서 참조하여 기본 엔드포인트를 포트제외하고 적어주시면 됩니다.

 

 

 

 

 

 

테스트 

자 이제 모든 환경설정이 되었고 redis에 원격 접속해보겠습니다.

redis-cli -h 기본엔드포인트

 

 

/login 페이지에 접속후 아래 명령어를 날려보세요.

 

 

 

get을 통해 조회한 string 문자열을 메모장에 붙여넣어 test@naver.com을 찾기 해보세요.

 

아직 로그인 하지 않아 아무것도 찾아지지 않을 것입니다. 

 

자 그런다음 이메일test@naver.com 비밀번호 1111으로 로그인해보세요.

 

 

그런 다음 다시 아래 명령어를 날리고 조회된  string 문자열을 메모장에 붙여넣어

 

이메일 값인 test@naver.com을 검색해보세요. 내용이 나올 것입니다.

 

 

 

이를 통해 레디스 서버로 세션 정보가 넘어갔음을 알 수 있습니다. 

 

 

레디스 서버에서 flushall 명령어를 사용해보고 브라우저에서 F5를 눌러보세요.

 

레디스  db를 초기화시키는 flushall을 사용하고 웹사이트의 F5를 누르니

 

로그인 인증이 풀리는 것을 확인 할 수 있을 것입니다. 

 

레디스 서버의 db정보를 통해 세션이 관리됨을 확인하엿습니다. 

 

 

 

세션 클러스터링 테스트

 

자 이제, 지금까지 설정한 ec2를 그대로 백업하여 서버를 하나 더 만들고 하나의 도메인에 두 서버를 연결시키고

 

ELB까지 설정하고 같은 과정으로 테스트를 해보겠습니다. 

 

 

도메인으로 접속후 로그인 까지 실행해보았습니다. 

 

두개의 서버의 로그를 확인해보니

 

 

 

위와 같이 프로젝트에 입력해놓은 로그가 찍히는 서버가 있고

 

 

 

was 로그 외에 다른 로그가 찍히지 않는 서버가 있습니다. 

 

위의 서버로 로그가 찍힌다는 것은 위의 서버로 접속중이라는 것을 알 수 있습니다.

 

 

다시한번 redis에 접속하여 키값을 조회해보고 test@naver.com이 조회되는지 확인해보았습니다.

 

 

 

정상적으로 조회가 됨을 확인 했고,

 

 

이제 접속중인 서버를 중지 시키겠습니다.

 

 

 

중지 이후 레디스 서버에서 다시 한번 키값을 조회하고 test@naver.com 이 있는지 확인해보세요.

 

여전히 잘 조회가 될 것입니다. 

 

그리고 웹사이트에서 F5를 눌러보세요.

 

로그인이 풀리지 않고 여전히 로그인된 아래 페이지를 확인 할 수 있을 것입니다.

 

 

 

또한 다른 서버의 로그를 확인해보면

 

 

이제 이쪽 서버로 접속이 됨을 확인 할 수 있습니다. 

 

 

 

이렇게 한쪽 서버가 죽어도 세션이 was안에서 관리되는게 아닌 redis세션 서버에서 관리가 되니

 

사용자의 서버 경로가 바뀌어도 로그인이 풀리지 않고 정상적으로 잘 작동 됨을 확인했습니다. 

 

1편부터 3편까지하여 로컬에서 실서버까지 모두 적용을 하였습니다. 

 

 

 

저 또한 처음 구현해보는 것이기 때문에 세부적인 설정에 대해 잘 모르는 부분이 많아 앞으로도 꾸준히 사용을 하며

 

구체적인 내용을 공유하도록 하겠습니다. 

 

부족한 부분이 있다면 댓글을 통해 공유해주시면 감사하겠고,

 

혹시나 모르는 부분이 있으시다면 제가 아는 선에서 최대한 자세히 알려드리도록 하겠습니다.

반응형