[GraphQL] 궁금한 내용 정리

곽태민·2023년 7월 27일
0

TIL

목록 보기
33/63

개요

이직한 회사에서 REST API나 gRPC를 사용해서 클라이언트와 통신을 하는 것이 아니라, GraphQL을 이용해서 통신을 한다.

GraphQL을 찍먹도 아닌 핥아보기만 한 나는 공부를 시작하고 작은 어플리케이션을 만들어보면서 궁금한 점들이 생겨서 해당 내용들을 정리를 하려고 한다.

Query와 Mutation 차이

Query는 데이터를 읽을 때 사용하는 GraphQL 연산이다. 주로 데이터를 조회하는 데 사용되고, 서버 측에서 데이터를 변경하지 않는다.

(읽기 작업에 사용)

Mutation은 데이터를 변경(생성, 수정, 삭제) 할 때 사용하는 GraphQL 연산이다. 서버 측의 데이터를 변경하는 작업을 수행한다.

(쓰기 작업에 사용)

Args?

Argsargument의 약어로, GraphQL Query나 Mutation에 전달되는 매개변수를 의미한다.

Query나 Mutation에서 필요한 인자를 정의하고, 해당 인자를 사용해서 데이터를 요청하거나 변경하는 데 사용된다.

(ex: 특정 ID를 가진 사용자 정보를 요청할 때 해당 ID를 인자로 넘겨줌.)

ObjectType과 InputType의 차이

ObjectType은 GraphQL에서 반환하는 데이터의 형태를 정의하는데 사용된다. 주로 Query 연산의 반환 타입으로 사용되고, 데이터를 읽을 때 사용된다.

InputType은 GraphQL에서 인자로 전달되는 데이터의 형태를 정의하는데 사용된다. 데이터를 쓸 때 사용되며, InputType은 주로 데이터를 생성하거나 수정하는데 사용된다.

(복잡한 인자를 전달할 때 유용)

Field?

Field는 GraphQL 스키마에서 객체 타입의 속성을 정의하는데 사용된다. ObjectType이나 InputType에서 각 필드는 해당 객체의 속성을 나타낸다.

클라이언트가 원하는 데이터를 지정하는데 사용되고, 각 필드는 해당 필드의 타입과 함께 함수 형태로 정의될 수 있다.

InputType이나 ObjectType에서 number Type은 왜 GraphQL에서 제공하는 Int를 써야하나?

GraphQL은 강타입 언어로, 데이터 타입의 정확한 명시가 필요하다. Javascript에서 number는 정수와 부동소수점 숫자를 모두 나타낼 수 있다.

하지만 GraphQL에서는 이러한 구분을 명확하게 하기위해서 IntFloat라는 두 가지 숫자 타입을 제공한다.

따라서, number 타입을 GraphQL에서 사용하고자 할 때는 Int 혹은 Float 중 하나를 선택하여 명시해 주어야 한다.

정수 값으로 표현할 경우는 Int를, 소수점 값을 표현할 경우는 Float를 사용하면 된다. 이렇게 하면 데이터 타입이 명확하게 되면서 혼동을 줄이고, 더욱 견고한 API를 만들 수 있다.

그러면 GraphQL에서 String 타입은 따로 나누지 않는건가?

String 타입은 number와 다르게 다양한 형태의 데이터를 표현할 수 있다. 일반적인 텍스트 메시지부터 JSON 형식의 데이터나 Base64 인코딩된 데이터까지 다양한 형태의 문자열을 표현할 수 있다.

또한, Javascript에서 String은 큰 따옴표(")나 작은 따옴표(')로 둘러싸여 있기 때문에 GraphQL에서도 String으로 통일하여 사용하면 편리하다.

만약 GraphQL이 StringInt와 같이 세분화를 해서 타입을 나눈다면, 데이터 타입의 구분이 더 복잡해지고 혼동을 불러올 수 있다.

GraphQL은 타입의 정확성간결성을 위해 필요한 타입만을 나누어 제공한다.

따라서, String 타입은 단일한 문자열로 표현되며, 어플리케이션에서 필요한 형식으로 데이터를 변환하거나 처리할 수 있다. 이런 설계는 GraphQL의 유연성과 간결성을 유지하는 데 도움을 준다.

profile
Node.js 백엔드 개발자입니다!

0개의 댓글