Parse-server를 Node에서 사용할 때 유저의 세션 처리 + NodeJS용 Rest Client

저는 Parse-server의 APP ID Key가 Client에 노출되는 것도 싫고, 중간에 비즈니스 로직도 추가하고 싶고 그래서,
Parse-server를 NodeJS로 한번 감싸서 API 서버 형태로 만들어서 사용하고 있습니다.
API서버와 MongoDB 사이에서 Parse-server가 Rest API로 동작하는 미들웨어가 되는 구성이죠.

이렇게 Rest API로 요청을 보내야 할 때, JS SDK를 쓸 때와는 달리 로그인 세션의 문제가 발생하는데요.
Parse-server가 이 요청의 user를 알아 챌 수 있도록 간단하게 헤더에 토큰 정보를 보내면 됩니다.

  1. Client에서 API로 로그인 요청을 보낸것을, Parse-server로 중계하여 처리하면서 얻어진 sessionToken을 가지고 있습니다.

     parseRest.get('/login', { username, password }, { 'X-Parse-Revocable-Session': 1 }).then((user) => {
       console.log(user.sessionToken);
       ...
     });
    
  2. API에서 Parse-server로 요청을 보낼때 헤더에 매번 sessionToken을 주입합니다.

     const _sessionToken = req.get('sessionToken') || ...;
     if (_sessionToken) {
       _headers['X-Parse-Session-Token'] = _sessionToken;
     }
    

이렇게 하면 Parse-server는 자체적으로 session을 조회해서 요청을 호출하는 User를 가지게 됩니다.
그러면 Parse-server의 ACL도 사용할 수 있고, Cloud Code에서도 req.user로 처리할 수 있습니다.

마지막으로 이렇게 NodeJS에서 Parse-server를 Rest API로 사용할 때 도움이 되는 클라이언트를 만들어 봤습니다.

오호!! 짱짱맨!!!

파스 서버에서 기본 제공되는 클라우드 API와 별도로 내가 원하는 형태의 API를 만들때 세션을 응용할수있다는 얘기죠?
클라이언트에서 아예 Parse SDK 객체를 쓰지않고 파스 서버를 REST API 서버로만 쓰면 클라이언트에서 Parse 객체를 안써도 되니까 JS 사이즈가 줄어드는 효과도 있겠네요.

그런데 질문,… 저렇게 아예 REST API로 변경하면 파스 클라우드 API는 서버에서만 쓸텐데… 리커넥션 문제는 어떻게 해결하셨나요?
기존에 클라이언트에서 클라우드 API를 바로 호출하면 연결이 끊기면 알아서 타임아웃 걸어주고 좋턴데… REST API로 가면 직접 다 구현해야하는거 아닌가요?

클라이언트에서 Rest API로 Parse-server에 직접 요청할 때도 똑같이 헤더에 X-Parse-Session-Token을 추가해주면 로긴한것과 같이 됩니다.
왜 이게 도큐먼트에 없는지 모르겠어요… 저는 잘 사용하고 있는데 side effect 일지도요…
그래서 클라이언트에서는 superagent로만 사용하고 JS SDK는 사용하지 않고 있어요.

리커넥션은 어떤 문제를 말씀하시는건지 모르겠어요…

인터넷 환경이 불안정한 곳에서 네트웍이 끊기거나 응답이 느려서 요청했는데 응답을 못 받고 timeout 걸리는 경우가 종종 있거든요. 이때 파스클라우드 API는 타임아웃되면 자동으로 재호출해주더라구요.

정말인가요? 몰랐네요.^^ 와~… 코드를 살펴봐야겠네요.^^