GraphQL: 기본 타입

GraphQL의 기본타입들을 설명하기 전에 Spring Boot와 어떻게 연결되는지 대략 파악하면 이 문법을 어디서, 어떤 목적으로 쓰는지 명확히 알 수 있을 것 같습니다.

GraphQL과 Spring Boot

기존 API에서는 요청이 들어오면 url이 해당 Controller에 매핑되어 요청을 처리했습니다.

그러나 graphQL을 사용한 API에선 Controller가 사라지고 대신 모든 요청이 하나의 endpoint(“/graphql”)로 통일되면서 약속한 문법에 따른 요청을 (controller대신) Resolver에서 처리합니다.

이때 약속한 문법에 해당되는 것이 graphQL이며 적용되는 변화는

  • BE에서 요청 받는 controller부분
  • FE에서 요청하는 body부분 입니다.

이번엔 Middleware에서 요청받는 문법을 정리해보겠습니다.

GraphQL의 기본타입들

  1. 스칼라 타입( GraphQL 내장 자료형)

2. 리스트타입
[ ] 을 사용하여 동일한 타입의 여러 값을 저장합니다.

요청에 반환된 값이 null, [ ], [ … , null] 일 때 문제없는 케이스를 구분해봅시다. (O: 문제없음 , X: 예외발생)

3. 열거
고정된 값들을 사용합니다.

GraphQL의 기본 외 타입들

  1. 사용자 지정 스칼라 타입
    사용자가 직접 정의한 타입입니다(이미 위에서 봤던 예제들입니다!)

2. union 타입
유니온 타입은 인터페이스와 매우 유사하지만, 타입 간에 공통 필드를 특정하지 않습니다.

스키마에서 SearchResult 타입을 반환 할 때마다, Human, Droid, Starship 을 얻을 수 있습니다. 유니온 타입의 멤버는 구체적인 객체 타입이어야 합니다. 인터페이스나 유니온 타입에서 다른 유니온 타입을 사용할 수 없습니다.

이 경우, SearchResult 유니언 타입을 반환하는 필드를 쿼리하면, 어떤 필드라도 쿼리할 수 있는 조건부 프래그먼트를 사용해야합니다.

3. interface 타입
- 구현 시 추가 필드를 사용할 수 있습니다.

  • 주의점 : query문으로 데이터 조회시 특정 구현에만 있는 필드를 사용하면 오류를 반환할 수 있습니다.

4. input 타입
인자에 쓰이는 객체를 정의할 수 있습니다.

주의점 : type, input의 혼용은 불가합니다. 두 개의 필드값이 정확히 동일해도 각각 정의해야합니다. (이름은 다르게 해야합니다.)

온-디바이스 마이데이터 앱

온-디바이스 마이데이터 앱