Graph QL

Graph QL

Graph QL ์€ Server API ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Facebook ์—์„œ ๋งŒ๋“  Query Language ์ด๋‹ค.

๊ธฐ์กด์— ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ค‘์ธ RESTful API ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์กฐ๊ธˆ๋” ์œ ์—ฐํ•˜๊ฒŒ ์šด์˜๊ฐ€๋Šฅํ•˜๋ฉฐ ํ•˜๋‚˜์˜ API ๋กœ ๋‹ค์–‘ํ•œ ์ •๋ณด๋“ค์„ ํ•„ํ„ฐ๋ง ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณต ๋ฐ›์„์ˆ˜ ์žˆ๋Š” ์งˆ์˜์–ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Graph QL ์˜ ํŒŒ์ดํ”„๋ผ์ธ

RESTful API ์™€ ์ฐจ์ด์ 

Graph QL Stack

RESTful API ์™€์˜ ์ฐจ์ด์ ์€ ๋Œ€์ฒด์ ์œผ๋กœ ์•„๋ž˜ ๋‘๊ฐ€์ง€๋กœ ์••์ถ•๋œ๋‹ค.

  • Graph QL API ๋Š” ์ฃผ๋กœ ํ•˜๋‚˜์˜ EndPoint ๋งŒ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • Graph QL API ๋Š” ์š”์ฒญํ• ๋•Œ ์‚ฌ์šฉํ•œ Query ๋ฌธ ์— ๋”ฐ๋ผ ์‘๋‹ต ๊ตฌ์กฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

์ด๋Š” ์œ„ ๋‘๊ฐ€์ง€ ํŠน์ง•์— ๋”ฐ๋ผ ์•„๋ž˜์™€ ๊ฐ™์ด ์žฅ์ ์„ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋‹ค.

  • HTTP ์š”์ฒญ ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
    • RESTful API ๋Š” ๊ฐ๊ฐ์˜ Resource ์ข…๋ฅ˜๋ณ„๋กœ ์š”์ฒญ์„ ํ•ด์•ผํ•˜๊ณ , ํ•„์š”ํ•œ Resource ์— ๋”ฐ๋ผ ์š”์ฒญ ํšŸ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.
  • HTTP ์‘๋‹ต์˜ Size ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
    • RESTful ์€ ์‘๋‹ต์˜ ํ˜•ํƒœ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ณ , ๋”ฐ๋ผ์„œ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋ถ€๋ถ„์ ์œผ๋กœ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ํž˜๋“ค๋‹ค.
    • Graph QL ์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Graph QL ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๋ฒˆ์˜ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ ์—†์ด ํ•œ๋ฒˆ์˜ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Graph QL Mobile Network

๋ฐ˜๋ฉด ์œ„์™€ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ์š”์ฒญ์— ์œ ์—ฐํ•˜๊ฒŒ ๋ฐ˜์‘ํ•˜๊ธฐ ์–ด๋ ค์šธ๋•Œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹จ์ ๋„ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋‹ค.

  • File ์ „์†ก๋“ฑ Text ๋งŒ์œผ๋กœ ํ•˜๊ธฐ ํž˜๋“  ๋‚ด์šฉ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋ณต์žกํ•˜๋‹ค.
  • ๊ณ ์ •๋œ ์š”์ฒญ๊ณผ ์‘๋‹ต๋งŒ ํ•„์š”ํ•  ๊ฒฝ์šฐ์—๋Š” Query ๋กœ ์ธํ•ด ์š”์ฒญ์˜ ํฌ๊ธฐ๊ฐ€ RESTful API ๋ณด๋‹ค ๋” ์ปค์ง„๋‹ค.
  • ์žฌ๊ท€์ ์ธ Query ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค.

File ์ „์†ก์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์ง„ ์•Š์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ Graph QL API ์žฅ์ ์„ ์–ป์„์ˆ˜ ์—†์œผ๋ฉฐ ๋‹ค๋ฅธ 3rd Party Service ์— ์˜์กดํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

Graph QL vs RESTful

Graph QL ๊ณผ RESTful ์˜ ์„ ํƒ๊ธฐ์ค€์€ ์‰ฝ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

  • Graph QL
    • ์„œ๋กœ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋‹ค์–‘ํ•œ ์š”์ฒญ๋“ค์— ๋Œ€ํ•ด ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•  ๋•Œ
    • ๋Œ€๋ถ€๋ถ„์˜ ์š”์ฒญ์ด CRUD ์— ํ•ด๋‹น๋  ๋•Œ
  • RESTful
    • HTTP/HTTPS ์— ์˜ํ•œ Caching ์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•  ๋•Œ
    • File ์ „์†ก๊ณผ ๊ฐ™์€ ๋‹จ์ˆœํ•œ Text ๊ธฐ๋ฐ˜์˜ ์ •๋ณด๋“ค๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ํž˜๋“ค๋•Œ
    • ์š”์ฒญ์˜ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜์—ฌ ์œ ์—ฐํ•จ์ด ๋ถˆ ํ•„์š”ํ•  ๋•Œ

์œ„ ๊ธฐ์ค€๊ณผ ๊ฐ™์ด ๊ฐ ์‚ฌ์šฉ๋ชฉ์ ์— ๋งž๊ฒŒ ๋” Best Practice ์˜ ๊ธฐ์ค€์œผ๋กœ ์„ ํƒํ•˜๋Š”๊ฒƒ์ด ์ตœ์„ ์ด๋‹ค.

Graph QL ์˜ ๊ตฌ์กฐ

Query/Mutation

Graph QL ์˜ ์ฟผ๋ฆฌ์™€ ๋ฎคํ…Œ์ด์…˜ ๋ฐ ์‘๋‹ต ๊ตฌ์กฐ๋Š” ์ƒ๋‹นํžˆ ์ง๊ด€์ ์œผ๋กœ
์š”์ฒญํ•˜๋Š” ์งˆ์˜๋ฌธ๊ณผ ์‘๋‹ต๋‚ด์šฉ์˜ ๊ตฌ์กฐ๋Š” ๊ฑฐ์˜ ์ผ์น˜ํ•œ๋‹ค.

Graph QL ์ฟผ๋ฆฌ/๋ฎคํ…Œ์ด์…˜

  • ์ฟผ๋ฆฌ -> Read
  • ๋ฎคํ…Œ์ด์…˜ -> Create/Update/Delete

Schema/Type

Object Type & Field

type Character {
  name: String!
  appearsIn: [Episode!]!
}
  • Object Type
    • Character
  • Field
    • name, appearsIn
  • Scalar
    • String, ID, int ...
  • ๋Š๋‚Œํ‘œ (!)
    • ํ•„์ˆ˜๊ฐ’ (non-nullable)
  • ๋Œ€๊ด„ํ˜ธ ([,])
    • ๋ฐฐ์—ด (array)

Resolver

Introspection