← λͺ©λ‘μœΌλ‘œ
Read GraphQL docs

GraphQL을 μŠ€ν„°λ””ν•˜κ²Œ 된 λ°°κ²½

μ œν’ˆμ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œ λ§Žμ€ κΈ°λŠ₯이 ν•„μš” ν•˜μ˜€κ³  그에 따라 λ§Žμ€ APIλ₯Ό μ—°λ™ν•˜μ—¬ κ°œλ°œν•˜μ˜€λŠ”λ° μ‹œκ°„μ΄ μ§€λ‚˜ μžμ—°μŠ€λŸ½κ²Œ APIκ°€ μΆ”κ°€λ˜κ±°λ‚˜ λ³€κ²½λ˜λŠ” 일듀이 λ§Žμ•„μ§€κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
이것은 κ²°κ΅­ API μŠ€νŽ™μ΄ μΆ”κ°€λ˜κ±°λ‚˜ λ³€κ²½λ˜λŠ” 일이 λ°œμƒν•˜λŠ” 것을 μ˜λ―Έν•˜μ˜€κ³  그에 따라 ν΄λΌμ΄μ–ΈνŠΈκ°€ 닀루어야 ν•  μ—”λ“œ ν¬μΈνŠΈμ— λŒ€ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μœ μ§€λ³΄μˆ˜ν•˜λŠ” 것은 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
λ”κ΅°λ‹€λ‚˜ API μŠ€νŽ™μ„ λ¬Έμ„œλ‘œ μ •λ¦¬ν•˜λŠ” 것은 μ²˜μŒμ—” μ‰¬μšΈμ§€ λͺ°λΌλ„ μ§€μ†μ μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” 것은 μ ˆλŒ€ μ‰¬μš΄ 일이 μ•„λ‹ˆμ˜€μŠ΅λ‹ˆλ‹€.

μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈμ— μ΄λŸ¬ν•œ λ¬Έμ œλ“€μ„ GraphQL을 λ„μž…ν•˜λ―€λ‘œμ¨ ν•΄κ²° ν•  수 μžˆμ§€ μ•Šμ„κΉŒ μƒκ°ν•˜μ—¬ λ¬Έμ„œλ“€μ„ 읽고 κ°€μž₯ 인상 κΉŠμ—ˆλ˜ 뢀뢄듀을 μš”μ•½ ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

GraphQL μ΄λž€

ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 이해 ν•  수 μžˆλŠ” μ–Έμ–΄μž…λ‹ˆλ‹€. λΉ„μŠ·ν•œ 예둜 SQL이 μžˆλŠ”λ° 질의λ₯Ό μž‘μ„±ν•˜λŠ” μ‹œμ μ— μ •ν™•νžˆ μ–΄λ–€ 데이터λ₯Ό λ°˜ν™˜ ν•˜λŠ”μ§€ 이해 ν•  수 μžˆμŒμ„ λœ»ν•©λ‹ˆλ‹€.
그리고 GraphQL은 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ•„λ‹Œ μŠ€νŽ™μ„ μ •μ˜ν•œ κ²ƒμž…λ‹ˆλ‹€. μ •μ˜λœ μŠ€νŽ™μ— 따라 언어에 맞게 개발 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
GraphQL λ°©μ‹μœΌλ‘œ κ°œλ°œν•˜λ €λ©΄ GraphQL ν΄λΌμ΄μ–ΈνŠΈμ™€ GraphQL μ„œλ²„κ°€ ν•„μš”ν•©λ‹ˆλ‹€.
GraphQL μ„œλ²„λŠ” μ–Έμ–΄λ§ˆλ‹€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ 많이 μ‘΄μž¬ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈλ‘œμ„œλŠ” 제일 유λͺ…ν•œ 것은 Relay와 Apolloκ°€ μžˆμŠ΅λ‹ˆλ‹€.

Relay VS Apollo

RelayλŠ” λ©”νƒ€μ—μ„œ κ°œλ°œν•œ 라이브러리둜 GraphQL을 μ„€κ³„ν•˜κ³  μ„œλΉ„μŠ€μ— 적극적으둜 λ„μž…ν•œ νšŒμ‚¬λ‹΅κ²Œ μžμ‹ λ“€μ˜ 철학에 맞게 κ°œλ°œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
제일 μƒμœ„μ— 쿼리가 μ‘΄μž¬ν•˜κ³  ν•΄λ‹Ή 쿼리λ₯Ό ν”„λ ˆκ·Έλ¨ΌνŠΈλ‘œ μŠ¬λΌμ΄μŠ€ν•˜μ—¬ 각 μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
μ΄λŸ¬ν•œ κ΅¬μ‘°λŠ” μŠ€μΌ€μΌλ§μ— μ ν•©ν•œ κ΅¬μ‘°μž…λ‹ˆλ‹€. μ„œλΉ„μŠ€κ°€ 컀지더라도 슬라이슀된 ν”„λ ˆκ·Έλ¨ΌνŠΈλ₯Ό 톡해 μΊμ‹œ 히트λ₯Ό κ·ΉλŒ€ν™” μ‹œν‚΅λ‹ˆλ‹€.
λ‹€λ§Œ μ»΄ν¬λ„ŒνŠΈμ— ν•˜λ‚˜μ˜ ν”„λ ˆκ·Έλ¨ΌνŠΈλ₯Ό λŒ€μ‘ν•˜μ—¬ μ„ μ–Έν•˜λŠ” 방식을 μ·¨ν•˜κΈ° λ•Œλ¬Έμ— μ»¨λ²€μ…˜μ΄ κΉŒλ‹€λ‘­κ³  Relay만의 λ””λ ‰ν‹°λΈŒκ°€ μ‘΄μž¬ν•˜μ—¬ λŸ¬λ‹μ»€λΈŒκ°€ 적지 μ•ŠμŠ΅λ‹ˆλ‹€.
그리고 SSR을 κ³΅μ‹μ μœΌλ‘œ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ³„λ„μ˜ λΌμš°ν„° μž‘μ—…μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

ApolloλŠ” Relay와 λŒ€λΆ€λΆ„μ˜ κΈ°λŠ₯을 λΉ„μŠ·ν•˜κ²Œ μ œκ³΅ν•˜μ§€λ§Œ νŠΉμ • μ»¨λ²€μ…˜μ— κ³ μ •λ˜μ§€ μ•Šμ„ 수 μžˆλ„λ‘ μœ μ—°μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
SSR λ˜ν•œ 라이브러리 λ ˆλ²¨μ—μ„œ 곡식 μ§€μ›ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ λŒ€λž΅μ μΈ νŠΉμ§•μ„ κ°€μ§€κ³  있으며 μ–΄λ–€ 것을 선택 ν•  μ§€λŠ” μ œν’ˆμ˜ μŠ€νŽ™ λ‚΄μ—μ„œ SSR의 ν•„μš”μ„±μ— 따라 κ²°μ •λ˜λ¦¬λΌ μƒκ°λ©λ‹ˆλ‹€.

GraphQL을 λ„μž…ν•˜λ©΄ 쒋은 점

μ—”λ“œν¬μΈνŠΈλ₯Ό ν•˜λ‚˜λ‘œ 톡합 ν•  수 있으며, ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μš”μ²­ν•˜λŠ” μ‹œμ μ— μ–΄λ–€ 데이터λ₯Ό κ°€μ Έμ˜€λŠ”μ§€ 이해 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Rest APIλ₯Ό μ‚¬μš©ν•˜λ‹€λ³΄λ©΄ ν”νžˆ λ§ˆμ£Όν•˜λŠ” μ–Έλ”νŒ¨μΉ­(데이터λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μ—¬λŸ¬ APIλ₯Ό 호좜)κ³Ό μ˜€λ²„νŒ¨μΉ­(API 응닡에 λΆˆν•„μš”ν•œ λ°μ΄ν„°κΉŒμ§€ 포함)을 없앨 수 μžˆμŠ΅λ‹ˆλ‹€.
λ˜ν•œ GraphQL μ„œλ²„μ—μ„œ μ œκ³΅ν•˜λŠ” Playground μ‚¬μ΄νŠΈλ₯Ό 톡해 λ³„λ„μ˜ λ¬Έμ„œ 없이도 데이터 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (λ³„λ„μ˜ μ½”λ“œ μž‘μ„±μ„ ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€)
그리고 GraphQL μ„œλ²„κ°€ μ€‘κ°„μ—μ„œ λ°±μ—”λ“œ APIλ₯Ό ν†΅ν•©ν•˜μ—¬ μ œκ³΅ν•˜λ―€λ‘œ μ‹œμŠ€ν…œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ— μœ λ¦¬ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μΈν„°νŽ˜μ΄μŠ€ λ‚΄μ—μ„œ 데이터가 μ„œλ‘œ λ‹€λ₯Έ 좜처λ₯Ό κ°€μ§„λ‹€κ³  ν•˜λ”λΌλ„ ν΄λΌμ΄μ–ΈνŠΈλŠ”
ν•΄λ‹Ή λΆ€λΆ„μ—μ„œ μ‹ κ²½ μ“Έ ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ GraphQL 데이터가 ν•˜λ‚˜μ˜ λ‚΄λΆ€ APIλ₯Ό 톡해 μ œκ³΅ν•˜λ‹€κ°€ λΆ„λ¦¬λœ μ—¬λŸ¬κ°œμ˜ λ‚΄λΆ€ APIλ₯Ό μ‘°ν•©ν•˜μ—¬ 제곡 ν•  수 있으며, 이 말은 λ°±μ—”λ“œμ—μ„œ μ‹œμŠ€ν…œμ˜ μœ μ—°μ„±μ΄ 생김을 μ˜λ―Έν•©λ‹ˆλ‹€.
λ³„λ„μ˜ μ—”λ“œ 포인트λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ 되며 ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•˜λŠ” 쿼리에 λŒ€ν•΄μ„œ κ°κ°€μ˜ 속성 λ³„λ‘œ 데이터λ₯Ό μ œκ³΅ν•˜λ©΄ 되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

GraphQL을 λ„μž…ν•˜λ©΄μ„œ 쑰심해야 ν•  점

GraphQL은 ν•œλ²ˆ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ„€κ³„ν•˜λ©΄ λ˜λŒλ¦¬κΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ κ³΅μ‹λ¬Έμ„œμ—λ„ μ‹œμŠ€ν…œμ˜ λͺ¨λ“  데이터λ₯Ό ν•œλ²ˆμ— λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” 것을 μΆ”μ²œν•˜μ§€ μ•Šκ³  점진적인 λ„μž…μ„ 톡해 μ‹€μˆ˜λ₯Ό μ€„μ—¬λ‚˜κ°€λŠ” 것을 ꢌμž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
GraphQL μ„œλ²„κ°€ λ°±μ—”λ“œ μ„œλ²„ μ•žλ‹¨μ— μ‘΄μž¬ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ λ°›λŠ” μ—­ν™œμ„ ν•˜κ²Œ λ˜λ―€λ‘œ 인프라λ₯Ό 잘 κ΄€λ¦¬ν•΄μ•Όν•©λ‹ˆλ‹€.
μ‹€μ œλ‘œ μ–΄λ–€ μ„œλΉ„μŠ€μ—μ„œ GraphQL을 μ‚¬μš©ν•˜λŠ”λ° λ§Žμ€ μš”μ²­μ΄ ν•œλ²ˆμ— λ°€λ € GraphQL μ„œλ²„ 였λ₯˜κ°€ ν΄λΌμ΄μ–ΈνŠΈμ— κ·ΈλŒ€λ‘œ λ…ΈμΆœλœ 적이 μžˆμŠ΅λ‹ˆλ‹€.

  • https://graphql.org/
  • https://relay.dev/
  • https://www.apollographql.com/