https://facebook.com/groups/graphql-kr logo
#잡담
Title
# 잡담
u

박연호

03/10/2022, 5:24 AM
nexus에서는 아직 custom directive를 지원하지 않는 것 같네요. https://github.com/graphql/graphql-js/issues/1343 typegraphql에서는 억지로 구현체를 만들어서 사용하는 것 같긴한데;; Current implementation of directives in TypeGraphQL is using some crazy workarounds because `graphql-js` doesn't support setting them by code 지금은 plugin 붙여서 사용하고 있긴 한데, custom directive 만들어서 사용하면 더 좋겠다는 생각이 들어서 찾아봤는데 결과가 슬프네요…. 이런거 보면 그냥 schema first로 바꾸고 싶네요 ㅠ
h

Hyeseong Kim

03/10/2022, 5:29 AM
Nexus 는 컨셉 상 커스텀 디렉티브가 필요하지 않습니다.
필요하다면 플러그인을 만드시면 됩니다. https://nexusjs.org/docs/api/plugins 커스텀 디렉티브와 동일한 기능, 동일한 역할입니다
u

박연호

03/10/2022, 5:43 AM
Nexus 는 컨셉 상 커스텀 디렉티브가 필요하지 않습니다. 좀 더 설명해주실 수 있나요 ? 컨셉이랑 custom directive랑 어떤 연관성이 있는지 짐작이 안가네요..
h

Hyeseong Kim

03/10/2022, 5:46 AM
왜냐하면 플러그인이 하는일이 커스텀 디렉티브로 하는 일과 정확히 일치하거든요
다른 기능이 연관성이 있는게 아니라 같은 기능입니다.
실제 커스텀 디렉티브 사용사례나 구현 예제를 찾아보시면 도움이 될거같습니다
u

박연호

03/10/2022, 5:50 AM
custom directive랑 plugin이 동일한 기능을 한다는건 저도 동의합니다 ! 근데 custom directive가 graphql spec문서에 포함된 내용인데 code-first에서는 제한이 있다는 말이 좀 와닿지가 않네요..
h

Hyeseong Kim

03/10/2022, 5:54 AM
custom directive 는 구문이 아니라 구문 확장이고 실제세계에서는 사용되지 않아요.
실제 GraphQL 런타임을 구성하기 위해 다른데서도 보통 makeExecutableSchema 같은 유틸리티를 사용하는데요
SDL로부터 스키마를 생성하고, 스키마에 리졸버를 매핑하고, 지시자를 지우는 전처리 작업까지 완료해야 실행 가능한 런타임 (Executable Schema) 가 됩니다.
SDL 에서 쓰이는 디렉티브는 그냥 지시자이고 런타임에선 역할이 없습니다. Nexux 플러그인과 라이프사이클이 동일합니다
요컨데 쓰고 안쓰고 따질만한 부분이 없다는건데요
만약 질문하신게 "다른 사람이 makeExecutableSchema 호환되는 형태로 만들어둔 directive handler 를 라이브러리처럼 가져다 쓰고 싶다" 라는 의미라면 그건 Nexux 라고 못할 이유가 없습니다. 시그니쳐도 똑같아서 그냥 직접 실행하면 됩니다
SDL-first 에선 그냥 텍스트 정보밖에 없기 때문에 directive를 남겨 나중에 처리기에게 의도를 지시하는 건데, code-first 프레임워크는 처리기가 달라붙어 있으니 그냥 거기서 제공하는 도구를 쓰면 더 편하게 하는것이죠
👍 3
u

박연호

03/10/2022, 6:20 AM
마지막 내용이 인상적이네요… 답변 감사합니다. 원하는 답변이 된 것 같습니다 ㅎㅎ
🙌 1