๐
GraphQL Subscription
GraphQL ์คํค๋ง ๊ธฐ๋ฐ ์ค์๊ฐ ์ด๋ฒคํธ
GraphQL Subscription์ Query/Mutation๊ณผ ํจ๊ป GraphQL์ ์ธ ๋ฒ์งธ ์์ ํ์ ์ ๋๋ค. ๋ด๋ถ์ ์ผ๋ก WebSocket์ transport๋ก ์ฌ์ฉํ๋ฉฐ, GraphQL ์คํค๋ง์ ์ ์๋ ํ์ ์์คํ ์ ํตํด ์ด๋ค ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ ์ง, ์ด๋ค ํ๋๋ฅผ ๋ฐ์์ง๋ฅผ ์ ์ธ์ ์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค.
๊ตฌ์กฐ ๋ค์ด์ด๊ทธ๋จ
๐
Client
subscription {
messageAdded {
id
text
}
}
messageAdded {
id
text
}
}
โ subscription ์ฟผ๋ฆฌ
→
WebSocket
←
โฃ ๋ฐ์ดํฐ push
๐ฅ๏ธ
GraphQL Server
โก ๊ตฌ๋
๋ฑ๋ก
โข Mutation ๋ฐ์
←
โ๏ธ
Mutation
๋ฐ์ดํฐ ๋ณ๊ฒฝ ํธ๋ฆฌ๊ฑฐ
ํ๋ฆ ์ค๋ช
- ํด๋ผ์ด์ธํธ๊ฐ subscription ์ฟผ๋ฆฌ ์ ์ก (WebSocket ์ฐ๊ฒฐ)
- ์๋ฒ๊ฐ ํด๋น ์ด๋ฒคํธ์ ๋ํ ๊ตฌ๋ ๋ฑ๋ก
- ๋ค๋ฅธ ํด๋ผ์ด์ธํธ/์์คํ ์์ Mutation์ผ๋ก ๋ฐ์ดํฐ ๋ณ๊ฒฝ
- ์๋ฒ๊ฐ ๊ตฌ๋ ์ค์ธ ํด๋ผ์ด์ธํธ์ GraphQL ํ์์ผ๋ก push
๋์ ํ๋ฆ
1
ํด๋ผ์ด์ธํธ๊ฐ subscription ์ฟผ๋ฆฌ๋ฅผ ์๋ฒ์ ์ ์ก (WebSocket ์ฐ๊ฒฐ)
2
์๋ฒ๊ฐ ํด๋น ์ด๋ฒคํธ์ ๋ํ ๊ตฌ๋ ๋ฑ๋ก
3
์๋ฒ ์ธก์์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ(Mutation) ๋ฐ์
4
์๋ฒ๊ฐ ๊ตฌ๋ ์ค์ธ ํด๋ผ์ด์ธํธ์ GraphQL ํ์์ผ๋ก ๋ฐ์ดํฐ push
์ฅ์
- ✓ ํ์ ์์ ํ ์ค์๊ฐ ํต์
- ✓ ํ์ํ ํ๋๋ง ์ ํ์ ๊ตฌ๋
- ✓ ๊ธฐ์กด GraphQL ์คํค๋ง์ ํตํฉ
- ✓ Query/Mutation๊ณผ ์ผ๊ด๋ ๊ฐ๋ฐ ๊ฒฝํ
๋จ์
- ✗ WebSocket ์์ ์ถ๊ฐ ์ถ์ํ ๊ณ์ธต
- ✗ ์๋ฒ ๊ตฌํ ๋ณต์ก๋ ๋์
- ✗ N+1 ๊ตฌ๋ ๋ฌธ์ ๊ฐ๋ฅ
- ✗ ์ค์ผ์ผ๋ง ์ Pub/Sub ๋ฐฑ์๋ ํ์
์ฌ์ฉ ์ฌ๋ก
์ค์๊ฐ ๋๊ธ/์๋ฆผ
์ฃผ๋ฌธ ์ํ ์ถ์
ํ์
๋๊ตฌ ์ค์๊ฐ ๋๊ธฐํ
GitHub์ GraphQL API