👩‍💻 Programming/ERROR

GraphQL-Codegen : Not all operations have an unique name

김_수댕 2024. 10. 4. 16:05
반응형

Not all operations have an unique name

GraphQL CodeGen을 설치하고 condegen.ts , package.json 파일까지 다 설정해 줬다.

 

그리고 yarn codegen을 실행시켜 줬는데? 짜잔 저게 뭐람

 

문자 그대로 updateBoards가 유니크한 이름이 아니어서 발생한 문제였다...

저 많은 파일을 보니 어떻게 수정하지 막막했는데... 다행히!!!!

전부를 수정할 필요는 없고 graphql 구문에서 같은 updateBoard라는 이름으로 선언했지만

안에 받아오는 값이 다르다거나, 보내는 값이 다른 경우 발생하는 문제여서 해당 부분을 잘 보면 된다.

 

왜냐하면 얘는 같은 이름의 함수라면 같다고 생각하고 실행시키는데 그 안에 다른 매개변수를 가진 돌연변이가 갑자기 나타난 것이다.

그러니까 얘는 다른 애라 다른 이름이 필요하다고 말해주는 에러였다!

 

 

chatGPT는 이름을 바꿔주라고 권했지만, 내부에 있는 값들만 동일하면 생기지 않는 문제라니.

변수명을 몽땅 통일해 줬다.

불러오는 값들도 확인해서 받아와 주니 오류가 나오지 않았다.

이래서 전에 강사님께서 변수명을, 예를 들면 number: $number 이런 식으로, API의 변수이름과 통일해서 많이 사용한다고 하신 거구나.

이렇게 사용하면 나름의 규칙이 되어서 다른 변수를 넣을 일은 없을 테니까!

 

그래도 받아오는 값이 다른 기능을 만들어야 한다면 createBoard 부분을 다른 이름으로 수정하는 방안이 좋을 것 같다.

 

+ ChatGPT에게 변수의 이름이 꼭 같아야 하는지 묻다

더보기

변수의 이름이 다르다고 해서 무조건 실행이 안 되는 것은 아니지만, 특정한 상황에서는 변수의 이름이 일관되지 않으면 문제가 발생할 수 있습니다. 이 문제는 주로 GraphQL 서버나 클라이언트 설정에 따라 다를 수 있습니다. 아래에서 그 이유와 함께 더 자세히 설명할게요.

1. GraphQL 쿼리/변형의 변수 이름은 독립적

GraphQL에서는 쿼리나 변형의 변수 이름이 쿼리 내에서만 유효하며, 서로 다른 쿼리나 변형에서 동일한 이름을 사용하지 않아도 됩니다. 예를 들어, 아래 두 변형에서 각각 다른 변수 이름을 사용해도 정상적으로 작동합니다.

 

mutation CreateBoard($writer: String, $title: String, $contents: String) {
  createBoard(writer: $writer, title: $title, contents: $contents) {
    _id
    message
  }
}

mutation UpdateBoard($author: String, $headline: String, $text: String) {
  updateBoard(writer: $author, title: $headline, contents: $text) {
    _id
    message
  }
}
 

위에서 CreateBoard와 UpdateBoard 변형은 각각 writer, title, contents와 author, headline, text라는 변수를 사용하지만, 서로 독립적이기 때문에 문제없이 동작합니다.

2. 변수의 이름이 통일되지 않아서 발생할 수 있는 문제

변수 이름이 다를 때 문제가 생기는 이유는 다음과 같은 경우일 수 있습니다:

  • GraphQL 클라이언트 캐싱: Apollo Client 같은 클라이언트에서 캐시를 사용할 때, 동일한 요청을 구분하기 위해 변수나 쿼리 이름을 기준으로 캐싱을 처리합니다. 만약 캐시와 관련된 로직에서 문제가 발생하면, 변수 이름이 다르기 때문에 잘못된 데이터를 반환할 수 있습니다.
  • 동일한 변형을 여러 곳에서 사용할 때: 여러 페이지나 컴포넌트에서 동일한 변형을 호출하는데, 변수 이름이 일관되지 않으면 오류가 발생할 가능성이 있습니다. 특히, 클라이언트에서 자동으로 타입을 생성하거나 유효성 검사를 할 때 변수 이름이 일관되지 않으면 충돌이 발생할 수 있습니다.
  • GraphQL Codegen 등 자동화 도구 사용 시: 코드 자동 생성 도구(graphql-codegen)를 사용해서 타입을 생성할 때, 쿼리나 변형의 변수 이름이 일관되지 않으면 코드 생성에 문제가 생길 수 있습니다. 이 경우 변수 이름을 통일하면 도구가 제대로 작동할 수 있습니다.

3. 변수 이름 통일이 필요한 상황

  • 여러 컴포넌트나 페이지에서 같은 변형을 재사용하는 경우, 동일한 변수 이름을 사용하는 것이 좋습니다. 이렇게 하면 코드의 가독성도 좋아지고, 캐싱 문제나 코드 자동 생성에서 발생할 수 있는 오류를 방지할 수 있습니다.
  • 프로젝트 전반에서 변수명을 통일하면, 나중에 유지보수나 디버깅할 때 훨씬 더 수월합니다.

4. 모든 페이지의 변수 이름을 반드시 통일해야 하는가?

  • 모든 페이지에서 반드시 동일할 필요는 없습니다. 단, 같은 변형이나 쿼리를 재사용하는 경우에는 동일한 변수 이름을 사용하는 것이 일반적인 관례입니다.
  • 각각의 변형이나 쿼리에서 독립적으로 변수를 사용한다면, 서로 다른 변수 이름을 사용해도 문제는 없습니다.

요약:

  • 변수의 이름이 다르다고 해서 반드시 실행되지 않는 것은 아니지만, 캐싱이나 코드 생성 도구를 사용할 때 문제가 발생할 수 있습니다.
  • 동일한 변형을 여러 곳에서 사용하거나, 자동화 도구를 사용할 때 변수 이름을 통일하는 것이 좋습니다.
  • 모든 페이지에서 변수명을 반드시 동일하게 할 필요는 없지만, 같은 변형을 재사용하는 경우 일관된 변수명을 사용하는 것이 좋습니다.

 

잘못된 정보에 대한 정정과 피드백은 언제나 환영입니다!

반응형