GraphQL 잘 사용하기
·
카테고리 없음
이전에 회사에 신규 입사자분들이 많이 오셔서 온보딩겸 준비했던 GraphQL 잘 사용하기 이다.동료분이 블로그에도 올리면 좋을것 같다고 하셔서 블로그에도 기록차 남기게 되었다.(이전에 사용하던 블로그에서 다시 옮겨왔습니다)GraphQLGraphQL(Graph Query Language)은 페이스북에서 만든 쿼리 언어로서, 그래프로 스키마의 연관관계를 표현한다.구성 요소스키마리졸버그래서 어떤점이 좋은가?클라이언트에서 원하는 값만 가져올 수 있다.(Over-Fetching 문제 해결)REST API에 비해 변경에 유연하게 대처할 수 있다.예시) user에 새 필드가 추가되었는데 REST API는 user/v1/123 에서 user/v2/123을 새로 만들어줘야 하지만 GraphQL에서는 새 필드만 추가하면 ..
GraphQL DataLoader로 N + 1문제 해결하기
·
기타
목표 GraphQL을 사용하다보면 쉽게 겪을 수 있는 문제인 N + 1 문제와, DataLoader라는 기술로 어떻게 해결할 수 있는지 알아보자.N + 1 문제N + 1 문제란 무엇일까? 예시로 알아보자. 상품(Product)에는 리뷰(Review)들이 존재한다. 그래서 개발자는 product쿼리 안에 reviews를 추가하고 리졸버에 reviews를 가져오는 로직을 추가할 수 있다.query GetProductDetail($productId: ID!) { product(id: $productId) { id title price reviews { id content } }}위의 쿼리를 실행하면 DB에서는 2번의 SELECT가 수행된다.Product(id: ..
GraphQL Federation할때 null을 주의하자
·
기타
22년의 평화로운 어느날.. 😂 회사에서 상품 조회가 안된다는 이슈 알람이 지속적으로 발생했다. CloudWatch로 로그를 확인해보니 특정 페이지에서 graphql 응답이 data: null로 오고 있었다. 이런 경우는 처음이어서 여러가지 가설을 세워보았다. 1. graphql federation 할때 문제가 생겼을 것이다. 2. 데이터가 너무 많아서 타임아웃이 발생했을 것이다. 3. 쿼리가 잘못된 것이다. 일단 2, 3번은 가능성이 낮다. 타임아웃이 발생했다면 다른 오류 메시지가 발생했을것이고, 쿼리가 잘못된것이었다면 다른 page의 상품을 불러오는것도 똑같이 문제가 됐어야 한다. federation 문제를 제일 유력한 용의자로 생각하고 가설증명을 시작하였다. GraphQL Federation이란? ..
togeepizza
'GraphQL' 태그의 글 목록