으어어어어
729
2020-09-11 20:16:46
3
179

아래의 NodeJS 동시성에 관련하여 상황을 조금 바꾸어 다시 질문 드립니다.


우선 답변 정말로 감사합니다. 데이터베이스쪽은 트랜잭션의 격리레벨에 대해 공부해보겠습니다.


약간 상황을 바꾸어 이전 질문 (https://okky.kr/article/776655) 에서는 데이터베이스의 트랜잭션을 이용하여 동시성 문제를 해결 할 수 있다고 생각 하지만 만약 데이터베이스가 아닌 외부 REST API를 호출해야 되는 상황에서는 위와 같은 문제가 발생 될 수 있다 생각이 듦니다.


현재 OAuth2 Client Credentials Flow 를 이용하여 NodeJS측 프로그램이 클라이언트 인증을 받고 토큰을 공유하여 유저에게 받은 요청을 처리할때 유저의 대한 정보 등을 유저관리 REST API 서버에 요청을 하고 받아 와야 되는 상황입니다.

이때 토크의 유효기간이 끝나 REST API의 요청이 실패하면 토큰을 재발급 해야 하는데, 이 상황에서 여러명의 요청을 처리할 시 위와 같은 원리로 토큰을 여러번 재발급 요청을 할 수 있다는 생각이 듧니다.


데이터베이스쪽은 트랜잭션 격리 레벨을 공부하여 처리할 수 있는것 같은데, 위와 같이 API를 호출하는 상황에서는 어떻게 해야할지 힌트를 주시면 감사하겠습니다. (자바와 같은 멀티 쓰레드 환경에서만 코딩을 하다 보니 자바스크립트의 싱글 쓰레드에서는 어떻게 해야 할지 좀 난해하네요...;;)


두번 질문을 드려 번거롭게 하는점 정말 죄송합니다.

1
  • 답변 3

  • kimpugie
    217
    2020-09-11 23:49:51
    외부 api는 외부에서 책임 지는거죠 그걸 왜 호출자가 신경쓸까요?? 질문하셨던 그 호출이 동시에 일어나도 그런걸 다 고려해서 설계 되어있겠죠 이전의 토큰이 무효가 되거나 토큰의 종류에 따라 여러번 발급된 토큰을 다 사용할수도 있을거구요 초보가 만든 api가 아니라면요 

    api 문서를 제대로 읽어보시면 될거같네요
    그리고 로직단에서 토큰이 무효화되면 재인증 안내를 하면되눈거구요 자동으로 발급하게 하시려니 문제가 되는거같은데요
  • 으어어어어
    729
    2020-09-12 03:05:38

    kimpugie


    답변 감사드립니다. 여러번 호출된 토큰도 사용할 수 있지만, 뭔가 프로그램상 한번만 호출 하도록 작성하는게 옳바르지 않을까 해서 고민하고 있었습니다.


    좀 더 알아보니 node js async 모듈이라든가, 큐를 이용하여 할 수 있는 방법이 있었습니다. 좀 더 고민해보도록 하겠습니다.


    아래는 제가 참고 했던 링크 입니다.

    https://stackoverflow.com/questions/48563969/c-like-mutex-in-nodejs/48569020

    https://github.com/caolan/async

  • 곰개발ㅈ ㅏ
    369
    2020-09-12 09:28:32

    https://github.com/nodejs/help/issues/2275 한번 읽어보세요. 힌트를 얻을 수 있을 겁니다.


  • 로그인을 하시면 답변 을 등록할 수 있습니다.