안녕하세요! GraphQL을 이제 막 공부하고 있는 주니어 개발자입니다. GraphQL 스...
# 질문
u
안녕하세요! GraphQL을 이제 막 공부하고 있는 주니어 개발자입니다. GraphQL 스터디에서 How to GraphQL을 읽고 있습니다. 스터디를 진행하면서 팀원들끼리 궁금한 점이 생겨 질문 남겨봅니다~ • GraphQL의 스키마의 버전 관리는 어떻게 이루어지나요? 어떤 문서에서는 버전관리 없이 하나의 스키마를 사용한다고 하는 것 같은데 그렇게 되면 낮은 버전의 어플리케이션에서 문제가 발생할 것 같아서 여쭤봅니다. • GraphQL의 subscription의 지속시간이나 연결되는 커넥션의 제한은 어느정도 일까요? 관련해서 자료를 찾고 싶은데 서치능력이 부족해서인지 잘 나오지 않는 것 같습니다..! 들어오자마자 질문을 남기게 되는 것 같습니다. 미리 감사드립니다 🙂
t
GraphQL의 스키마의 버전 관리는 어떻게 이루어지나요? 어떤 문서에서는 버전관리 없이 하나의 스키마를 사용한다고 하는 것 같은데 그렇게 되면 낮은 버전의 어플리케이션에서 문제가 발생할 것 같아서 여쭤봅니다.
따로 스키마에는 버전이 없어요. 만약 버전이 필요하시다면 새로운 필드를 파시는 방향을 추천드려요. 하위 호환성 체크는 보통 "스키마 체크"라고도 부르고요, Apollo Studio라는 서비스에서 스키마 레지스트리와 함께 제공합니다. CI와 통합하면 현재 배포하려는 스키마가 하위호환성이 보장되는지 체크하고 만약 Breaking Change가 발생할경우 빌드를 멈추고 해당 내용을 슬랙으로 받아볼수있어요.
필드로 버저닝하기:
Copy code
type Query {
  user(...): User @deprecated(reason: "쓰지마세요")
  userV2(...): UserV2
}
위에 예에서 보실 수 있듯이 deprecation을 이용하면 클라이언트 쪽에서 code generation을 할때 쓰지말아야한다고 warning이 떠서 좋습니다 ㅎㅎ
🙌 1
h
GraphQL의 스키마의 버전 관리는 어떻게 이루어지나요?
프로젝트의 구조에 따라 천차만별일 것 같네요. 예상하시는 많은 문제들은 CI(Continuous Integration)를 통해 해결할 수 있습니다. 가장 단순하게 코드베이스를 서버와 클라이언트가 공유하는 구조라면 대부분 타입시스템이 개발시간에 문제를 알려줄 수 있습니다.
👍 1
t
질문을 너무 잘 남겨주셔서 금방 답변이 달리네요 ㅋㅋㅋ
h
GraphQL의 subscription의 지속시간이나 연결되는 커넥션의 제한은 어느정도 일까요?
Subscription 은 일반적으로 WebSocket 표준 위에서 동작하기 때문에 (보통 subscription-transport-ws 나 graphql-ws 같은걸 씀) WebSocket의 제약사항을 그대로 따릅니다.
👍 2
이거 제안한 Apollo 가 RFC 쓴게 있을텐데 찾아드릴게요
헐랭 graphql-ws 로 통합됐군요
The 
subscriptions-transport-ws
 library is not being actively maintained. It is recommended that you use the graphql-ws library instead. For details read the GraphQL over WebSockets announcement.
Apollo 가 초기에 기여했던 것들 유지보수를 많이 포기하네요
u
정말 자세하고 빠른 답변 너무너무 감사합니다! 달아주신 내용은 잘 소화해서 스터디 팀원들과 공유하겠습니다~ ㅎㅎ
transport 구성은 이걸 보시면 됩니다
일반적인 WebSocket 통신들이 다 그렇지만 서버는 언제든지 연결을 닫을 수 있어요. 필요하다면 클라이언트에서 재연결을 합니다.
u
자료 공유 감사합니다 🙂 !!! 이해가 되었습니다… 🙏