query 없이 mutation 만작성하면 오류가 난다?
안녕하세요~
복습중 이상한 현상이 발생하여 질문드립니다~
답변 주시면 감사하겠습니다~
질문1.resolver 부분에서
boards() 부분의 주석 부분을 해제해야,
맨아래 3번 오류가 발생하지 않고, 정상 작동 합니다.
Query 없이 Mutation 만작성하면 오류가 발생하는걸까요? 아래 코드와 같이 query 부분을 주석 처리 하면 왜 오류가 나는 걸까요?
질문2.
에러가 내가 작성한 파일의 어떤부분이 잘못됐다고,
알려주는건 없는 걸까요?
아래 에러 코드를 보면 내가 작성한 코드가 아닌
작성하지도 않은 설치 파일같은데서 error 정보가 나오는데, 저기를 열어봐야 할까요?
GraphQLError: Query root type must be provided.
at SchemaValidationContext.reportError (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\type\validate.js:73:7)
1.resolver
import { Args, Mutation, Resolver } from '@nestjs/graphql';
import { BoardsService } from './boards.service';
import { CreateBoardInput } from './dto/create-board.input';
import { Board } from './entities/board.entity';
@Resolver()
export class BoardsResolver {
constructor(private readonly boardsService: BoardsService) {}
// @Query(() => String)
// boards(): string {
// return this.boardsService.boards();
// }
@Mutation(() => Board)
createBoard(
@Args('createBoardInput') createBoardInput: CreateBoardInput, //
): Promise<Board> {
return this.boardsService.create({ createBoardInput });
}
}
2.service
import { Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { IBoardsServiceCreate } from './interfaces/boards-service.interface';
import { Board } from './entities/board.entity';
@Injectable()
export class BoardsService {
constructor(
@InjectRepository(Board)
private readonly boardsRepository: Repository<Board>, //
) {}
// boards() {
// return 'boards';
// }
create({ createBoardInput }: IBoardsServiceCreate): Promise<Board> {
return this.boardsRepository.save({ ...createBoardInput });
}
}
3.error
[
GraphQLError: Query root type must be provided.
at SchemaValidationContext.reportError (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\type\validate.js:73:7)
at validateRootTypes (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\type\validate.js:89:13)
at validateSchema (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\type\validate.js:41:3)
at graphqlImpl (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\graphql.js:60:63)
at C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\graphql.js:23:43
at new Promise (<anonymous>)
at graphql (C:\study\00-codecamp-backend\연습장\memo01\node_modules\graphql\graphql.js:23:10)
at GraphQLSchemaFactory.create (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\schema-builder\graphql-schema.factory.js:50:65)
at GraphQLSchemaBuilder.generateSchema (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql-schema.builder.js:35:52)
at GraphQLSchemaBuilder.build (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql-schema.builder.js:22:31) {
path: undefined,
locations: undefined,
extensions: [Object: null prototype] {}
}
]
C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\schema-builder\graphql-schema.factory.js:56
throw new schema_generation_error_1.SchemaGenerationError(errors);
^
Error: Schema generation error (code-first approach)
at GraphQLSchemaFactory.create (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\schema-builder\graphql-schema.factory.js:56:23)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at GraphQLSchemaBuilder.generateSchema (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql-schema.builder.js:35:24)
at GraphQLSchemaBuilder.build (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql-schema.builder.js:22:20)
at GraphQLFactory.generateSchema (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql.factory.js:27:41)
at GraphQLModule.onModuleInit (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\graphql\dist\graphql.module.js:109:27)
at callModuleInitHook (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\core\hooks\on-module-init.hook.js:51:9)
at NestApplication.callInitHook (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\core\nest-application-context.js:223:13)
at NestApplication.init (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\core\nest-application.js:100:9)
at NestApplication.listen (C:\study\00-codecamp-backend\연습장\memo01\node_modules\@nestjs\core\nest-application.js:169:33)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
질문1에 대한 답변입니다. GraphQL 스키마는 기본적으로 ‘Query’ 타입을 필요로 합니다. 이는 GraphQL API를 사용할 때 데이터를 조회하는 기본적인 방법이기 때문입니다. Mutation으로 데이터를 변경하는 것도 중요하지만, 쿼리를 통해 데이터를 읽는 기능이 없으면 완성도 높은 API를 구축하기 어렵습니다. 따라서 Query 타입이 없으면 ‘Query root type must be provided’ 오류가 발생합니다. Query 부분을 주석 처리하게 되면, 해당 Query 타입이 정의되지 않았기 때문에 오류가 발생하는 것입니다.
질문2에 대한 답변입니다. GraphQL 서버 구현 시 발생하는 오류 메시지는 종종 해당 설정 파일이나 구현된 라이브러리 내부에서 발생하는 경우가 있습니다. 이는 개발자가 작성한 스키마 정의나 리졸버, 서비스와 같은 환경 설정에 의존하기 때문입니다. 따라서 이러한 오류 메시지는 내부 구현을 직접적으로 가리키지 않고, 스키마 검증 과정에서 문제가 일어났음을 알려주는 것입니다. 이 경우, 스키마나 리졸버의 구현부에서 발생하는 문제를 확인해야 할 필요가 있습니다. 보통은 GraphQL 스키마를 정의하는 과정에서 필요한 Query 또는 Mutation, Type 등을 누락하거나 잘못 정의했을 때 이러한 오류 메시지가 출력됩니다.
GraphQLError: Query root type must be provided. 오류를 해결하기 위해서는 최소한 하나의 Query 필드를 스키마에 정의해야 합니다. 이미 주석 처리된 @Query(() => String) 부분을 해제하셔서 Query를 정의하시면 문제가 해결될 것입니다.
그래프 ql 문서 사용할때 느낌표 남는거 어떻게 없애나요?
0
82
2
강의 전체 소스 코드를 받고싶습니다.
0
75
2
fontawesome 사용 문의
0
76
2
소스 코드 부탁드립니다~
0
85
2
깃 레포지터리 소스
0
80
2
커리큘럼12.css 정렬 에 나오는 과제 정답알고싶어요
0
72
2
10-01 Entity TypeOrmModule.forRoot 에 entities
0
84
3
강의 버전관련 문의입니다
0
102
2
Ubuntu 설치 관련
0
60
1
schema.gql 질문 드립니다.
0
50
1
서버 재실행시 Many to Many
0
100
3
input 관련 문의
0
89
2
Rest API 보다는 graphql이 주된 내용인데
0
130
2
강의 전체 소스코드 받을수있을까요?
0
154
1
도커볼륨 마운트 관련
0
126
2
findOne 타입스크립트오류
0
108
1
http => htrtps 호출 인증서 신뢰 오류
0
349
1
self-signed certificate in certificate chain 에러 발생
0
411
1
mongoose 설치 오류
0
141
1
특정 API, 특정 IP 허용 (단일경로에 CORS 활성화)
0
280
2
08-06
0
177
3
구조랑 패턴 관련해서 질문
0
124
2
mydocker
0
128
2
coolsms statuscode 2000 인데 전송안돼는 경우 확인.
0
156
1





