혹시 Nullable by default 스키마를 사용하시는 분들은 Semantic Nul...
# 질문
x
혹시 Nullable by default 스키마를 사용하시는 분들은 Semantic Null과 Error Null을 어떻게 구분해서 사용하시나요? 👀
👀 1
s
어떤 에러를 보여줄 것인지, 비지니스 적인 null인지, 시스템적인 null인지 등 기준으로 구분할 수 있어 보입니다
x
아 제가 의도한 내용은 그걸 응답값을 가지고 어떻게 구분하느냐.... 였습니다 😅
s
어떤 부분이 고민이신지 좀 더 설명해주신다면 도움을 드릴 수 있을 것 같습니다
x
GraphQL 서버에서는 필드 리졸빙 도중에 에러가 발생한 경우 해당 필드 값을 null로 지정하고 errors에 에러를 추가해서 응답하는 게 컨벤션이잖아요? 그런데 이때 null로 지정된 필드 값이 리졸버가 정상적으로 null을 응답한 것인지, 에러가 나서 null이 된 것인지를 어떻게 구분할 수 있는지가 고민이 되는 지점이었어요
질문 올리고 며칠 동안 찾아본 내용에 따르면 결국 GraphQL 클라이언트가 응답 데이터와 errors 값을 적절히 연결지어서 똑똑하게 에러 처리를 해 주어야 한다....는 결론이 나왔는데, 아직 이걸 잘 지원해주는 클라이언트가 딱히 없어 보이더라구요 (Relay만 피쳐플래그 활성화 시에 지원하는 것 같았던)
s
응답 데이터와 errors 값을 적절히 연결지어서 똑똑하게 에러 처리를 해 주어야 한다
저도 이게 그래프큐엘에서 할 수 있는 최선의 방법인 것 같습니다🫠 아시다시피 "에러가 나서 null이 된 것인지를 어떻게 구분할 수 있는지"에 대한 답은 결국에 error가 null인지 아닌지로 판별을 할 수 있으니까 말이죠 결국에는 컨벤션을 어떻게 잘 짜느냐가 가장 중요할 것 같은데요, 저희는 그래서 각 에러상황에 따른 error, 또는 특정 상황에 필요한 특정 error 필드까지 추가적으로 넣어서 "어떤 error 값이 있으면 어떤 error 상태를 표시한다" 와 같은 컨벤션을 도출해서 정리해두었어요. 결국 클라이언트에서 data보다 error 먼저 확인하여 판별하는 에러처리 로직을 추상화해둔다면, 높은 생산성을 유지할 수 있습니다. (다만 이 컨벤션을 다 맞춰서 에러를 반환해주는 백엔드의 역할도 굉장히 중요할 것 같아요 하하)
👍 1
h
null fallback 컨벤션이 쓰이는 게 대체로 MSA 때문인데 사실 꼭 null 이여야 하는지는 전부터 의문이 있긴 했어요
오히려 요즘은 게이트웨이들이 발전하는 만큼 그쪽에서 전략을 가져가는게 더 나은게 아닌가도 싶고요