이번 포스팅에서 설명하기로 한 Redis에 대해서 먼저 설명하겠다. Redis란, 우리가 NoSQL이라 불러온 key-value 데이터베이스의 일종이다. NoSQL에 대한 자세한 설명은 아래의 링크를 참조하기 바란다.
>> NoSQL 설명
Redis는 NoSQL 기반이기 때문에 매우 빠르게 액세스가 가능하다. 근데 아마 가장 궁금해 할만한 부분은 "왜 데이터베이스가 있는데 굳이 Redis 데이터베이스를 또 사용해야 하는가"일 것이다. 블랙토큰을 저장하는 Repository를 만들어서 관리하면 되지 않을까?
물론, 그렇게 해도 상관은 없지만, 매우 비효율적일 것이다. 예를 들어 로그아웃된 사용자의 access token 값이 BlackTokenRepository에 저장된다고 해보자. 하루에 수백, 수천 명의 사용자가 로그아웃을 하고, 다음날과 그 다음날에도 계속 반복된다. 그럼 Repository는 어떻게 될까? 관리자가 따로 delete 하지 않는 한 계속 쌓여만 갈 것이다.
access token은 token의 유효 기간을 넘기면, 쓸 수 없기 때문에 만료된 토큰을 굳이 Repository에 저장하고 있을 필요가 없다. 즉, access token의 만료와 동시에 DB에서 자동 삭제되도록 구현하면 편의성이 매우 높아진다는 것이다. 바로 이 자동화 기능을 이용하기 위해 로그아웃에 Redis 서버를 이용한다.
꼭 자동화를 위해서가 아니더라도 Redis를 사용하는 이유는 다양하다. Redis는 캐시 서버로서, 한번 읽어온 데이터를 임의의 공간에 저장하므로, 동일한 요청에 대해 빠르게 결과 값을 얻을 수 있다. 그러므로 사용자가 많은 서비스에 대해 DB의 부하를 줄이고, 서비스의 속도도 느려지지 않게 하는 장점이 있다.
지금부터 Redis를 사용하는 방법을 알아보자. 실제 배포는 리눅스 환경에서 진행할 것이지만, 로컬 환경(Window OS)에서 API를 테스트 해보기 위해 로컬환경에도 설치해주는 것이 좋다. 아래의 사이트를 참고하여 설치를 진행하였다.
>> Inpa Dev님 블로그
① Redis 다운로드
② Redis 서버 실행
③ 실행창 열기
④ 블랙 토큰 확인하기
⑤ 로컬 환경에서 로그 아웃 API 테스트
실제 서비스 환경을 위해서는 EC2 환경에 설치해야 한다.
① Redis CLI 설치
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install redis-server
$ redis-server --version // 설치 확인
② 기초 설정 변경
sudo vi /etc/redis/redis.conf
아래와 같이 최대 메모리 사양을 256mb로 변경한다.
※ vi에서 문자열 검색하기
command 모드에서 "/찾을 문자열"을 입력하고(""는 입력하지 않는다) 엔터를 누르면 가장 먼저 일치하는 문자열로 이동한다. 그 때부터 n버튼을 누르면 일치하는 다음 문자열로 이동한다. 이를 통해 maxmemory를 찾아 변경하면 된다.
메모리 초과 사용시 처리 방식을 allkeys-lru로 설정한다. allkeys-lru 옵션은 가장 오래된 데이터를 삭제하고, 새로운 데이터를 저장하는 옵션이다.
포트번호는 원하는대로 설정하면 된다. default 포트인 6379 그대로 설정해주었다.
외부접속 허용을 위해 bind 0.0.0.0으로 바꾸어준다. 이렇게 하면 모든 외부 접속을 허용하게 된다.
설정 파일을 저장하고 vi를 빠져나온다.
③ Redis 재시작
sudo systemctl restart redis-server.service
④ 보안그룹 변경
⑤ Redis 정상 동작 확인
① EC2 환경에 파일 빌드하기
② 두가지 방법으로 Redis의 동작을 확인할 수 있다.
redis-cli -h {내 탄력적 IP} -p 6379 // {}는 입력하지 않는다.
③ 결과 확인
※ 토큰만 조회하기
backup이 같이 보이는게 싫다면, KEYS e* 이라고 해서 e로 시작하는 키 값만 조회할 수도 있다. 적어도 우리가 생성한 JWT는 항상 앞글자가 e이기 때문에 이러한 방식으로 조회하는 것도 가능하다.
① key에 해당하는 value 가져오기
② Redis 데이터베이스 초기화하기
③ 키의 TTL 조회하기