Daily/Today I Learned

22.08.02_TIL

ํ˜ธ๋ฐ€์ด 2022. 8. 2. 10:36

๐Ÿ“Œ ๊ทธ๋ž˜ํ”„QL์€ React๋ฅผ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ ํ•œ๋ฒˆ ๋“ค์—ˆ๋˜ ๋‚ด์šฉ์ด๊ณ , ์ฐพ์•„๋ดค๋˜ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ์€ ์•„๋Š” ์ƒํƒœ์—์„œ ์ง„ํ–‰์ด ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ ๋˜ํ•œ ํŽ˜์ด์Šค๋ถ์—์„œ ๋งŒ๋“  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— React๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ•œ ๋ฒˆ์ฏค์€ ํ•™์Šตํ•ด์•ผ ํ•˜๋Š” ๋‚ด์šฉ์ด๋‹ค. ๊ฐ™์€ ํšŒ์‚ฌ์—์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์ด ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์„ ๊ฒƒ ๊ฐ™๋‹ค!!!! ๋น ์–!!

๐Ÿ“— ์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ

GraphQL (Graph + Query Language)

  • ํŽ˜์ด์Šค๋ถ์—์„œ ๋งŒ๋“  ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณต๋˜๊ณ  ์žˆ์œผ๋ฉฐ, Server API๋ฅผ ํ†ตํ•ด ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ์–ธ์–ด์ด๋‹ค. (2016๋…„ ๋“ฑ์žฅ)
  • ์ธ์ง€๋„ ๋ฐ ๋งŒ์กฑ ๋ถ€๋ถ„์—์„œ ๋†’์€ ๋น„์œจ์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ์–ธ์–ด์ด๋ฉฐ, GraphQL ๊ด€๋ จ ๊ธฐ์ˆ ์ด ๊ณ„์†ํ•ด์„œ ์ƒ์œ„๊ถŒ์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ์ธ์‹๋ฅ ์ด ๊ต‰์žฅํžˆ ๋†’์€ ์–ธ์–ด์ด๋ฉฐ, ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋น„์œจ๊ณผ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ๋น„์œจ์ด ๊ต‰์žฅํžˆ ๋†’์€ ์ฟผ๋ฆฌ ์–ธ์–ด์ด๋‹ค.

GraphQL์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต์œผ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.
  • REST API ๋ฐฉ์‹์˜ ๊ณ ์ •๋œ ์ž์›์ด ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ์ž์›์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

GraphQL์˜ ํŠน์ง•

  • HTTP๋ฅผ ํ†ตํ•ด API ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค.
  • ์‘๋‹ต์„ ๋ฐ›์„ ์‹œ, ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ๋ฅผ JSON ํ˜•์‹์œผ๋กœ ๋ฐ›๋Š”๋‹ค.
  • ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๊ฐ ํ•„๋“œ์— ๋Œ€์‘ํ•˜๋Š” resolver ํ•จ์ˆ˜๋กœ ๊ฐ ํ•„๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • GraphQL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์กฐํšŒ ๋Œ€์ƒ schema๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.

REST API์˜ ํ•œ๊ณ„

  • Overfetch: ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ œ๊ณตํ•œ๋‹ค.
  • Underfetch: endpoint๊ฐ€ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถฉ๋ถ„ํžˆ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ ์—”๋“œํฌ์ธํŠธ ๋ณ€๊ฒฝ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋‹ค.

REST API์™€ GraphQL์˜ ๋‹ค๋ฅธ์ 

  • REST API๋Š” Resource์— ๋Œ€ํ•œ ํ˜•ํƒœ ์ •์˜์™€ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋ฐฉ๋ฒ•์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€๋งŒ, GraphQL์—์„œ๋Š” Resource์— ๋Œ€ํ•œ ํ˜•ํƒœ ์ •์˜์™€ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค.
  • REST API ๋Š” Resource์˜ ํฌ๊ธฐ์™€ ํ˜•ํƒœ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฒฐ์ •ํ•˜์ง€๋งŒ GraphQL์—์„œ๋Š” Resource์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ ์ •์˜ํ•˜๊ณ , ํ•„์š”ํ•œ ํฌ๊ธฐ์™€ ํ˜•ํƒœ๋Š” ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ ์š”์ฒญ ์‹œ ๊ฒฐ์ •ํ•œ๋‹ค.
  • REST API๋Š” URI๊ฐ€ Resource๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  Method๊ฐ€ ์ž‘์—…์˜ ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, GraphQL์—์„œ๋Š” GraphQL Schema๊ฐ€ Resource๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ   Query, Mutation ํƒ€์ž…์ด ์ž‘์—…์˜ ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • REST API๋Š” ์—ฌ๋Ÿฌ Resource์— ์ ‘๊ทผํ•˜๊ณ ์ž ํ•  ๋•Œ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์š”์ฒญ์ด ํ•„์š”ํ•˜์ง€๋งŒ, GraphQL์—์„œ๋Š” ํ•œ๋ฒˆ์˜ ์š”์ฒญ์—์„œ ์—ฌ๋Ÿฌ Resource์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • REST API์—์„œ ๊ฐ ์š”์ฒญ์€ ํ•ด๋‹น ์—”๋“œํฌ์ธํŠธ์— ์ •์˜๋œ ํ•ธ๋“ค๋ง ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, GraphQL์—์„œ๋Š” ์š”์ฒญ ๋ฐ›์€ ๊ฐ ํ•„๋“œ์— ๋Œ€ํ•œ resolver๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. 

GraphQL์˜ ์žฅ์ 

  • ํ•˜๋‚˜์˜ endpoint ์š”์ฒญ
  • No! under & overfetching
  • ๊ฐ•๋ ฅํ•œ playground
  • ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์—๋„ ์ง€์žฅ์ด ์—†๋‹ค.

GraphQL์˜ ๋‹จ์ 

  • REST API์— ์นœ์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ GraphQL๋ฅผ ํ•™์Šตํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
  • ์บ์‹ฑ์ด REST๋ณด๋‹ค ํ›จ์”ฌ ๋ณต์žกํ•˜๋‹ค.
  • ๊ณ ์ •๋œ ์š”์ฒญ๊ณผ ์‘๋‹ต๋งŒ ํ•„์š”ํ•  ๊ฒฝ์šฐ์—๋Š” Query๋กœ ์ธํ•ด ์š”์ฒญ์˜ ํฌ๊ธฐ๊ฐ€ RESTful API์˜ ๊ฒฝ์šฐ๋ณด๋‹ค ๋” ์ปค์ง„๋‹ค.

GraphQL ๊ตฌ์กฐ

  • GraphQL Keywords
    • ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ, REST API์—์„  GET ์š”์ฒญ์ด ์žˆ์—ˆ๋‹ค๋ฉด GraphQL์—์„œ๋Š” Query๋ฅผ ์ด์šฉํ•ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ ํ•  ์ˆ˜์žˆ๋‹ค.
    • Create, Delete์™€ ๊ฐ™์ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ Mutaion์„ ์ด์šฉํ•ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Query: ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ(REST์˜ GET๊ณผ ๋น„์Šทํ•˜๋‹ค)
    • Mutation: ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์ˆ˜์ •ํ•˜๊ธฐ
      • Create: ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
      • Update: ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ ์ˆ˜์ •
      • Delete: ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
    • Suscription: ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ ์‹œ ์„œ๋ฒ„๊ฐ€ ๋Œ€์‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†ก

Query(๋ฐ์ดํ„ฐ ์กฐํšŒ)

  • ์ „๋‹ฌ์ธ์ž(Arguments)
    • ํ•„๋“œ์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ถ€๋ถ„์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฟผ๋ฆฌ์˜ ํ•„๋“œ ๋ฐ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๋“ค์— ์ „๋‹ฌํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณ„๋ช…(Aliases)
    • ํ•„๋“œ ์ด๋ฆ„์„ ์ค‘๋ณตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ํ•„๋“œ ์ด๋ฆ„์„ ์ค‘๋ณต์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ ์ฟผ๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•  ๋•Œ๋Š” ๋ณ„๋ช…์„ ๋ถ™์—ฌ์„œ ์ฟผ๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  • ์˜คํผ๋ ˆ์ด์…˜ ๋„ค์ž„(Operation name)
    • ์ฟผ๋ฆฌ์™€ ์ฟผ๋ฆฌ ๋„ค์ž„์„ ๋ชจ๋‘ ์ƒ๋žตํ•˜๋Š” ์ถ•์•ฝํ˜• ๊ตฌ๋ฌธ ๋Œ€์‹  ์ฝ”๋“œ๋ฅผ ๋ชจํ˜ธํ•˜์ง€ ์•Š๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋ณ€์ˆ˜(Variables)
    • ๋™์ ์œผ๋กœ ์ธ์ˆ˜๋ฅผ ๋ฐ›์•„ ์ฟผ๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

Mutation(๋ฐ์ดํ„ฐ ์ˆ˜์ •)

  • ์„œ๋ฒ„์ธก ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

Schema/Type

  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์„œ๋น„์Šค์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์˜ ์ข…๋ฅ˜, ๊ทธ๋ฆฌ๊ณ  ํฌํ•จํ•˜๋Š” ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด์œ ํ˜•์ด๋‹ค.

Resolver

  • ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜, Query, Mutation, Subscription๊ณผ ๊ฐ™์€ ํƒ€์ž…์˜ ์‹ค์ œ ์ผํ•˜๋Š” ๋กœ์ง์„ ์ž‘์„ฑํ•œ๋‹ค.

๐Ÿ“˜ ์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•  ๋‚ด์šฉ

[udemy] React ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๊ฐ•์˜ ๋ณด๊ธฐ (๋งค์ผ ์กฐ๊ธˆ์”ฉ ์ด๋ผ๋„ ๊พธ์ค€ํžˆ ๋“ฃ๊ธฐ)

Study์›๊ณผ ํ•จ๊ป˜ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„

๐Ÿ“ ์ค‘์š”ํ•œ ๋‚ด์šฉ

  • GraphQL์ด๋ž€?
  • GraphQL์˜ ํŠน์ง•
  • GraphQL ์‚ฌ์šฉ๋ฒ•

'Daily > Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

22.08.04_TIL  (0) 2022.08.04
22.08.03_TIL  (0) 2022.08.03
22.08.01_TIL  (0) 2022.08.01
22.07.28_TIL  (0) 2022.07.28
22.07.27_TIL  (0) 2022.07.27