๐Ÿ’Ž

GraphQL Subscription

GraphQL ์Šคํ‚ค๋งˆ ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ

GraphQL Subscription์€ Query/Mutation๊ณผ ํ•จ๊ป˜ GraphQL์˜ ์„ธ ๋ฒˆ์งธ ์ž‘์—… ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ WebSocket์„ transport๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, GraphQL ์Šคํ‚ค๋งˆ์— ์ •์˜๋œ ํƒ€์ž… ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์–ด๋–ค ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋…ํ• ์ง€, ์–ด๋–ค ํ•„๋“œ๋ฅผ ๋ฐ›์„์ง€๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ

๐ŸŒ
Client
subscription {
  messageAdded {
    id
    text
  }
}
โ‘  subscription ์ฟผ๋ฆฌ
WebSocket
โ‘ฃ ๋ฐ์ดํ„ฐ push
๐Ÿ–ฅ๏ธ
GraphQL Server
โ‘ก ๊ตฌ๋… ๋“ฑ๋ก
โ‘ข Mutation ๋ฐœ์ƒ
โœ๏ธ
Mutation
๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ํŠธ๋ฆฌ๊ฑฐ
ํ๋ฆ„ ์„ค๋ช…
  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ subscription ์ฟผ๋ฆฌ ์ „์†ก (WebSocket ์—ฐ๊ฒฐ)
  2. ์„œ๋ฒ„๊ฐ€ ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๊ตฌ๋… ๋“ฑ๋ก
  3. ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ/์‹œ์Šคํ…œ์—์„œ Mutation์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
  4. ์„œ๋ฒ„๊ฐ€ ๊ตฌ๋… ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ์— GraphQL ํ˜•์‹์œผ๋กœ push

๋™์ž‘ ํ๋ฆ„

1

ํด๋ผ์ด์–ธํŠธ๊ฐ€ subscription ์ฟผ๋ฆฌ๋ฅผ ์„œ๋ฒ„์— ์ „์†ก (WebSocket ์—ฐ๊ฒฐ)

2

์„œ๋ฒ„๊ฐ€ ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๊ตฌ๋… ๋“ฑ๋ก

3

์„œ๋ฒ„ ์ธก์—์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ(Mutation) ๋ฐœ์ƒ

4

์„œ๋ฒ„๊ฐ€ ๊ตฌ๋… ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ์— GraphQL ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ push

์žฅ์ 

  • ํƒ€์ž… ์•ˆ์ „ํ•œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 
  • ํ•„์š”ํ•œ ํ•„๋“œ๋งŒ ์„ ํƒ์  ๊ตฌ๋…
  • ๊ธฐ์กด GraphQL ์Šคํ‚ค๋งˆ์™€ ํ†ตํ•ฉ
  • Query/Mutation๊ณผ ์ผ๊ด€๋œ ๊ฐœ๋ฐœ ๊ฒฝํ—˜

๋‹จ์ 

  • WebSocket ์œ„์— ์ถ”๊ฐ€ ์ถ”์ƒํ™” ๊ณ„์ธต
  • ์„œ๋ฒ„ ๊ตฌํ˜„ ๋ณต์žก๋„ ๋†’์Œ
  • N+1 ๊ตฌ๋… ๋ฌธ์ œ ๊ฐ€๋Šฅ
  • ์Šค์ผ€์ผ๋ง ์‹œ Pub/Sub ๋ฐฑ์—”๋“œ ํ•„์š”

์‚ฌ์šฉ ์‚ฌ๋ก€

์‹ค์‹œ๊ฐ„ ๋Œ“๊ธ€/์•Œ๋ฆผ ์ฃผ๋ฌธ ์ƒํƒœ ์ถ”์  ํ˜‘์—… ๋„๊ตฌ ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™” GitHub์˜ GraphQL API