Graph QL

Graph QL

Graph QL 은 Server API λ₯Ό κ΅¬μ„±ν•˜κΈ° μœ„ν•΄ Facebook μ—μ„œ λ§Œλ“  Query Language 이닀.

기쑴에 일반적으둜 μ‚¬μš©μ€‘μΈ RESTful API 와 μœ μ‚¬ν•˜μ§€λ§Œ μ‘°κΈˆλ” μœ μ—°ν•˜κ²Œ μš΄μ˜κ°€λŠ₯ν•˜λ©° ν•˜λ‚˜μ˜ API 둜 λ‹€μ–‘ν•œ 정보듀을 필터링 ν•΄μ„œ 데이터λ₯Ό 제곡 λ°›μ„μˆ˜ μžˆλŠ” μ§ˆμ˜μ–΄λ₯Ό μ œκ³΅ν•œλ‹€.

RESTful API 와 차이점

RESTful API μ™€μ˜ 차이점은 λŒ€μ²΄μ μœΌλ‘œ μ•„λž˜ λ‘κ°€μ§€λ‘œ μ••μΆ•λœλ‹€.

  • Graph QL API λŠ” 주둜 ν•˜λ‚˜μ˜ EndPoint λ§Œμ„ μ‚¬μš©ν•œλ‹€.
  • Graph QL API λŠ” μš”μ²­ν• λ•Œ μ‚¬μš©ν•œ Query λ¬Έ 에 따라 응닡 ꡬ쑰가 달라진닀.

μ΄λŠ” μœ„ 두가지 νŠΉμ§•μ— 따라 μ•„λž˜μ™€ 같이 μž₯점을 κ°€μ§ˆμˆ˜ μžˆλ‹€.

  • HTTP μš”μ²­ 횟수λ₯Ό 쀄일 수 μžˆλ‹€.
    • RESTful API λŠ” 각각의 Resource μ’…λ₯˜λ³„λ‘œ μš”μ²­μ„ ν•΄μ•Όν•˜κ³ , ν•„μš”ν•œ Resource 에 따라 μš”μ²­ νšŸμˆ˜κ°€ μ¦κ°€ν•œλ‹€.
  • HTTP μ‘λ‹΅μ˜ Size λ₯Ό 쀄일 수 μžˆλ‹€.
    • RESTful 은 μ‘λ‹΅μ˜ ν˜•νƒœκ°€ μ •ν•΄μ Έ 있고, λ”°λΌμ„œ ν•„μš”ν•œ μ •λ³΄λ§Œ λΆ€λΆ„μ μœΌλ‘œ μš”μ²­ν•˜λŠ” 것이 νž˜λ“€λ‹€.
    • Graph QL 은 μ›ν•˜λŠ” λŒ€λ‘œ 정보λ₯Ό μš”μ²­ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€.

반면 μœ„μ™€ 같이 λ‹€μ–‘ν•œ μš”μ²­μ— μœ μ—°ν•˜κ²Œ λ°˜μ‘ν•˜κΈ° μ–΄λ €μšΈλ•ŒλŠ” μ•„λž˜μ™€ 같은 단점도 κ°€μ§ˆμˆ˜ μžˆλ‹€.

  • 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 의 κΈ°μ€€μœΌλ‘œ μ„ νƒν•˜λŠ”κ²ƒμ΄ μ΅œμ„ μ΄λ‹€.