This message was deleted.
# 질문
s
This message was deleted.
u
일단 처리를 해주기 위해서 BFF가 세션 쿠키를 받아서 다시 클라이언트로 내려주고, 클라이언트가 세션 쿠키를 보내면 그걸 요청할 때 사용하는(…) 코드는 작성을 했습니다. 그래서… 인증이 필요한 API를 콜하는 것은 가능합니다
이런 스키마를 만들어서 유저 정보를 표시하는 데 사용하고 싶어요
Copy code
type Query {
  me: Me # 현재 세션 유저 정보
}
요로코롬 하고 싶은데, 그러려면 레디스 같은 캐시를 두고 세션 키-유저 정보를 BFF 에서 관리하는 방법정도만 생각을 해봤습니다. 여러 형태로 조언 주시면 감사하겠습니다 🙏
Copy code
// 리졸버 내에서...
  Query: {
    me: async (_, __, context) => {
      return {
        id: 'Me',
        ...context.currentUser
      };
    },
  },
아니면 필드 별로 리졸버 짜고 적절하게 DataLoader 붙여서 구현하는게 좋을까요?
t
(잘 모르고 하는 얘기) 흠... 그럼 기존 서버에 의존하지 않고 독립적으로 인증을 구현하는게 맞지 않나요??
u
에 그게.. 장고 기반으로 만들어져있고 직접 DB 액세스 해서까지 하고 싶진 않은 그런 상태라서요 (..)
지금은 필드 별로 리졸버를 쓰는 방향으로 구현하고 있는데 이렇게 접근하는게 맞는지 궁금합니다 CurrentUser 의 필드 리졸버를 구현할 경우 Query 리졸버 내에서 CurrentUser 리졸버는 어떻게 처리해주는게 맞나요..? codegen 으로 생성한 타입에 맞게 처리는 해줬는데 굳이 이렇게 해주는게 맞는가 싶습니다
t
저라면
Query.currentUser
에서
ctx.getMemberMisc.load(ctx.sessionId)
를 하고 CurrentUser.gradeName에서
parent.grade_name
을 했을거같은데요. 혹시 lazyload 하시는 이유가 있을까요?
만약에 GraphQL Object Type이 리졸버에서 return -> parent 로 흐를때 TypeScript 타입을 맞춰주고 싶으시면
graphql-code-generator
mappers
옵션을 쓰시면 됩니다 ㅎㅎ
u
CurrentUser 내에서 getMemberMisc 와 getMemberDetail 을 필드에 따라 달리 호출해야 하는 상황이라, Query.currentUser 에서 특정 API 를 호출할 경우 해당 API를 참조하지 않아도 되는 쿼리에서도 호출되는 것을 막으려고 했습니다!
👍 1
mappers 옵션은 한번 찾아보겠습니다 🙏
아 근데 저거 middleware 의존해서 별로네요
Query.currentUser 에서 특정 API 를 호출할 경우 해당 API를 참조하지 않아도 되는 쿼리에서도 호출되는 것을 막으려고 했습니다!
아니면 호출은 하되 ctx에 promise를 담아놓고 await를 안하는것도 방법일거같아요 ㅋㅋ
b
저라면
Query.currentUser
에서
ctx.getMemberMisc.load(ctx.sessionId)
를 하고
최대한 리프 필드에서 API를 호출하는 패턴이 더 낫지 않나요? 코드가 여러번 중복되서 그런가욥?