본문 바로가기
CS

pending 이란?

by 갈잃자 2024. 7. 8.

개요: accessToken 이 만료 또는 오류가 난 상황에서 여러 명의 고객이 accessToken을 사용해야 하는 api 를 이용 시, 어떻게 처리가 될지 궁금해서 공부


처음엔 단순 궁금증으로 시작했는데 pending 기법이라는 개발기법이 따로 있어서 알아보게됨 (기본적인 기법이라는데, 난 왜 2년차가 되서야 처음 들어본걸까)

 

pending이란

  • 보류중 이라는 뜻.
  • 서버나, api 호출 시, 갑작스런 오류로 인해 지연되게 된다면, 해당 일을 처리하는 코드가 작동되고 난 뒤에 동작하게 끔 설계하는것(stack에 동작함수를 넣어놓고 처리가 되면 작동시킴)

 

상황 및 잘못된 api 요청 예시

  • accessToken의 만료일자 지나서, accessToken을 새롭게 받는 코드를 제작했다고 가정해보자.
  • api 요청시, 우선 저장된 accessToken을 확인할 것이다. 그리고 요청을 보낸 뒤, 400번대 에러가 발생할 것!
  • 개발자는 accessToken이 만료될 걸 고려해서, 400번대 에러가 난다면 accessToken을 재발급하는 로직을 제작했을 것.
  • 만약 accessToken을 필요로 하는 api 요청이 100건이 한번에 들어왔다면? 모든 요청은 400번대 에러를 받은 뒤, accessToken 재발급받는 요청을 100번을 보내게 되는것이다.
  • accessToken을 100번 요청하게 된다면, 비동기적으로 가장 마지막에 accessToken을 받은 요청만 accessToken을 사용가능하고 나머지 99개의 요청들은 잘못된 accessToken을 발급받게 되는것이다.
  • 위와 같은 문제를 해결하기 위해, pending이라는 개념이 존재

 

pending 개념이 들어간 api 요청

  • 위 상황과 똑같이 100건의 api 요청이 한번에 들어왔다고 해보자.
  • 최초의 요청받은 api는 accessToken을 재발급 받으며, 제어문을 통해, pending 값을 true로 변환시켜줌(현재, accessToken 변경요청이 들어왔으니, 나머지는 기다려!)
  • 나머지 요청들은, stack에 쌓아 기다리게 한 뒤, 최초의 accessToken 요청에 성공적으로 응답이 왔다면, 그 accessToken을 가지고 stack에 있는 모든 동작함수들을 차례대로 수행! (stack 동작보단 queue 동작이 맞는거 같은데, 사실상 100건의 api가 동작하는데 1000ms 도 안걸리기 때문에, 디테일한 개발 로직은 패스)

결론

  • pending이란 개념을 이용해 동작을 잠깐 지연시키고, 오류를 낮추자.

 

추가로, 위 예시에서 말한 accessToken을 개인 계정 혹은 개별로 받는 token이라고 오해할 수 있는데,

그게 아니라 회사마다 하나씩 발급되는 secretKey로만 얻을 수 있는 accessToken이라 재요청 코드가 많아지면 안된다는 전제가 깔려있음!

'CS' 카테고리의 다른 글

순환 참조 (Circular Dependency) 문제  (0) 2025.04.14
Singleton 이란  (0) 2024.07.08
refreshToken 왜 사용하나요?  (0) 2024.07.05
TLS  (0) 2024.05.22
OAuth 2.0 프레임워크  (0) 2024.05.22

댓글