맨위로가기

GraphQL

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

GraphQL은 페이스북에서 개발되어 2015년에 오픈 소스로 공개된 쿼리 언어이자 서버 런타임이다. 데이터 읽기, 쓰기, 실시간 업데이트(구독)를 지원하며, 클라이언트가 필요한 데이터의 구조를 명시하면 서버가 해당 구조에 맞춰 데이터를 반환하는 방식으로 작동한다. GraphQL은 스키마 정의 언어(SDL)를 사용하여 타입과 필드를 정의하며, 쿼리, 뮤테이션, 구독을 통해 데이터를 주고받는다. 페이스북, 깃허브, 옐프 등에서 API를 구축하는 데 사용되며, 다양한 프로그래밍 언어로 서버 구현이 가능하다.

더 읽어볼만한 페이지

  • 데이터 모델링 언어 - 임베디드 SQL
    임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다.
  • 데이터 모델링 언어 - 데이터 정의 언어
    데이터 정의 언어(DDL)는 SQL에서 테이블, 열, 데이터 형식 등을 정의하고 데이터베이스 스키마를 수정하는 데 사용되는 명령어 집합이며, `CREATE`, `DROP`, `ALTER`, `TRUNCATE` 등의 명령어를 포함하고 데이터 구조를 정의하는 다양한 형식 언어들을 포괄하는 의미로도 사용된다.
  • 질의 언어 - 임베디드 SQL
    임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다.
  • 질의 언어 - XQuery
    XQuery는 함수형 프로그래밍 패러다임을 지원하며 XPath 식 구문의 상위 집합을 포함하는 XML 데이터 추출 및 조작을 위한 쿼리 언어로서, FLWOR 식을 통해 XML 데이터 조작 및 새로운 XML 문서 구성을 지원하고 XQuery 및 XPath 데이터 모델(XDM)을 기반으로 한다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 브루클린 미술관
    브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 광주지방기상청
    광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다.
GraphQL - [IT 관련 정보]에 관한 문서
개요
GraphQL 로고
GraphQL 로고
개발오픈 소스
최초 릴리스2015년 9월 14일
최신 버전 릴리스2021년 10월
저장소GraphQL 사양 GitHub 저장소
프로그래밍 언어자바
자바스크립트
루비
스칼라
기타
웹사이트GraphQL 공식 웹사이트
상세 정보
개발자메타 플랫폼스
유형데이터 질의 언어

2. 역사

페이스북은 2012년에 GraphQL 개발을 시작하여 2015년에 초안 사양과 참조 구현을 오픈 소스로 공개했다.[3] 2018년 11월 7일, GraphQL 프로젝트는 비영리 단체인 리눅스 재단이 운영하는 새로 설립된 GraphQL 재단으로 이전되었다.[4][5][31][32]

2018년 2월 9일, GraphQL 스키마 정의 언어(SDL)가 사양의 일부가 되었다.[6][34]

GraphQL은 페이스북, 깃허브, 옐프, 쇼피파이 등 많은 기업들의 공개 API에 채택되었다.[7]

GraphQL의 저자인 리 바이런은 GraphQL을 웹 플랫폼 전체에서 사용되도록 하는 것을 목표로 하고 있다.[33]

2. 1. 개발 및 공개

페이스북은 2012년에 GraphQL 개발을 시작하여 2015년에 초안 사양과 참조 구현을 오픈 소스로 공개했다.[3] 2018년에는 비영리 단체인 리눅스 재단에서 운영하는 새로 설립된 GraphQL 재단으로 이전되었다.[4][5]

2018년 2월 9일, GraphQL 스키마 정의 언어(GraphQL Schema Definition Language)가 사양의 일부가 되었다.[6]

2. 2. GraphQL 재단 설립

페이스북은 2012년에 GraphQL 개발을 시작하여 2015년에 초안 사양과 참조 구현을 오픈 소스로 공개했다.[3] 2018년에는 비영리 단체인 리눅스 재단에서 운영하는 GraphQL 재단이 설립되었고, GraphQL 프로젝트가 이관되었다.[4][5]

2. 3. SDL 추가

2018년 2월 9일, GraphQL 스키마 정의 언어(SDL, GraphQL Schema Definition Language)가 사양의 일부로 추가되었다.[6]

2. 4. 주요 채택 사례

페이스북, 깃허브, 옐프, 쇼피파이 등 많은 기업들이 API 구축에 GraphQL을 채택하고 있다.[7] 특히, 깃허브는 4세대 API로 "GitHub GraphQL API v4"를 제공하며,[42] 그 이유로 "자사 통합자에게 더 많은 유연성"을 제공하기 위함이라고 밝혔다.[43]

3. 설계

GraphQL은 데이터 읽기, 쓰기(변경), 데이터 변경 사항 구독(실시간 업데이트 – 일반적으로 웹소켓을 사용하여 구현)을 지원한다.[8] GraphQL 서비스는 필드를 가진 타입을 정의한 다음, 각 필드에 대한 데이터를 해결하는 함수를 제공하여 생성된다. 타입과 필드는 ''스키마 정의''로 알려져 있으며, 데이터를 검색하고 매핑하는 함수는 ''리졸버''라고 불린다.[9]

스키마 유효성 검사 후, GraphQL 쿼리는 서버에 의해 실행된다. 서버는 원본 쿼리 모양을 반영하는 결과를 반환하며, 일반적으로 JSON 형식이다.[10]

GraphQL에서 클라이언트는 쿼리 내용을 담은 '''''document'''''를 전송하고, GraphQL 서비스는 쿼리를 실행하여 결과를 반환한다. ''document''는 DSL인 '''''GraphQL 쿼리 언어'''''로 작성된다.[22]

RESTful API와 달리 GraphQL은 리소스를 ''document''로 표현한다. GraphQL WebAPI는 단일 API 엔드포인트로 ''document''를 POST하여 쿼리를 실행한다.

''Document''를 받은 GraphQL 서비스는 ''Document'' 내 '''''field'''''를 최상위부터 '''''resolver'''''를 통해 값으로 해결한다. 클라이언트가 원하는 값은 모두 field로 ''Document''에 기재되어 있으므로, ''resolver'' 그룹을 통해 모든 ''field''를 해결하면 필요한 데이터를 한 번의 쿼리로 얻을 수 있다. GraphQL 서비스 처리 시스템은 이 field로 구성된 그래프 구조를 위에서부터 resolver를 사용하여 해결하며, resolver는 서비스 구현자가 구현한다.

GraphQL은 document로부터 주어진 구조에 resolver 그룹을 적용하여, 사전에 결정된 리소스에 접근하는 RESTful API와 달리 스키마 유효한 임의의 리소스를 한 번의 접근으로 얻을 수 있다.

이처럼 GraphQL은 클라이언트로부터 쿼리 구조를 전달받는 '''유연성'''과 한 번의 쿼리로 필요한 값만 얻는 '''효율성'''을 갖는다.

GraphQL 서비스가 허용하는 타입은 IDL인 "type system definition language" (schema definition language)로 작성된 Schema로 기술된다.

GraphQL은 API 사양이며, 통신 방식 구현과는 독립적이다.

3. 1. 기본 작동 방식

GraphQL은 클라이언트가 쿼리를 통해 필요한 데이터의 구조를 명시하면, 서버가 그 구조에 맞춰 데이터를 반환하는 방식으로 작동한다. RESTful API와 달리 단일 엔드포인트에서 다양한 쿼리를 처리할 수 있다.[8]

클라이언트는 GraphQL 쿼리 언어(DSL)로 작성된 `document`를 전송하고, GraphQL 서비스는 이 쿼리를 실행하여 결과를 반환한다. 다음은 `document`를 통해 내일 날씨를 가져오는 쿼리 예시이다.[22]

```graphql

// document

{

tomorrow {

weather

rainyPercent

}

}

```

```json

{

"tomorrow": {

"weather": "cloudy",

"rainyPercent": 30

}

}

```

GraphQL 서비스는 `document` 내의 `field` (예: `tomorrow`)를 최상위부터 하나씩 `resolver`를 통해 값으로 해결한다. 클라이언트가 받고 싶은 값은 모두 `field`로 `document`에 기재되어 있으므로, `resolver` 그룹을 통해 모든 `field`를 해결하면 필요한 데이터를 한 번의 쿼리로 얻을 수 있다. GraphQL 서비스 처리 시스템은 이 `field`로 구성된 그래프 구조를 위에서부터 `resolver`를 사용하여 해결하는 역할을 한다. `resolver`는 서비스 구현자에 의해 구현된다.[22]

RESTful API가 사전에 결정된 리소스에 접근하는 것과 달리, GraphQL은 `document`로부터 주어진 구조에 `resolver` 그룹을 연속적으로 적용하여 데이터를 가져온다. 따라서 GraphQL에서는 스키마에 맞는 임의의 리소스를 한 번의 접근으로 얻을 수 있는 유연성과 효율성을 가진다. 예를 들어, RESTful API에서는 "어떤 사람의 친구의 친구 목록"을 얻으려면 여러 번 API를 호출해야 하지만, GraphQL에서는 `Person.friends` `field` `resolver`만 있으면 `document`를 전송하여 한 번에 "친구의 친구 목록"을 얻을 수 있다.[22]

3. 2. 타입 시스템

GraphQL 서비스는 필드를 가진 타입을 정의한 다음, 각 필드에 대한 데이터를 해결하는 함수를 제공하여 생성된다. 타입과 필드는 '스키마 정의'로 알려진 것을 구성한다. 데이터를 검색하고 매핑하는 함수는 '리졸버'라고 불린다.[9]

스키마에 대해 유효성 검사를 거친 후, GraphQL 쿼리는 서버에 의해 실행된다. 서버는 원본 쿼리의 모양을 반영하는 결과를 반환하며, 일반적으로 JSON 형식이다.[10] GraphQL 스키마의 루트 타입은 기본적으로 `Query`이며, 쿼리할 수 있는 모든 필드를 포함한다. 다른 타입들은 GraphQL 서버가 반환할 수 있는 객체와 필드를 정의한다. 문자열, 숫자, ID 등과 같은 것들을 나타내기 위해 스칼라라고 불리는 여러 기본 타입이 있다.

필드는 기본적으로 널 가능으로 정의되며, 필드를 널 불가능(필수)으로 만들려면 후행 느낌표를 사용할 수 있다. 필드의 타입을 대괄호로 묶어 필드를 목록으로 정의할 수 있다 (예: `authors: [String]`).[11]

3. 3. 쿼리(Queries)

GraphQL에서 쿼리는 클라이언트가 필요로 하는 데이터의 정확한 형식을 정의하는 역할을 한다.[10]

예시:

```graphql

query CurrentUser {

currentUser {

name

age

}

}

```

위 쿼리가 GraphQL 서버에서 유효성 검사를 거쳐 실행되면 데이터는 아래와 같이 동일한 형태로 반환된다.[10]

```json

{

"currentUser": {

"name": "John Doe",

"age": 23

}

}

```

GraphQL에서는 클라이언트가 쿼리 내용을 적은 '''''document'''''를 전송하고, GraphQL 서비스가 쿼리를 실행하여 결과를 반환한다. ''document''는 DSL인 '''''GraphQL 쿼리 언어'''''를 사용하여 기술된다.[22]

아래는 내일 날씨를 가져오는 쿼리의 ''document''와 GraphQL 서비스에서 반환된 쿼리 결과(JSON)이다.

```graphql

// document

{

tomorrow {

weather

rainyPercent

}

}

```

```json

{

"tomorrow": {

"weather": "cloudy",

"rainyPercent": 30

}

}

```

RESTful API와 달리 GraphQL은 리소스를 ''document''로 표현한다. GraphQL WebAPI의 경우, 단일 API 엔드포인트로 이 ''document''를 POST (예: `https://API.internal./graphql` 엔드포인트에 ''document''를 Body로 POST) 함으로써 쿼리가 실행된다.

''Document''를 수신한 GraphQL 서비스는 ''Document'' 내의 '''''field''''' (예: tomorrow)를 최상위에서부터 하나씩 '''''resolver'''''를 통해 값으로 해결한다. 클라이언트가 받고 싶은 값은 모두 field로 ''Document''에 과부족 없이 기재되어 있으므로, ''resolver'' 그룹을 통해 모든 ''field''를 해결하면 과부족 없는 데이터를 한 번의 쿼리로 얻을 수 있다. GraphQL 서비스 처리 시스템은 이 field로 구성된 그래프 구조를 위에서부터 resolver를 사용하여 해결하는 역할을 한다. resolver는 서비스 구현자에 의해 구현된다.

구조가 사전에 결정된 리소스에 접근하는 RESTful API와 달리, GraphQL에서는 그 자리에서 document로부터 주어진 구조에 resolver 그룹을 연속적으로 적용하여 해결한다. 따라서 RESTful API에서는 정해진 리소스만 한 번의 접근으로 얻을 수 있지만, GraphQL에서는 스키마 유효한 임의의 리소스를 한 번의 접근으로 얻을 수 있다. 예를 들어 RESTful API에서는 "어떤 사람의 친구 목록" API가 있어도 "어떤 사람의 친구의 친구 목록"을 얻기 위해서는 한 번 친구 목록을 얻은 후에 클라이언트에서 API를 다시 호출 (클라이언트에서 자체 재귀를 수행) 해야 한다. 반면 GraphQL에서는 "Person.friends field" resolver만 있으면 {personA {friends {friends {name} } } } ''Document''를 POST하는 것만으로 resolver가 연속적으로 적용되어 "친구의 친구 목록"을 한 번에 얻을 수 있다.

이처럼 GraphQL은 클라이언트로부터 쿼리 구조를 전달할 수 있는 '''유연성'''을 가지며, 한 번의 쿼리로 필요충분한 값만을 얻을 수 있는 '''효율성'''을 갖는다.

GraphQL은 어디까지나 API 사양이며, 통신 방식의 구현과는 독립적이다. 예를 들어 GraphQL WebAPI를 구현할 때, ''document''를 URL 쿼리 문자열에 실을 수도 있다 (예: GET https://API.internal./graphql?query={tomorrow{weather}}).[23]

3. 4. 뮤테이션(Mutations)

GraphQL 뮤테이션은 데이터를 생성, 업데이트 또는 삭제할 수 있게 해준다.[8] 뮤테이션은 일반적으로 클라이언트에서 서버로 데이터를 전달할 수 있는 '변수'를 포함한다. 또한 뮤테이션은 작업이 완료된 후 클라이언트에 반환될 데이터의 형태를 정의한다.

아래는 뮤테이션 예시이다.

```graphql

mutation CreateUser($name: String!, $age: Int!) {

createUser(userName: $name, age: $age) {

name

age

}

}

```

변수는 뮤테이션의 변수 이름과 일치하는 필드를 가진 객체로 전달된다.

```json

{

"name": "Han Solo",

"age": 42

}

```

작업이 완료되면 GraphQL 서버는 뮤테이션에 의해 정의된 형태와 일치하는 데이터를 반환한다.

```json

{

"data": {

"createUser": {

"name": "Han Solo",

"age": 42

}

}

}

3. 5. 구독(Subscriptions)

GraphQL은 데이터 변경 사항 구독(실시간 업데이트 – 일반적으로 웹소켓을 사용하여 구현)을 지원한다.[8]

GraphQL은 또한 구독이라는 작업에서 서버에서 클라이언트로 전송되는 실시간 업데이트를 지원한다. 다시 말해, 클라이언트는 업데이트가 있을 때마다 필요한 데이터의 형태를 정의한다. 관련 필드를 업데이트하는 변형이 GraphQL 서버를 통해 이루어지면, 구독을 통해 설정된 형식으로 데이터가 구독된 모든 클라이언트로 전송된다.

3. 6. 리졸버(Resolvers)

GraphQL에서 리졸버(Resolver)는 각 필드에 대한 데이터를 실제로 가져오는 함수이다.[9] GraphQL 서비스 구현자가 작성하며, 모든 필드를 해결하여 클라이언트가 요청한 구조에 맞는 데이터를 반환한다.

GraphQL 서비스는 ''Document''를 수신하면 ''Document'' 내의 '''''field''''' (예: tomorrow)를 최상위에서부터 하나씩 '''''resolver'''''를 통해 값으로 해결한다.[22] 클라이언트가 받고 싶은 값은 모두 field로 ''Document''에 정확하게 기재되어 있으므로, ''resolver'' 그룹을 통해 모든 ''field''를 해결하면 필요한 데이터를 한 번의 쿼리로 얻을 수 있다. GraphQL 서비스 처리 시스템은 이 field로 구성된 그래프 구조를 위에서부터 resolver를 사용하여 해결하는 역할을 한다. resolver는 서비스 구현자에 의해 구현된다.

값 해결(Value Resolution)은 Field의 값을 산출하는 단계이다.[29]

의사(擬似) JavaScript 코드는 다음과 같다.

```javascript

function ResolveFieldValue(objectType, objectValue, fieldName, argumentValues){

const resolver = getExternalResolver(ojectType, fieldName);

return resolver(objectValue, argumentValues);

}

3. 7. 인자(Arguments)

GraphQL에서 '''인자'''는 쿼리를 제어하는 데 사용된다. GraphQL 객체의 각 필드는 0개 이상의 인자를 가질 수 있다[24]. GraphQL 서비스에서는 쿼리를 최상위 레벨의 필드부터 '''리졸버'''를 통해 해결해 나가는데, 인자는 이때 리졸버로 전달되어 리졸버의 동작을 제어한다[25]. 다음 예시는 "도도부현/name" 인자와 "날씨/weather" 인자를 사용하여 도도부현-도시 목록에서 tokyo에 포함된 맑음/sunny인 도시를 가져오는 예시이다.

```graphql

// document

{

prefecture(name: "Tokyo") {

prefName

cities(weather: "sunny") {

cityName

rainyPercent

}

}

}

```

```json

{

"prefecture": {

{

"prefName": "Tokyo",

"cities": [

{

"cityName": "Shinjuku",

"rainyPercent": 10

},

{

"cityName": "Ikebukuro",

"rainyPercent": 0

}

]

}

}

}

3. 8. 지시어(Directives)

GraphQL에서 '''지시어'''는 쿼리를 제어하는 데 사용된다. GraphQL 객체의 각 필드는 ''지시어''를 가질 수 있다.[26] ''지시어''는 처리 시스템에 의존하는 모든 처리를 지정하는 주석이다.[27] 모든 처리 시스템에 구현되는 ''지시어''의 예로 `@include(if: Boolean)`가 있으며, 이는 필드 무시를 지정한다.

다음은 지시어 사용 예시이다.

```graphql

{

sinjuku {

weather

}

ikebukuro @include(if: false) {

weather

rainyPercent

}

}

```

위 쿼리에 대한 응답은 다음과 같다.

```json

{

"sinjuku": {

"weather": "cloudy"

}

}

```

모든 ''리졸버''에 `@include`에 해당하는 인수를 준비하면 동일한 기능을 제공할 수 있지만, ''지시어''를 사용하면 ''리졸버''를 수정하지 않고도 ''지시어'' 처리 시스템 한 곳에서만 구현하여 이 기능을 제공할 수 있다.

지시어는 GraphQL 서비스 처리 시스템 외에도 활용될 수 있다. 예를 들어, AWS Amplify는 스키마상의 ''지시어를 기반으로 클라우드 리소스 프로비저닝 코드 생성''("GraphQL Transform")을 구현하고 있다.[28] `@model영어`이 부여된 필드는 ''리졸버''가 자동으로 생성되고, DynamoDB에 리소스가 준비된다. 이는 GraphQL 서비스 처리 시스템이 아닌 Amplify CLI에 의해 수행된다.

4. 형식

GraphQL에서 클라이언트는 쿼리 내용을 담은 '''''document'''''(문서)를 전송하고, GraphQL 서비스는 이 쿼리를 실행하여 결과를 반환한다. ''document''는 DSL인 '''''GraphQL 쿼리 언어'''''를 사용하여 작성된다.[22]

필드(Field)는 이름(Name)으로 구성되며, 별칭(Alias), 인자(Arguments), 지시어(Directives)를 사용할 수 있다. 또한 하위 필드(subField)를 가질 수 있다.[1]

4. 1. 문서 (Document)

GraphQL에서 클라이언트는 쿼리 내용을 담은 '''''document'''''(문서)를 전송하고, GraphQL 서비스는 이 쿼리를 실행하여 결과를 반환한다. ''document''는 DSL인 '''''GraphQL 쿼리 언어'''''를 사용하여 작성된다.[22]

''Document''(문서)는 하나 이상의 ''OperationDefinition''(작업 정의)으로 구성된다. 작업 정의는 쿼리(query), 뮤테이션(mutation), 구독(subscription) 중 하나이다. 작업 정의가 하나만 있다면 이름(Name)을 생략할 수 있으며, 작업 유형(OperationType)이 쿼리(query)라면 이 또한 생략 가능하다.



// document(문서)

OpType Name [VarDef][Directives] {

...

}

OpType Name [VarDef][Directives] {

...

}





// e.g.

query ExampleQuery1 {

resource

}

query ExampleQuery2 ($var: S) @skip(if: false) {

time

}


4. 2. 필드 (Field)

필드는 이름(Name)으로 구성되며, 별칭(Alias), 인자(Arguments), 지시어(Directives)를 사용할 수 있다. 또한 하위 필드(subField)를 가질 수 있다.[1]

```text

{

[별칭] 이름 [인자][지시어] [선택 집합]

}

```

예시:

```text

// 예시 1 - 단순한 경우

{ resource }

```

```text

// 예시 2 - 전체적인 경우

{ time: resource (arg1: "arg") @skip(if:false) { subResource } }

5. 구현

GraphQL은 클라이언트 및 서버 구현을 통해 다양한 개발 환경에서 API를 구축하고 사용할 수 있도록 지원한다.

5. 1. 클라이언트 구현

GraphQL 클라이언트는 HTTP를 통해 GraphQL API 엔드포인트에 ''document''(문서)를 POST하여 쿼리를 실행한다. 라이브러리 없이도 쿼리를 실행할 수 있지만[35], Apollo Client[36], Relay[37]등의 라이브러리를 사용하면 더 효율적으로 GraphQL API를 사용할 수 있다.

5. 2. 서버 구현

GraphQL 서버는 다양한 프로그래밍 언어로 구현할 수 있다. 자바스크립트[38], [39], 파이썬[40], 루비, 자바, C#, 스칼라, Go, 엘릭서[41], Erlang, PHP, R, 클로저 등으로 작성된 서버 구현이 존재한다.

6. 다른 쿼리 언어와의 비교

GraphQL은 SPARQL과 같은 완전한 그래프 쿼리 언어나, SQL 방언의 추이적 폐쇄를 지원하는 기능을 제공하지 않는다.[1] 예를 들어, 개인의 부모를 보고하는 GraphQL 인터페이스는 단일 쿼리 내에서 모든 조상 집합을 반환할 수 없다.[1]

6. 1. 그래프 데이터베이스 쿼리 언어와의 비교

GraphQL은 SPARQL과 같은 완전한 그래프 쿼리 언어나, SQL 방언의 추이적 폐쇄를 지원하는 기능을 제공하지 않는다.[1] 예를 들어, 개인의 부모를 보고하는 GraphQL 인터페이스는 단일 쿼리 내에서 모든 조상 집합을 반환할 수 없다.[1]

7. 테스트

GraphQL API는 수동으로 테스트하거나 자동화된 도구를 사용하여 테스트할 수 있다. 자동 테스트 생성도 가능하며, 타입 스키마와 인트로스펙션 기능을 통해 검색 기반 기술을 사용하여 새로운 요청을 생성할 수도 있다.[12][13]

GraphQL 구현 테스트에는 Postman, GraphiQL, Apollo Studio, GraphQL Hive, GraphQL Editor, Step CI 등의 도구를 사용할 수 있다.[14]

7. 1. 수동 및 자동 테스트

GraphQL API는 수동으로 테스트하거나, 자동화된 도구를 사용하여 테스트할 수 있다. 자동 테스트 생성도 가능하다.[12] 타입 스키마와 인트로스펙션 기능을 통해 검색 기반 기술을 사용하여 새로운 요청을 생성할 수도 있다.[13]

GraphQL 구현을 테스트하는 데 사용되는 소프트웨어 도구로는 Postman, GraphiQL, Apollo Studio, GraphQL Hive, GraphQL Editor 및 Step CI가 있다.[14]

7. 2. 테스트 도구

GraphQL API는 수동으로 테스트하거나, GraphQL 요청을 발행하고 결과의 정확성을 확인하는 자동화된 도구를 사용하여 테스트할 수 있다. 자동 테스트 생성도 가능하다.[12] 타입 스키마와 인트로스펙션 기능을 통해 검색 기반 기술을 사용하여 새로운 요청을 생성할 수도 있다.[13]

GraphQL API 테스트에는 Postman, GraphiQL, Apollo Studio, GraphQL Hive, GraphQL Editor, Step CI 등의 도구를 사용할 수 있다.[14]

참조

[1] 웹사이트 GraphQL October 2021 Release Notes https://github.com/g[...]
[2] 웹사이트 Learn GraphQL Fundamentals with Fullstack Tutorial https://www.howtogra[...] 2023-04-25
[3] 웹사이트 GraphQL: A data query language https://code.fb.com/[...] 2015-09-14
[4] 뉴스 Facebook's GraphQL gets its own open-source foundation https://techcrunch.c[...] TechCrunch 2018-11-07
[5] 뉴스 The Linux Foundation Announces Intent to Form New Foundation to Support GraphQL https://www.linuxfou[...] The Linux Foundation 2023-03-17
[6] 웹사이트 GraphQL SDL included in Github repository https://github.com/f[...]
[7] 웹사이트 Popular public APIs that use GraphQL https://www.frontend[...] 2023-07-25
[8] 웹사이트 GraphQL https://web.archive.[...] Facebook 2018-07-04
[9] 웹사이트 Introduction to GraphQL https://graphql.org/[...] 2023-04-25
[10] 웹사이트 Execution https://graphql.org/[...] 2023-04-25
[11] 웹사이트 GraphQL https://spec.graphql[...] 2023-04-25
[12] 간행물 Deviation Testing: A Test Case Generation Technique for GraphQL APIs 2018
[13] 서적 2021 IEEE/ACM International Conference on Automation of Software Test (AST) IEEE 2021-05
[14] 웹사이트 Hive Laboratory https://the-guild.de[...] 2024-11-26
[15] 웹사이트 Release October 2021 · graphql/graphql-spec · GitHub https://github.com/g[...] 2024-10-28
[16] 문서 https://graphql.org/
[17] 문서 https://graphql.org/[...]
[18] 뉴스 GraphQL vs REST: Overview https://phil.tech/ap[...] Phil Sturgeon 2018-11-25
[19] 뉴스 Why use GraphQL, good and bad reasons https://honest.engin[...] Honest Engineering 2018-11-26
[20] 웹사이트 GraphQL Fundamentals https://www.howtogra[...] 2018-07-04
[21] 웹사이트 GraphQL https://facebook.git[...] Facebook 2018-07-04
[22] 문서 GraphQL specification https://facebook.git[...]
[23] 문서 GraphQL https://graphql.org/[...]
[24] 문서 GraphQL specification https://graphql.org/[...]
[25] 문서 GraphQL https://graphql.org/[...]
[26] 문서 GraphQL https://graphql.org/[...]
[27] 문서 GraphQL Specification https://spec.graphql[...]
[28] 문서 Amplify Libraries https://docs.amplify[...]
[29] 문서 6.4.2 Value Resolution https://spec.graphql[...]
[30] 웹사이트 GraphQL: A data query language https://code.fb.com/[...] 2019-10-19
[31] 뉴스 Facebook’s GraphQL gets its own open-source foundation https://techcrunch.c[...] TechCrunch 2018-11-07
[32] 뉴스 The Linux Foundation Announces Intent to Form New Foundation to Support GraphQL - The Linux Foundation https://www.linuxfou[...] The Linux Foundation 2018-11-07
[33] 웹사이트 Is GraphQL Moving Toward Ubiquity? https://nordicapis.c[...] 2019-10-19
[34] 웹사이트 "[RFC] GraphQL Schema Definition Language (SDL) by leebyron · Pull Request #90 · graphql/graphql-spec" https://github.com/g[...] 2019-10-19
[35] 문서 graphql.org https://graphql.org/[...]
[36] 웹사이트 Introduction https://www.apollogr[...] 2019-10-19
[37] 웹사이트 Relay · A JavaScript framework for building data-driven React applications https://relay.dev/ 2019-10-19
[38] Citation A reference implementation of GraphQL for JavaScript: graphql/graphql-js https://github.com/g[...] GraphQL 2019-10-19
[39] 웹사이트 GraphQL - Perl implementation of GraphQL - metacpan.org https://metacpan.org[...] 2019-10-19
[40] 웹사이트 Graphene http://graphene-pyth[...] 2017-06-18
[41] 웹사이트 Absinthe: The GraphQL toolkit for Elixir http://absinthe-grap[...] 2018-07-19
[42] Github GitHub chose GraphQL for our API v4 https://developer.gi[...]
[43] Github because it offers significantly more flexibility for our integrators. https://developer.gi[...]
[44] Github blog Despite all the information we provided, we heard from integrators that our REST API also wasn’t very flexible. https://github.blog/[...]
[45] 웹인용 GraphQL October 2021 Release Notes https://github.com/g[...]
[46] 웹인용 GraphQL: A query language for APIs. http://graphql.org/
[47] 웹인용 GraphQL: A data query language https://code.faceboo[...]
[48] 웹인용 Apollo Client: The flexible, production ready GraphQL client for React, and all JavaScript and native apps https://www.apollogr[...]
[49] 웹인용 Relay: A JavaScript framework for building data-driven React applications https://facebook.git[...]
[50] 웹인용 Graphene http://graphene-pyth[...] 2017-06-18



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com