MSA 아키텍처가 인기를 끌고 있고, MSA의 근간이 되는 REST API를 방식으로 지원하는 GraphQL 도입을 하는 경우가 늘고 있다. REST API + ORM + GraphQL를 통해서 생산성을 높이기 위한 노력이 증가하고 있다.
GraphQL은 2015년에 페이스북 개발자들이 모바일 어플리케이션을 제작하면서 개발되어 공개된 오픈 소스 쿼리 언어 및 런타임입니다. GraphQL은 기존의 RESTful API에 비해 데이터를 검색하고 조작하는 효율적이고 유연한 방법을 제공합니다.
GraphQL을 사용하면 클라이언트는 API에서 필요한 정확한 데이터를 지정할 수 있으며, 서버는 해당 데이터만 응답합니다. 이는 REST API에서 서버가 정의한 고정된 엔드포인트와 데이터 구조로 인해 발생하는 데이터의 과다 또는 부족한 문제를 해결합니다.
GraphQL의 몇 가지 주요 개념은 다음과 같습니다:
1. 스키마(Schema): GraphQL 스키마는 쿼리할 수 있는 데이터 유형과 그들 간의 관계를 정의합니다. 이는 클라이언트와 서버 간의 계약 역할을 하며, 양측이 교환되는 데이터를 이해할 수 있도록 합니다.
2. 쿼리(Query): 클라이언트는 서버에게 특정 데이터를 요청하기 위해 쿼리를 전송할 수 있습니다. 쿼리의 구조는 필요한 데이터의 구조와 일치하여 클라이언트가 한 번의 요청으로 관련 데이터를 가져올 수 있게 합니다.
3. 뮤테이션(Mutation): GraphQL은 데이터를 수정하기 위해 뮤테이션을 지원합니다. 뮤테이션을 사용하면 클라이언트가 유사한 구문을 사용하여 데이터를 생성, 업데이트 또는 삭제할 수 있습니다.
4. 리졸버(Resolver): 리졸버는 쿼리나 뮤테이션에서 요청한 데이터를 가져오거나 해결하는 역할을 하는 함수입니다. 리졸버는 서버 측에 정의되며, 스키마에서 지정한 필드와 매핑됩니다.
5. 구독(Subscriptions): GraphQL은 구독을 통해 실시간 업데이트도 지원합니다. 클라이언트는 특정 이벤트나 데이터 변경에 대해 구독할 수 있으며, 서버는 구독된 클라이언트에게 업데이트를 푸시합니다.
예제 사용법
- 단순 쿼리
- GraphQL Query
{
user(id: "100") {
name,
email
}
- The result data
{
"user": {
"id": "100",
"name": "John Doe",
"email": "john@gamil.com"
}
- 여러 리소스 반환 쿼리
- GraphQL Query
{
user(id: "100") {
name,
email,
posts {
title
}
}
- The result data
{
"user": {
"id": "100",
"name": "John Doe",
"email": "john@gamil.com",
"posts": [
{"title": "Post 1"},
{"title": "Post 2"}
]
}
GraphQL은 유연성, 효율성 및 선언적인 특성으로 인해 인기를 얻고 있습니다. 클라이언트는 다양한 소스에서 데이터를 집계할 수 있으며, 과다한 데이터 요청을 피함으로써 네트워크 오버헤드를 줄이고, 강한 타입 지정 및 내부 검사를 가능하게 합니다.
GraphQL을 구현하기 위해 Apollo, Relay, graphql-js 등과 같은 다양한 라이브러리와 프레임워크를 사용할 수 있습니다. 이러한 도구들은 GraphQL 서버와 클라이언트를 효율적으로 구축하는 데 필요한 구성 요소를 제공합니다.
참조
ChatGPT
https://blog.codefactory.ai/prisma/deploy-prisma-in-five-minutes/
https://hwasurr.io/api/graphql-example/
'Development' 카테고리의 다른 글
IT 프로덕트(솔류션) 개발 단계 (2) | 2023.06.13 |
---|---|
객체 지향 패러다임 (0) | 2023.06.12 |
CI/CD란 무엇인가? (0) | 2023.06.02 |
API란 무엇인가? (0) | 2023.06.01 |
MSA 아키텍처 (0) | 2023.05.31 |