• 본 시리즈에서는 How to GraphQL의 Tutorial 문서들을 차례대로 번역합니다.
  • 이 글은 GraphQL Advanced - Common Questions을 번역한 글입니다.
  • 오역 또는 의역이 있을 수 있습니다. 양해 부탁드리며, 수정할 필요한 부분은 댓글로 요청해주세요.

공통적인 질문들

GraphQL은 데이터베이스 기술인가요?

아닙니다. GraphQL은 종종 데이터메이스 기술로 혼동되곤 합니다. 이는 오해이며, GraphQL은 API를 위한 쿼리 언어이지 데이터베이스가 아닙니다. 이런 맥락에서, GraphQL은 데이터베이스의 종류와 상관없이 사용할 수 있으며, 심지어 데이터베이스가 없어도 됩니다.

GraphQL은 React / Javascript 개발자만을 위한 기술인가요?

아닙니다. GraphQL은 API 기술이므로, API가 필요한 모든 맥락 속에서 사용 가능합니다.

백엔드의 경우, 웹 서버를 개발할 수 있는 프로그래밍 언어라면 GraphQL 서버를 개발하는 데에 사용될 수 있습니다. Javascript 다음으로 유명한 구현으로는 Ruby, Python, Scala, Java, Clojure, Go, .NET 등에 대한 참고 자료가 존재합니다.

GraphQL은 주로 HTTP를 통하여 작동하므로, HTTP로 소통할 수 있는 클라이언트라면 GraphQL 서버로부터 데이터를 쿼리하는 것이 가능합니다.

주의: GraphQL은 HTTP 이외의 다른 전송 계층 프로토콜에 사용할 수 있습니다.

서버 사이드 캐싱은 어떻게 하나요?

특히 REST와 비교할 때 GraphQL에 대한 흔한 걱정 중 하나는 서버 측에서 캐시를 유지하기 어렵다는 점입니다. REST를 사용하면 각 엔드포인트에 대한 데이터를 캐싱하는 것이 쉽습니다. 데이터의 구조가 바뀌지 않을 것이 확실하기 때문입니다.

반면 GraphQL은 클라이언트가 다음에 무엇을 요청할지 확실하지 않습니다. 따라서 API 뒷쪽에서 캐싱 작업을 진행한다는 말이 되지 않죠.

서버 사이드 캐싱은 여전히 GraphQL에게 숙제입니다. 캐싱에 대한 더 자세한 정보는 GraphQL 웹 사이트에서 확인하실 수 있습니다.

인증과 권한 부여는 어떻게 하나요?

인증과 권한 부여는 종종 혼동되곤 합니다. 인증(Authentication)자격 증명(Identity)을 진행하는 과정에 대한 것입니다. 당신이 사용자 이름과 비밀 번호로 서비스에 로그인할 때에 벌어지는 일이 바로 그것으로, 스스로를 인증하는 것이지요. 반면 권한 부여(Authorization)는 개별 사용자 및 사용자 그룹이 시스템의 특정 부분에 접근할 수 있는 권리에 대한 권한 규칙들에 대한 것입니다.

GraphQL에서 인증은 OAuth와 같은 일반적인 패턴으로 구현될 수 있습니다.

권한 부여를 구현할 때, 데이터 접근 로직은 모두 비즈니스 로직 계층에 위임하고 GraphQL 구현 상에서는 직접 다루지 않는 것이 권장됩니다. 권한 부여를 어떻게 구현할지에 대한 영감이 필요하다면, Graphcool의 권한 규칙 문서를 읽어보시길 추천합니다.

오류 처리는 어떻게 하나요?

성공적인 GraphQL 쿼리는 "data"라는 최상위 필드를 가지는 JSON 객체를 반환합니다. 만약 요청이 완전히 이루어지지 않았다면(데이터를 요청하는 사용자가 올바른 접근 권한을 가지지 않은 경우 등), "errors"라고 불리는 두번째 필드가 응답에 더해집니다.

{
  "data": { ... },
  "errors": [ ... ]
}

더 자세한 정보는 GraphQL 명세를 참고하시기 바랍니다.

GraphQL은 오프라인 사용을 지원하나요?

GraphQL은 (웹을 위한) API 쿼리 언어이며, 이런 맥락에서는 정의에 따라 온라인에서만 작동합니다. 하지만 오프라인 사용의 지원은 클라이언트가 관심 가질만 한 내용입니다. Relay와 Apollo의 캐시 기능은 몇몇 사용례에 충분히 적용할 만 하지만, 지속적인 데이터 저장을 지원하는 대중적인 솔루션은 아직 존재하지 않습니다. RelayApollo의 GitHub 이슈에서 다루어지는 오프라인 지원과 관련된 논의를 살펴보며 영감을 얻으실 수 있습니다.

오프라인 사용 및 지속성에 대한 흥미로운 접근을 이 글에서 확인하시기 바랍니다.

Quiz

GraphQL 서버가 요청에 대한 처리 실패에 대응하는 방법으로 적절한 것은?

  • GraphQL 서버는 절대로 실패하지 않는다.
  • 무엇이 잘못되었는지 HTTP 상태 코드로 알려준다.
  • 오류를 다루는 객체를 서버의 응답에 포함시켜 반환한다.
  • 울면서 침대 밑으로 숨는다.