Skip to content

fix: reIssue 토큰 로직 수정#124

Merged
seungw0o merged 2 commits intodevfrom
fix/123-reissue_token_error
Apr 17, 2025
Merged

fix: reIssue 토큰 로직 수정#124
seungw0o merged 2 commits intodevfrom
fix/123-reissue_token_error

Conversation

@seungw0o
Copy link
Member

@seungw0o seungw0o commented Mar 7, 2025

개요

api 로직 수정

이슈 번호

변경사항

isRefreshing 을 추가하여 isRefreshing === true 라면 토큰을 공유하고 기존 요청을 다시 하도록 설정
이미 reIssue 요청이 진행중이면 refreshSubscribers 배열에 기존 요청을 저장해 두고, reIssue가 완료되면 한꺼번에 재시도
refrash_token도 만료된 상태라면 로그인 페이지로 사용자를 보냄

@seungw0o seungw0o added the 👾bug 버그가 발생한 경우 label Mar 7, 2025
@seungw0o seungw0o requested review from Juone2 and eejx0 March 7, 2025 00:57
@seungw0o seungw0o self-assigned this Mar 7, 2025
@seungw0o seungw0o linked an issue Mar 7, 2025 that may be closed by this pull request
1 task
@seungw0o seungw0o force-pushed the fix/123-reissue_token_error branch from 4abd637 to 38c707f Compare March 7, 2025 00:58
@seungw0o seungw0o requested a review from ehdms42 March 7, 2025 01:02
@Juone2
Copy link
Member

Juone2 commented Mar 7, 2025

isRefreshing << 이 true일 때 토큰을 공유한다?

isRefreshing이 true일 때랑, false일 때랑 차이?

@seungw0o
Copy link
Member Author

seungw0o commented Mar 7, 2025

일단 이 로직의 핵심은 한가지 요청이 아닌 여러가지의 요청이 왔을때 reissue 요청이 무분별하게 이루어지는 문제를 해결하기 위한 로직입니다

첫번째 요청이 와서 reissue를 요청할때 isRefreshing은 true가 되고 첫번째 요청이 끝나기 전까지 다른 요청들은 refreshSubscribers에 저장되어 첫번째 요청의 갱신이 끝나 isRefreshing이 false가 되고, refreshSubscribers에 저장되어 있던 요청들을 한번에 처리합니다.

즉 isRefreshing이 true라면 이미 특정 api 요청이 reissue 요청을 하고 있다는 뜻이기 때문에 다른 요청들은 reissue 요청을 하지 않고 기다리고 있는 상태가 됩니다

isRefreshing이 false가 됐다는것은 첫번째 요청이나 그 전의 요청이 갱신되었다는 뜻이며 새로운 요청이 왔을때 그 요청은 reissue 요청을 할 수 있다는 뜻이 됩니다

아직 정확한 확인을 해보지는 못하여 이 로직이 reissue 요청이 반복 되는것을 막는지는 정확히 모르고 있어 코드 수정이 생길 수 있습니다

@Juone2

@Juone2
Copy link
Member

Juone2 commented Mar 7, 2025

무분별한 reissue 요청이 일어난 이유는 못 찾은 건가요?

첫 번째 요청이 오면 isRefreshingtrue가 되고, 요청 끝날 때 까지 다른 요청들은 refreshSubscribers 저장이 된다 >> 무분별한 수많은 reissue 요청들은 refreshSubscribers 배열에 쌓이는데, 첫 번째 요청이 끝나면 refreshSubscribers 저장 되어 있던 api 요청들을 한 번에 처리한다가 잘 이해가 안 되긴하네요

-> 결국 요지는 "무분별한 reissue 요청이 일어난 원인"을 알아내고 그걸 고쳐야 할 듯 합니다.

위 원인을 알면 isRefreshing 조건에 따라 true, false 처리 해 주고, refreshSubscribers.. 복잡하게 이런 필요가 없잖아요

reissue 요청이 무분별하게 일어나는 원인이 저도 궁금하네요

@seungw0o


cc @eejx0 @ehdms42

@Juone2
Copy link
Member

Juone2 commented Mar 7, 2025

@seungw0o 금일까지 해결 하실 수 있나요? 그때까지 해결 못 하시면 저도 퇴근해서 보겠습니다. 지금 accessToken 만료 시간 몇 분인지 알 수 있나요?


cc @eejx0 @ehdms42

@seungw0o
Copy link
Member Author

seungw0o commented Mar 7, 2025

먼저 제가 reIssue 관련 문제를 알게 된 것은 어제 스퀘어쪽에서 DMS 어드민에서 reIssue 요청이 많이 온다고 하여서 알게 되었으며 이 문제를 의진 선배님께 알리고 해결해 보려고 했던 상황이였습니다. 일단 accessToken 만료 시간은 하루정도 되는 걸로 알고 있습니다

의진 선배님께서는 reissue 토큰 코드가 여러번 실행 되는지, accessToken 시간이 너무 짧은지, refreshToken이 만료 되었을때 로그아웃 처리가 되는지를 확인해보라고 하셨습니다, 제가 확인해본건 reissue 토큰 코드가 여러번 실행 되는쪽이였고 이를 수정한 것 같습니다

금일 전공 동아리 시간이 있어 전공 동아리 시간에 해결을 해보고 안되면 선배님의 도움이 필요 할 것 같습니다

@Juone2

@Juone2
Copy link
Member

Juone2 commented Mar 7, 2025

이 이슈가 전에 한 번 있었는데 어찌저찌 해결은 했던 걸로 기억 하는데 오래 돼서 좀 가물가물 합니다,,

accessToken 만료 시간 좀 줄이고 reissue쪽 금일 전공 동아리 시간 많으니까 우선적으로 봐 주세요

의진이랑 같이 고민 하면서 계속 코멘트 달아주세요 의진이랑은 따로 연락해서 이슈 계속 확인하겠습니다

@seungw0o

@Juone2
Copy link
Member

Juone2 commented Mar 16, 2025

이 이슈 어떻게 됐나요

@seungw0o
Copy link
Member Author

일단 스퀘어 문제는 해결이 되었고, 그 이후 이 이슈 해결 관련은 진행된게 딱히 없습니다
내일이 전공 동아리라 그때 정할 것 같습니다.

@Juone2
Copy link
Member

Juone2 commented Mar 31, 2025

이거 빨리 해결합시다

토큰 만료 에러 처리 로직 수정

- 기존에는 'Expired Token' 메시지로 에러 처리
- 401, 403 에러에 대해서 refresh token으로 재발급 요청
- 토큰 만료 외 다른 401, 403 에러에도 재발급 요청하여
  문제 발생 가능성 해결
@seungw0o seungw0o merged commit 44b0169 into dev Apr 17, 2025
1 check passed
@seungw0o seungw0o deleted the fix/123-reissue_token_error branch April 17, 2025 13:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

👾bug 버그가 발생한 경우

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ReIssue 토큰 문제

3 participants