Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

채채

[2주차]Redis 구축 및 로그아웃 API 제작 본문

dev-log/web_study

[2주차]Redis 구축 및 로그아웃 API 제작

HChaeEun 2023. 1. 9. 22:03

1️⃣JWT

2️⃣AccessToken

3️⃣Redis


📖JWT 란?

JWT는 JSON Web Token의 약어로, JSON 형식의 데이터를 저장하는 토큰이며 다음과 같이 세 부분으로 구성된다.

각 파트는 점으로 구분하며 JWT는 URI에서 파라미터로 사용할 수 있도록 URL-Safe 한 Base64url 인코딩을 사용한다.

 

  • 헤더(header): 토큰 종류와 해시 알고리즘 정보
  • 페이로드(payload): 토큰에 담을 클레임(claim, 정보의 한 조각)들을 포함
  • 시그니처(signature): secret key를 암호화한 일련의 문자열, 시그니처를 통해 토큰이 변조되었는지 확인

JWT 토큰 구성

참조: http://www.opennaru.com/opennaru-blog/jwt-json-web-token/

 

JWT (JSON Web Token) 이해하기와 활용 방안 - Opennaru, Inc.

JWT 는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다.JWT는 속성 정보 (Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준 입니다.

www.opennaru.com

 

 

📖AccessToken 이란?

AccessToken은 보호된 정보들에 접근할 수 있는 권한 부여에 사용된다.

즉, 클라이언트가 로그인을 할 때, 권한을 부여받을 수 있는 토큰인 accessToken을 받게 된다. 해커에 의해 토큰이 탈취된다면, 로그인을 통해 사용자 정보를 악용할 수 있다. (은행 로그인이라면 금전적 도난이 가능)

따라서 accessToken의 만료기간을 짧게 주고 오랫동안 사용할 수 없도록 한다.

 

여기서 refreshToken이라는 개념이 사용된다.

refreshToken이란 accessToken이 만료될 때마다 refresh하는 토큰이다.

쉽게말해 access token은 로그인 정보에 접근할 수 있는 카드키, refresh token은 카드키 재발급이라고 생각하면 된다.

 

ref) 사용자의 편의보다 정보를 지키는 것이 더 중요한 웹사이트들은 refresh token을 사용하지 않는 곳도 있다. 그러면 유저는 일정 주기마다 새로 로그인을 해야 할 것이다.

ex) 정부 사이트, 은행 사이트 등의 로그인 제한시간이 있는 사이트

 

현재 진행하고 있는 프로젝트는 다음과 같이 Access Token만을 이용한 서버 인증 방식을 사용한다.

참조: https://velog.io/@boo1996/Token

 

Token

Token 기초 + 스프린트 리뷰

velog.io

 

 

📖Redis 란?

key, value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템(DBMS)이다. 데이터 베이스가 있는데도 Redis라는 인메모리 데이터 구조를 사용하는 이유가 무엇일까?

데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는다는 장점이 있는 반면, 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져 느려질 수 있는 단점 또한 내포한다.

이때 캐시 서버를 도입하여 한 번 읽어온 데이터를 임의의 공간(Redis)에 저장하여 다음에 읽을 때, 빠르게 결괏값을 받을 수 있도록 한다.

 

로그인 시 accessToken을 key 값으로, userId를 value값으로 redis에 저장한다.

accessToken을 key값으로 하는 이유는 무엇일까?

만일 A라는 사용자가 크롬에서 서비스 로그인을 하고 마이크로 엣지에서도 서비스 로그인을 하면, userId는 동일하나 서로다른 accessToken을 발급받게 된다. 따라서 userId를 key값으로 redis에 저장했을 경우 크롬에서 로그아웃을 했을 때, 마이크로 엣지도 로그아웃 되는 경우가 발생하며. 유일한 값을 보장하기 위해 accessToken을 redis의 key값으로 지정한다.


 

Redis Cloud 사용법

 

[REDIS] 📚 Redis를 클라우드로 사용하자 [Redislabs]

Redis 클라우드 MySQL을 사용하기 위해서 워크벤치를 설치했던 것 처럼, 레디스를 사용하려면 레디스 데이터베이스를 설치해야 한다. 직접 서버 컴퓨터에 직접 설치할 수도 있지만, 레디스를 호스

inpa.tistory.com

계정을 등록하고 얻은 레디스 host, port, username, password 등은 env 파일에 환경변수로 저장해두고 사용한다.

레거시 모드를 설정해주면 버전 문제 없이 호환되어 사용이 가능하다.

Redis 연결

redis-cli를 사용하기 위해 shell 에서 명령어를 입력하고 client를 실행한다.

> npm install -g redis-cli # redis cli 설치
> rdcli -h <endpoint> -p <port> -a <password> # redis cloud 접속

 

redis-cli 실행

 

자바스크립트 redis 문법은 대부분 redis cli 문법 그대로 메서드 형태로 붙여 쓰면 된다.

자바스크립트에서 redis db와 연결해준 객체에 명령어를 붙여 사용한다.

대표적인 문법은 다음과 같다.

  • redisClient.set(key, value): redis에 key - value 값 저장
  • redisClient.get(key): redis에서 key값을 통해 value값 호출
  • redisClient.del(key): redis에서 key값을 통해 value값 삭제
  • redisClient.exists(key): redis에 key가 존재하는지 확인
  • redisClient.rename(key, rename): key값이 있다면 rename으로 값을 변경

로그인을 할 때에 accessToken과 userId가 redis에 저장되게 코드를 작성하고 테스트 해본다.

로그인 코드를 실행시켜 발급되는 accessToken을 확인하고, redis-cli를 통해 해당 토큰이 있는지 확인한다.

다음과 같이 key * 를 통해 발급된 토큰을 확인할 수 있었으며. 토큰의 value 값을 조회했을 때 userId를 확인할 수 있다. 

 

'dev-log > web_study' 카테고리의 다른 글

[4주차]알림 시스템 API  (0) 2023.01.17
[3주차] 댓글 기능 관련 API 제작  (0) 2023.01.09