Published on

로그인 만료

Authors
  • avatar
    Name
    길재훈
    Twitter

Refresh Token

__

[ 브라우저 ]

변수: accessToken

쿠키: refreshToken
(httpOnly - 자바스크립트 접근 불가)
(secure - 자물쇠(https))

<토큰만료시 대응법>
1. 토큰만료 에러 - 토큰만료시 에러 체크
2. 토큰 재발급 - refreshToken 을 통해 재발급
3. 실패했던 query 재시도

[refreshToken 으로 인가하여 accessToken을 받은후]
ㄴ recoil 에 접근하여 globalState 에 새로운 accessToken 을 저장

__
^
|
|
|
v
__

[ 백엔드 ]

[login] -- 엑세스/리프레시 인증(Authentication)
ㄴ accessToken(1h)
ㄴ refreshToken(2w)

[restoreAccessToken] -- 리프레시 인가
ㄴ refreshToken 을 받아 새로운 accessToken 발급

[fetchProfil] -- 엑세스 인가(Authorization)

__
|
|
|
[ DB ]

AccessToken 은 사용자의 로그인 정보를 담고 있는 JWT Token data 이다. RefreshToken 은 기간이 만료된 AccessToken 을 다시 받아올 수 있도록 만든 JWT Token data 이다.

간단하다.

AccessToken 을 받을 때, RefreshToken 역시 같이 받아온다. AccessToken 이 존재한다면, 해당 하는 원하는 page 에 접근 가능하지만, 기간이 만료 된다면 접근하지 못한다.

이렇게 만료Token 을 다시 재요청해서 새로운 만료되지 않은 토큰을 요청할때 RefreshToken 을 보낸다.

RefreshToken 역시 만료기간 이 존재하지만, 일반적으로 AccessToken 보다 기간이 크다(2주 - 1개월).

Server 에서는 RefreshToken 을 받아, 내용을 확인한후, 조건에 맞다면 새로 발급한 AccessToken 을 보내 응답한다.

이렇게 새로 발급된 AccessToken 을 사용하여, 이전에 요청했던 Query 를 다시 요청한다. Server 에서는 만료되지 않은 AccessToken 을 받으므로, 조건상 문제 없음을 확인하고 원하는 data 를 보내준다.(Authorization 한다)

사실, 우리가 사용하는 홈페이지에서 매번 이러한 과정으로 통해 시간 만료된 AccessToken 을 새로 발급받는다. 이렇게 새로 받는 과정을 silentAuthentication 이라 한다.

silentAuthentication

위의 과정은 지속 통신이 일어나지만, 사용자는 이러한 통신이 일어나는지 모른다. 그렇기에 조용한 인증 연장 이라 부른다.

Micro Service Arcitature(MSA)

Micro Service ArchitatureAPI 를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 소프트웨어 개발을 위한 접근 방식이다.

이전의 Monololithic Architature 는 모든 서비스가 하나의 프로젝트에 통합되어 있는 형태로 이루어져있다.

react 를 사용하면서, component 의 분할이 처음에는 불편하지만 추후 재사용 및 유지보수에 좋은 영향을 준다고 생각을 하고 있는데, MSA 역시 이러한 이유로 등장한것으로 생각이든다.

react 역시 소규모 프로젝트라면 합리적으로 분할을 최소화하여 작성가능한것 처럼 Monolithic Architature 역시 빠르고 합리적으로 작성가능하지만, 유지보수가 힘들다는 단점이 있다.

이러한 단점을 극복하고자 만들어진 서비스가 바로 MSA 이다.

MSAreact 처럼 각 서비스를 분할하여 사용하여, 관심사의 분리 및 유지보수에 특화 되어있다.

또한 서비스별 개별로 사용되기에 모듈화 되어 있어, 각 모듈별로 복구 및 확장이 가능하다.

보통 모듈을 구성할때 다음처럼 나누어 작성한다.

AuthService

인증관련 service

Resource Service

각 자원 서비스 Resource Service 는 그 덩치가 충분히 커지기 때문에, 각 서비스마다 또다시 분리해서 각 서비스를 구현한다.

ProfileService

Profile 서비스가 있다고 하면 해당 서비스기능을 가진 서버로 분할

BoardService

BoardService 가 있다고 하면 해당 서비스기능을 가진 서버로 분할

이러한 분할은 큰 장점을 제공하지만, 그 만큼 복잡함역시 같이 증가할 수 있다.

위의 과정은 지속 통신이 일어나지만, 사용자는 이러한 통신이 일어나는지 모른다. 그렇기에 조용한 인증(silentAuthentication) 이라 부른다.