Redis 의 구조는 다음과 같은 HashMap 구조이다. 특정 사용자에게 해당되는 다양한 정보를 관리하기 위해 HashMap 자료구조를 선택하였다.

{
		memberId : {
				provider : {provider},
				accessToken : {accessToken},
				refreshToken : {refreshToken}
		}
}

하지만 로그인 이후에는 사용자인지 검증하기 위해 사용자 아이디가 아닌 Token 을 사용한다. 대부분의 경우에 AccessToken 을, AccessToken 을 재발급 할 때에는 RefreshToken 을 사용한다.

Redis 의 특성 상 memberId 인 key 값과 provider 와 같은 hashKey 값 모두가 있어야 해당 값에 접근할 수 있다. AccessToken 을 가져오기 위해서는 memberId 가 필수값이라는 의미이다. 서비스에 접속할 때 했던 한번의 로그인으로 받아온 토큰을, 인증된 사용자접속할 권한이 있다는 의미로 사용할 예정이었으나 토큰 외에 사용자 아이디 값도 필수로 요구되는 문제가 발생하였다.

이는 Redis 를 사용했기 때문에 발생하는 문제였으므로 이로 인해 API 가 변경되는 것은 방지하고 싶었다. 따라서 사용자 아이디와 실제 토큰 정보를 가지고 있는 욜로가 서비스용 토큰을 한단계 감싸서 사용하기로 결정하였다. API 를 호출하는 측에서는 응답받은 토큰이 외부 서버에서 발행된 토큰인지 욜로가 서비스에서 발행한 토큰인지 고려할 필요가 없다.

욜로가 서비스용 토큰에는 사용자 아이디실제 토큰만이 들어있으므로 민감한 정보는 없기 때문에 JWT 를 사용하여 간편하게 토큰을 생성하였다.