Introduction
GraphQL์ ์ฐ๋ ์ด์
๋ฐ์ดํฐ ์ ๊ทํ๋ ํ๋ค๋ค.
๋ฐ์ดํฐ ์ ๊ทํ: ์ค๋ณต๋๋ ๋ฐ์ดํฐ ์ ๊ฑฐ
JSON ์๋ต์ด ๋์ฐฉํ๋ฉด, ์๋ต ๋ด ํน์ ๋ชจ๋ธ ์ ์ฐพ์๋ด ์ ๊ทํํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ ์ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
[ ๊ท์น์ฑ ์ด์ฉ โ ์๋ํ๋ฅผ ํตํด ]
์ฝ์์ ์ ํ๋ค (์ฝ์ = ์ธ์ด) โ GraphQL
์ฝ์์ ํตํ ์ฌ์ด ์ ๊ทํ
๋ ์ฌ์ด ์ํ ๊ด๋ฆฌ
โ 1. ํ์ ์์คํ ์ ํตํ ์์ฐ์ค๋ฌ์ด ๋ฐ์ดํฐ ์ ๊ทํ: ์คํค๋ง ์ด์ฉ
๋ชจ๋ธ ํ์ ์ ์ ์ํจ์ผ๋ก์จ
โ 2. ID ๊ฐ์ ํตํด ์๋์ ์ผ๋ก ๋ฐ์ดํฐ/ ๋ทฐ ์ผ๊ด์ฑ ๋ฌ์ฑํ๊ธฐ
id ํ๋๋ฅผ ํตํด GraphQL ํด๋ผ์ด์ธํธ๊ฐ ์๋์ผ๋ก ์ํ ๊ด๋ฆฌ
๋ฐ์ดํฐ/ ๋ทฐ ์ผ๊ด์ฑ์ ์ํด ๋ฐ๋ก ๋ฆฌ์์ค ํ์ x
์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ ์์กด์ฑ ์ ์
์ปดํฌ๋ํธ๋ ์ ์ธํ props์ ์ง์ ์ ์ผ๋ก ์์กด ํ์ง๋ง, ๋๋ถ๋ถ ๊ทธ๋ฆฌ๊ณ ์ ํ๋ ๋ชจ๋ธ์๋ ๊ฐ์ ์ ์ผ๋ก ์์กดํ๋ค.
๊ฒฐ๊ตญ ์์ ๋ชจ๋ธ์ด ๋ฐ๋๋ค๋ฉด, ์ด๋ฅผ ๊ฐ์ ์ ์ผ๋ก ์์กดํ๊ณ ์๋ ํ์ ์ปดํฌ๋ํธ๋ค๋ ํ์ธ์ด ํ์ํ side effect๊ฐ ์กด์ฌํ๋ค.
fetch on render โ fetch then render
Fragment: ๋ฐ์ดํฐ ์์กด์ฑ ์กฐ๊ฐ
๋ฐ์ดํฐ ์์กด์ฑ์ ํํํ ์ ์๋ ๋ชจ๋ธ, ํํํ๋ ๋ฌธ๋ฒ
์ปดํฌ๋ํธ๋ ๋ชจ๋ธ์ ํฌํจ๋ ๊ฐ์ ํ์๋ก ํ๋ค.
ํ๋๊ทธ๋จผํธ๋ฅผ ํตํด ๋ชจ๋ธ์ ์์กด ๊ด๊ณ๋ฅผ ์ ๋ํ๋ผ ์ ์์.
UI๋ฅผ ๊ทธ๋ฆฌ๋๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ค์ ์งํฉ์ ํ๋๊ทธ๋จผํธ๋ค์ ์งํฉ์ผ๋ก ํํ ๊ฐ๋ฅ
Co-location
์ปดํฌ๋ํธ์ ํ๋๊ทธ๋จผํธ๋ฅผ ๊ฐ์ ํ์ผ์ ์์ฑํ๊ธฐ
๊ฐ์ ๋ชฉ์ ์ ์ฝ๋๋ฅผ ๊ฐ์ ๊ณณ์ ์์น์ํค๊ธฐ
์ ๋ถ๋ฆฌ๋ ์ปดํฌ๋ํธ
๋ช ํํด์ง ๋ฐ์ดํฐ ์์กด์ฑ
๊ฐ ์ปดํฌ๋ํธ๊ฐ ์ด๋ค ๋ชจ๋ธ์ ์ด๋ค ํ๋๋ฅผ ์ฐธ์กฐํ๋์ง, ํํํ๊ณ ์ ํ๋์ง, ์์กดํ๋์ง ์ฝ๊ฒ ์ ์ ์์
Relay์ ์ญํ : ๋ฐ์ดํฐ ํ๋ ์์ํฌ
ํด๊ฒฐํด์ผ ํ ๋ฌธ์ : ์ฟผ๋ฆฌ ์ ์ธ(์ ์)์ ์๋ธ์ปดํฌ๋ํธ ๊ฐ์ ๋ถ๋ช ํํ ์์กด์ฑ
ํ๋์ ์ฟผ๋ฆฌ: ์ฑ๋ฅ ํฅ์, ํ๋์ ๋ก๋ฉ state๋ฅผ ์ฌ์ฉ โ UX ๊ฐ์
๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํจ์นญํ๋ฉด, ๋ ๋ฆฝ๋ ์ปดํฌ๋ํธ ๋จ์์ ๋ฐ์ดํฐ ์์ฒญ ์ฉ์ด
locally ์์ฒญ + globally ์ต์ ํ
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ํฐ ์ฟผ๋ฆฌ๋ก ํจ์นญ
๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๋ ์์กด ๊ด๊ณ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ปดํฌ๋ํธ ์์์ ์ ์ (colocating)
๐
relay์ compilation(ํธ์ง) ๋จ๊ณ : ๋ชจ๋ ๋ณํ๋ ์ปดํฌ๋ํธ ๋ฐ์ดํฐ ์์กด์ฑ์ ์์ ํ๋ค.
ํ๋์ ํฐ ์ฟผ๋ฆฌ๋ฅผ ๋งค๋ฒ ๋ชจ๋ ์ปดํฌ๋ํธ์์ ์์ฑํ ํ์ ์์ด, ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ ์์์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ํ ๋ฐ์ดํฐ๋ง ํจ์นญํ ์ ์๊ฒ ํ๋๊ทธ๋จผํธ๋ฅผ ์ฌ์ฉ
fragment reference: reference ๊ฐ์์ ๋ฐ์ดํฐ ์ฝ๊ธฐ
๋ ๋ฆฝ๋ ๋ฐ์ดํฐ ์์กด์ฑ์ ์๋์น ์์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ๋ค.
์ ์ธ์ ์ธ GraphQL ๋ฌธ๋ฒ ์ฌ์ฉ: not HOW, but WHAT
relay-compiler
๋ฆด๋ ์ด ์ปดํ์ผ๋ฌ๊ฐ ํ๋๊ทธ๋จผํธ์ ๋ชจ์์ ๋จ์ผ GraphQL ์ฟผ๋ฆฌ๋ก ์์ฑ
๋ฆด๋ ์ด ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ฒดํฌ ๋ฑ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ฌ์ง๋ฅผ ์ค์ฌ์ค
์ปจ๋ฒค์ ๊ฐ์ ํ๋ ํ๋ ์์ํฌ์ ์ธ ๋ฉด๋ชจ๋ ๊ฐ๊ณ ์์
relay-runtime
๋ฆด๋ ์ด ๋ฐํ์์ ์ต์ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ฐํ์์ ์ํํ๊ณ ์๋์ผ๋ก ์ํ ๊ด๋ฆฌ
๋ชจ๋ธ ์ ๋ฐ์ดํธ ์ ์์กดํ๋ ๋ชจ๋ ํ๋๊ทธ๋จผํธ์ ๋ํด ์๋ ์ ๋ฐ์ดํธ
Data Aggregation
GraphQL์ ์ฌ์ฉํด ์ฌ๋ฌ ์๋น์ค์ ๋ชจ๋ธ๋ค์ ๋จ์ผ ์คํค๋ง๋ก ํํ: ์ฌ๋ฌ REST API ์๋น์ค๋ฅผ ํ๋์ GraphQL ์คํค๋ง๋ก ๋ณํฉํ๊ธฐ
e.g. ๋๋ค ์ ์ฒด/ ๊ตฌ์ธ๊ตฌ์ง/ ๋ถ๋์ฐ/ ์ง์ญ๊ด๊ณ
โ ์ค๋ก์ง ํด๋ผ์ด์ธํธ์ ์๊ตฌ์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ธ ์๋ฒ ์คํ์ ์ด์ฉํ๋ ๊ฒ์ ๋ถ๋ด... โ
ํด๋ผ์ด์ธํธ ์คํค๋ง: GraphQL ์๋ฒ๋ฅผ ํด๋ผ์ด์ธํธ์์ ์์ฑํ๊ธฐ
[isomorphic schema] REST API: DB DB: ํด๋ผ์ด์ธํธ์์ ๊ตฌํ
์๋ฒ ๋ ์ด์ด๋ฅผ ์ฆ๊ฐ์ํค๋ฉด, ๋คํธ์ํฌ ์ง์ฐ์๊ฐ/ ๋๋ฒ๊น ๋ฑ์ ์ด๋ ค์ ๋ฑ ๋ค์ํ ๋ฌธ์ ๋ฐ์
ํด๋ผ์ด์ธํธ ์คํค๋ง: GraphQL ์๋ฒ ์ฝ๋๋ฅผ ํด๋ผ์ด์ธํธ ๋ด์ ํฌํจํ๊ธฐ
ํด๋ผ์ด์ธํธ ์คํค๋ง์ ์ฅ๋จ์
[๋จ์ ]
์ํฌํ๋ก์ฐ๊ฐ ๋ณต์กํด์ง
graphQL ์คํค๋ง ์์ โ TS ํ์ ์์ฑ (graphQL code generator) โ graphQL ๋ฆฌ์กธ๋ฒ ์์ โ ์ปดํฌ๋ํธ ์์ โ ๋ฆด๋ ์ด ์ปดํ์ผ โ ๊ฒฐ๊ณผ
ํ์ ์ ์ธ์ ์ด์ค์ผ๋ก ํด์ฃผ์ด์ผ ํจ
๋ฒ๋ค ์ฌ์ด์ฆ ์ฆ๊ฐ
[์ฅ์ ]
ํ๋๊ทธ๋จผํธ ์ฝ๋ก์ผ์ด์ ์ ํตํด ์ ์ง๋ณด์์ฑ์ด ๋์์ง
๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋๋ โ ์ด๋ป๊ฒ ์ ์ธํ๋๋
์ปดํ์ผ ํ์์ ์ค๋ฅ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ ์์
๋ฐ์ดํฐ ๊ด๋ จํ ๋ฒ๊ทธ๊ฐ ํ์ ํ ์ค์ด๋ฆ
์ด์ํ ๋์์ ๋ฆด๋ ์ด๊ฐ ์ ๋ถ ์ก์์ค
e.g. ํ์ด์ง๋ค์ด์ ๊ฒฐ๊ณผ์์ ๊ฐ์ ์์ดํ ์ด ์ค๋ณตํด์ ๋ด๋ ค์จ๋ค๋ฉด, ์ค๋ณต๋ ์์ดํ ์ ๋ฆด๋ ์ด๊ฐ ์๋์ผ๋ก ์ญ์ ํด ์ค
์ ์ธ์ ์ผ๋ก ์์ฑํ๋ค๋ ๊ฒ
Relay๋ ์ปดํฌ๋ํธ๋ง๋ค ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ทผ์ฒ์ ์ ์ธํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. ์ด๊ฒ์ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ์ง์ ๋ํ ๊ฑฑ์ ์ ํ์ง ์๊ณ ๊ฐ ์ปดํฌ๋ํธ๋ง๋ค ์ด๋ค ๋ฐ์ดํฐ๊ฐ ํ์ํ์ง๋ง ์ ์ธํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค.
how๋ Relay๊ฐ ์์์ ๋งก์ํ ๋, ์ฐ๋ฆฌ๋ what์ ์ ์ธ์ ์ผ๋ก ๋ชจ์์ ๊ด๋ฆฌํด์ผ ํ๋ค.
how์ what์ผ๋ก ์ฝ๋๋ฅผ ๋ถ์ํด์ ๋ถ๋ฆฌํ๊ธฐ
how๋ npm ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฒ๋ผ
๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์๋๋ก ์ค๊ณํ๊ธฐ
์ ๋ ํ ์คํธ๋ฅผ ์ด์ดํ๊ฒ ์ํํด์ ์์ ์ฑ ๋์ด๊ธฐ
what์ ์ฐ๊ด๋ ๊ฒ๋ผ๋ฆฌ ๊ฐ๊น์ด ๊ณณ์ ๋ชจ์ผ๊ธฐ
์ด๋ค ์ปดํฌ๋ํธ์ธ์ง, ์ด๋ค ์์กด์ฑ์ ๊ฐ์ง๊ณ ์๋์ง ํ ๋์ ์ ์ ์๋๋ก
Last updated