인프런 커뮤니티 질문&답변

노강표님의 프로필 이미지
노강표

작성한 질문수

풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)

GraphQL 환경세팅 및 schema 정의

Query 중첩 질문.

해결된 질문

작성

·

258

0

강의 8분부터 schema폴더에서 index,js를 구성하는과정에서 질문드립니다!

 

query ,mutation의 중복을 피하기위해 linkSchema를 정의해서 type Query, type Mutation을 의미없는 값을 설정후에 extend를 사용하면 중복을 피할 수 있다 라고 이해를 했는데 이게 message.js, user.js라는 각각분리된 파일안에서 query가 정의되어도 중복이 발생해서 이렇게 설정해주신건가요??

답변 1

0

정재남님의 프로필 이미지
정재남
지식공유자

파일(모듈)이 분리되어 있지만,
ApolloServer 인스턴스를 생성할 때에는 하나의 배열로 합쳐진상태로 typeDefs를 전달하게 됩니다.
이 때 ApolloServer는 배열 내의 정의들을 하나로 병합하게 되는데,
그 과정에서 extend하지 않은 채 동일한 네이밍으로 정의된 type들은 cascading됩니다.
즉 Query, Mutation이라는 동일한 타입명들은 전부 덮어씌워져서, 마지막 하나만 살아남게 되는거죠.

반면 extend type은 기존에 정의된 type에 대해 내용을 '추가'하는 개념이기 때문에
병합하는 과정에서 '덮어씌우'는 대신 기존 type이 확장되게 됩니다.

더 자세한 내용은 다음 링크의 "Extending types in multiple files" 챕터를 참고하세요.

https://www.apollographql.com/blog/backend/schema-design/modularizing-your-graphql-schema-code/

노강표님의 프로필 이미지
노강표
질문자

아하...그러면 예를들어서 messages.js에서 Query를 선언하지 않았는데 extend type Query를 선언할 수 있는것도 ApolloServer 인스턴스를 생성할떄 하나의 배열로 합쳐지니까 그떄  index.js 에서 선언한Query를 extend 하게되는거죠? 

정재남님의 프로필 이미지
정재남
지식공유자

맞습니다.

노강표님의 프로필 이미지
노강표

작성한 질문수

질문하기