query 나 mutation 의 인자 타입 변경시에 클라이언트도 보통 breaking c...
# 질문
a
query 나 mutation 의 인자 타입 변경시에 클라이언트도 보통 breaking change 영향을 받는데요.. 인자들을 최대한 GraphQL Input type으로 엮어보시라고 일단 백엔드분에게 말씀드렸는데 Input 을 그런 용도로 사용하는게 맞는지 잘 모르겠네요, 어떻게들 생각하시나요?
t
BREAKING CHANGES 같은 경우는 따로 체크 (스키마 체크)를 하시는게 좋아요 ㅎㅎ Apollo Studio에 해당 기능이 있으니 확인해보세요!
a
넵 체크 같은경우는 graphql-inspector 로 서버단에서 PR 시에 체크가 되도록 해놓았는데요( 요런 체크 말씀하시는게 맞는?지 모르겠네요) 제가 말씀드린 부분은 불필요한 breaking changes 를 아예 방지? 하는 느낌으로 input을 사용하는 방식이 어떤가 해서요,,
아니면 그냥 바뀔때마다 클라이언트에서 체크해서 같이 바꾸는게 맞는걸까요
h
애초에 스키마 만드는 시점에서 충돌과 확장 여부를 잘 고려하는게 좋고요. 타입검사 플로우가 전체적으로 있으면 좋죠
두가지 접근방식인 것 같은데
1. End-to-End type safety 2. Schema tracking
1번은 서버코드랑 생성된 코드 클라이언트 코드 싹 묶어서 타입스크립트 같은 정적 타입 도구 내에서 호환성을 보장하는거고 (Code-first)
2번은 별도의 스키마 레지스트리를 두고 변경을 추적해서 모든 프로젝트가 이걸 따라가는 방식 (Schema-first)
애초에 깨지지 않을 스키마를 만들고, 깨지면 그냥 새필드에서 다루고 graceful 하게 마이그레이션해라 가 일반적인 권장사항입니다.
쿼리나 뮤테이션 같은 경우에는
저는 무조건 도큐먼트를 따로 씁니다
Copy code
query GetPerson($id: ID!, $email: String) {
  person(input: {
    id: $id,
    email: $email,
  }) {
    ...Person
  }
}
이런식으로 클라이언트가 문서관리를 하기 때문에 field arguments가 구체적으로 어떤 구성이냐는 사실 아무래도 상관없습니다 이렇게 따로 operation document 를 관리하면 스키마 추적만으로 변경 유효성을 검사하기가 훨씬 쉬워요
스키마 레벨에서는 인풋타입을 "항상" 쓰는게 좋고요
a
와 감사합니다 ㅠㅠ 퇴근하고 찬찬히 읽어볼꼐요