이런 분이면 더 좋아요
GraphQL이 처음인 사람
GraphQL 공식문서를 보기 귀찮은 사람
NestJS로 GraphQL을 만들어보고 싶은 사람
GraphQL 이란?
API를 위한 쿼리 언어
GraphQL은 API를 위한 쿼리 언어이며 이미 존재하는 데이터로 쿼리를 수행하기 위한 런타임 입니다. GraphQL은 API에 있는 데이터에 대한 완벽하고 이해하기 쉬운 설명을 제공하고 클라이언트에게 필요한 것을 정확하게 요청할 수 있는 기능을 제공하며 시간이 지남에 따라 API를 쉽게 진화시키고 강력한 개발자 도구를 지원합니다.
라고 적혀있다.
쿼리 언어이고, 런타임이다 라는 내용이 개인적으로는 핵심이라고 생각합니다
런타임 vs 런타임 환경
런타임
프로그램이 실행되고 있는 동안의 동작을 말한다. 컴퓨터 언어 안에 쓰인 프로그램을 관리하기 위해서 특정한 컴파일러나 가상머신이 사용하는 기본 코드의 라이브러리나 프로그램을 통틀어서 런타임 라이브러리 라고 한다.
런타임 환경
프로그램이 실행되는 환경을 의미한다. 우리에게 가장 친숙한 브라우저를 보면, JavaScript가 돌아간다는 것은 아마 대부분 알고 있을 것이다. 이때 JavaScript 가 우리 컴퓨터의 브라우저에서 동작한다. 따라서 우리는 브라우저를 JavaScript가 실행되는 런타임이라고 한다.
출처
https://ko.wikipedia.org/wiki/%EB%9F%B0%ED%83%80%EC%9E%84
여기서 봤을 때 정확한 번역은 런타임 환경 쪽이 더 정확해보이긴 한다. 물론 NodeJS라고 하는 JavaScript 를 작동시켜주는 것도 자바스크립트 런타임이라고 하고 있다. 이를 보면 대부분 혼용하여 사용하고 있기에 런타임과 런타임 환경을 정확하게 구분한다는 것은 별 의미 없는 일이지 않을까? 별로 중요하지는 않은 것 같다
GraphQL에 대한 개인적인 생각
100% 개인적인 생각이기에 그냥 그런가보다 하고 넘어가시면 됩니다
GraphQL은 사실 "명세"에 더 가깝다고 생각한다. GraphQL이라고 하는 무언가가 GraphQL에 해당하는 코드를 작동시키는 것이 아니라, GraphQL을 사용하려면 이런게 가능하고, 이런 것들을 만족해서 사용하면 다 GraphQL이야 그러니까 어떤 어어로도 이런 스펙만 맞춰서 적어줘 라고 한 것과 같다고 생각한다.
사실 GraphQL을 사용하지 않고도, GraphQL같은 데이터를 만들어 낼 수 있다. 그냥 POST요청에 데이터 안에 GraphQL에 해당하는 데이터를 그냥 집어 넣어버리고,
{
"Method":"Query",
"Field":{
"Hello":{
"World"
}
}
}
이렇게 한다면 사실 API 요청에서 이를 잘 처리해서 데이터를 되돌려줄 내용이 있다면 그것이 GraphQL이 된다.
과연 그렇다면 저렇게 요청을 만들어두고 Switch Case를 쓰는 것보다 더 값진 무언가를 만들어 낼 수 있을까?
RestAPI를 따르되, 한 EndPoint에서 저렇게 받아들이는 것은 서버 전체의 통일성을 해친다는 것이 개인적인 내 생각이다. 저렇게 쓰게 된다면 물론 GraphQL을 안 쓰더라도 동일한 효과를 만들어낼 수 있지만, 이를 여러 군데에 배치하게 되면 될수록 코드를 관리하기 힘들어 질 것이다. 그럴바에야 GraphQL도 쓴다 라고 하면서 한 EndPoint를 전사적으로 공유했을 때 얻는 효과가 더 클 것이라고 생각한다.
클라이언트의 입장
서버에서 데이터를 어떤 식으로 가져오면 좋을까? 라고 하는 부분을 담당하는 하나의 프로토콜 즉 규약쪽에 가까울 것 같다.
여러 종류의 데이터를 우리가 지정한 방법으로 요청하면, 받을 수 있다 라고 하는 내용을 미리 정해둔 것이고, 이를 통해서 서버에서 데이터를 가져올 수 있다.
이와 비슷한 것은 RestAPI 에 해당하는 프로토콜이 있을 수 있다.
RestAPI라고 하는 것도 이 주소로 요청을 하면, 저쪽에 무슨 자원이 있으니 이렇게 된다 라고 하는 부분을 알기 쉽게 이론화 해두고 기록해둔 내용이다.
서버의 입장
서버의 입장에서는 어떤 데이터를 제공할 지를 미리 정해두고, 어떻게 그 데이터를 전달해놓을 지 따지고 보면 Rest랑 큰 차이가 없다. GraphQL이라는 것을 사용하고, Schema를 정의하고, 거기서 Crud를 할 수 있도록 만들어 둔것과 비슷하다고 일단은 생각해도 무방하다
다음 글에는 Graphql의 실제 문법, 내용들을 공식문서에 기반해서 알아볼 것이다
'프로그래밍 방법' 카테고리의 다른 글
MSA에서 필수로 알아야 하는 Circuit Breaker 패턴 (0) | 2023.09.11 |
---|---|
Oauth의 등장 배경과, 변화 과정에 대해 알아보자 (0) | 2023.05.24 |
명확한 판단 근거를 만들자(feat: chatgpt) (0) | 2023.03.29 |
도메인 주도 설계 철저 입문 Domain Driven Design(DDD) - 2 (0) | 2022.09.13 |
도메인 주도 설계 철저 입문 Domain Driven Design(DDD) (2) | 2022.09.09 |