GraphQL 이란 » 이력 » 버전 8
이름없음, 2021/06/01 05:02
1 | 8 | 이름없음 | h1(wiki-class-ic wiki-class-id wiki-class-fr wiki-class-ba wiki-class-ie wiki-class-if wiki-class-ig wiki-class-hm wiki-class-ih wiki-class-ii wiki-class-ij wiki-class-hp wiki-class-ik wiki-class-il wiki-class-im wiki-class-in wiki-class-io wiki-class-ip wiki-class-iq wiki-class-ir wiki-class-is wiki-class-it wiki-class-iu wiki-class-iv wiki-class-iw wiki-class-ix wiki-class-ea#wiki-id-GraphQL개요-GraphQL이란?). *GraphQL 이란 ?* |
---|---|---|---|
2 | 1 | 이름없음 | |
3 | 8 | 이름없음 | * 페이스북에서 개발하여 발표한 “API를 위한 쿼리 언어” |
4 | 1 | 이름없음 | |
5 | 8 | 이름없음 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). → GraphQL은 API에 있는 데이터에 대해서 이해하기 쉬운 설명을 제공하고 클라이언트에게 필요한 것을 정확하게 요청할 수 있는 기능을 제공합니다. |
6 | |||
7 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). *핵심 : 클라이언트가 직접 어떤데이터가 필요한지 명시할 수 있도록 합니다* |
||
8 | |||
9 | h1(ic id fr ba ie if ig hm ih ii ij hp ik il im in io ip iq ir is it iu iv iw ix ea#GraphQL개요-탄생배경(RESTAPI와비교)). *탄생 배경 (REST API 와 비교)* |
||
10 | |||
11 | * *OverFetching* |
||
12 | |||
13 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). 기존의 REST API를 사용할 경우 클라이언트는 불필요한 정보를 전달받는 문제점이 있었습니다. |
||
14 | |||
15 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). 가령 MemberList 중 id 만을 필요로 한다면 API를 새로 생성하거나 List를 받은 후 2차 가공을 해야하는 불필요한 작업 시간이 낭비되었습니다. |
||
16 | |||
17 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). graphQL은 클라이언트 측에서 받고싶은 데이터만을 정의하므로 이러한 OverFetching 문제를 해결할 수 있습니다. |
||
18 | |||
19 | * *UnderFetching* |
||
20 | |||
21 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). 다른 두개의 정보가 필요한 경우 → REST API의 경우에는 필요한 데이터를 만들기 위해 여러번의 API 호출 + 추가적인 가공 작업이 발생합니다. |
||
22 | |||
23 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). 하지만 graphQL을 사용하게 된다면 쿼리문을 통해 한번의 호출로 원하는 데이터를 얻을 수 있게됩니다. |
||
24 | |||
25 | * *EndPoint* |
||
26 | |||
27 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). REST API는 각 API마다 다른 엔드포인트가 존재했습니다. 만약 엔드포인트가 수십 수백개가 된다면 이를 관리하는 것은 매우 어려울 것 입니다. |
||
28 | |||
29 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). graphQL은 /graphql이라는 하나의 엔드포인트로 모든 쿼리문 요청 받기 때문에 관리가 용이하며 주소가 심플해집니다. |
||
30 | |||
31 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). → default endpoint : /graphql (설정파일을 사용하여 커스터마이징 가능) |
||
32 | |||
33 | h1(wiki-class-ic wiki-class-id wiki-class-fr wiki-class-ba wiki-class-ie wiki-class-if wiki-class-ig wiki-class-hm wiki-class-ih wiki-class-ii wiki-class-ij wiki-class-hp wiki-class-ik wiki-class-il wiki-class-im wiki-class-in wiki-class-io wiki-class-ip wiki-class-iq wiki-class-ir wiki-class-is wiki-class-it wiki-class-iu wiki-class-iv wiki-class-iw wiki-class-ix wiki-class-ea#wiki-id-GraphQL개요-GraphQl의작업종류—2가지). *GraphQl의 작업 종류 — 2가지* |
||
34 | |||
35 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-ju wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-jv wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-jw wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-jx wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-jy wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). *1. Query* |
||
36 | |||
37 | * 데이터베이스로부터 데이터를 얻어오기 위해 사용하는 것으로 |
||
38 | |||
39 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). type Query { |
||
40 | |||
41 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). 쿼리명 : 반환 타입 (!) |
||
42 | |||
43 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). } |
||
44 | |||
45 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). 의 형태로 선언합니다. REST API에서의 POST 기능(조회)을 수행하는 쿼리라고 보면 됩니다. |
||
46 | |||
47 | <pre><code class="java"> |
||
48 | # 스키마 정의 - 루트 쿼리 (Root Query) |
||
49 | type Query { |
||
50 | recentPosts(count: Int, offset: Int): [Post]! |
||
51 | } |
||
52 | # FE에서의 쿼리문 요청 |
||
53 | Query { |
||
54 | recentPosts(count : 1, offset : 3) { |
||
55 | title |
||
56 | text |
||
57 | } |
||
58 | } |
||
59 | </code></pre> |
||
60 | |||
61 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). *2. Mutation* |
||
62 | |||
63 | * 서버, 데이터베이스 혹은 메모리에서 데이터를 변경할 때 사용하며 |
||
64 | |||
65 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). type Mutation { |
||
66 | |||
67 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). 쿼리명(인자명 : 인자타입) : 반환 타입 (!) |
||
68 | |||
69 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). } |
||
70 | |||
71 | p(wiki-class-hi wiki-class-hj wiki-class-fr wiki-class-hk wiki-class-b wiki-class-hl wiki-class-kb wiki-class-hm wiki-class-hn wiki-class-ho wiki-class-kc wiki-class-hp wiki-class-hq wiki-class-hr wiki-class-kd wiki-class-hs wiki-class-ht wiki-class-hu wiki-class-ke wiki-class-hv wiki-class-hw wiki-class-hx wiki-class-kf wiki-class-hy wiki-class-hz wiki-class-ib wiki-class-dh wiki-class-ea). 의 형태로 선언한다. CRUD 중 CRD 요청을 담당한다고 보면 됩니다. |
||
72 | |||
73 | <pre><code class="java"> |
||
74 | # 스키마 정의 - 루트 뮤테이션 (Root Mutation) |
||
75 | type Mutation { |
||
76 | writePost(title: String!, text: String!, category: String) : Post! |
||
77 | } |
||
78 | # FE에서의 쿼리문 요청 |
||
79 | Mutation { |
||
80 | writePost(title : "title", text: "text", category : "A") { |
||
81 | id |
||
82 | title |
||
83 | text |
||
84 | category |
||
85 | author |
||
86 | } |
||
87 | } |
||
88 | </code></pre> |