이직한 회사에서 REST API나 gRPC를 사용해서 클라이언트와 통신을 하는 것이 아니라, GraphQL을 이용해서 통신을 한다.
GraphQL을 찍먹도 아닌 핥아보기만 한 나는 공부를 시작하고 작은 어플리케이션을 만들어보면서 궁금한 점들이 생겨서 해당 내용들을 정리를 하려고 한다.
Query는 데이터를 읽을 때 사용하는 GraphQL 연산이다. 주로 데이터를 조회하는 데 사용되고, 서버 측에서 데이터를 변경하지 않는다.
(읽기 작업에 사용)
Mutation은 데이터를 변경(생성, 수정, 삭제) 할 때 사용하는 GraphQL 연산이다. 서버 측의 데이터를 변경하는 작업을 수행한다.
(쓰기 작업에 사용)
Args는 argument
의 약어로, GraphQL Query나 Mutation에 전달되는 매개변수를 의미한다.
Query나 Mutation에서 필요한 인자를 정의하고, 해당 인자를 사용해서 데이터를 요청하거나 변경하는 데 사용된다.
(ex: 특정 ID를 가진 사용자 정보를 요청할 때 해당 ID를 인자로 넘겨줌.)
ObjectType은 GraphQL에서 반환하는 데이터의 형태를 정의하는데 사용된다. 주로 Query 연산의 반환 타입으로 사용되고, 데이터를 읽을 때 사용된다.
InputType은 GraphQL에서 인자로 전달되는 데이터의 형태를 정의하는데 사용된다. 데이터를 쓸 때 사용되며, InputType은 주로 데이터를 생성하거나 수정하는데 사용된다.
(복잡한 인자를 전달할 때 유용)
Field는 GraphQL 스키마에서 객체 타입의 속성을 정의하는데 사용된다. ObjectType이나 InputType에서 각 필드는 해당 객체의 속성을 나타낸다.
클라이언트가 원하는 데이터를 지정하는데 사용되고, 각 필드는 해당 필드의 타입과 함께 함수 형태로 정의될 수 있다.
GraphQL은 강타입 언어로, 데이터 타입의 정확한 명시가 필요하다. Javascript에서 number는 정수와 부동소수점 숫자를 모두 나타낼 수 있다.
하지만 GraphQL에서는 이러한 구분을 명확하게 하기위해서 Int와 Float라는 두 가지 숫자 타입을 제공한다.
따라서, number 타입을 GraphQL에서 사용하고자 할 때는 Int 혹은 Float 중 하나를 선택하여 명시해 주어야 한다.
정수 값으로 표현할 경우는 Int를, 소수점 값을 표현할 경우는 Float를 사용하면 된다. 이렇게 하면 데이터 타입이 명확하게 되면서 혼동을 줄이고, 더욱 견고한 API를 만들 수 있다.
String 타입은 number와 다르게 다양한 형태의 데이터를 표현할 수 있다. 일반적인 텍스트 메시지부터 JSON 형식의 데이터나 Base64 인코딩된 데이터까지 다양한 형태의 문자열을 표현할 수 있다.
또한, Javascript에서 String은 큰 따옴표(")나 작은 따옴표(')로 둘러싸여 있기 때문에 GraphQL에서도 String으로 통일하여 사용하면 편리하다.
만약 GraphQL이 String을 Int와 같이 세분화를 해서 타입을 나눈다면, 데이터 타입의 구분이 더 복잡해지고 혼동을 불러올 수 있다.
GraphQL은 타입의 정확성과 간결성을 위해 필요한 타입만을 나누어 제공한다.
따라서, String 타입은 단일한 문자열로 표현되며, 어플리케이션에서 필요한 형식으로 데이터를 변환하거나 처리할 수 있다. 이런 설계는 GraphQL의 유연성과 간결성을 유지하는 데 도움을 준다.