graphQL strong and weak
strongs
- no overfetching
- easy communication btw back and front using well established schema
weaks
- sequrity - 의도적으로 트리의 가장 하부까지 요구하는 쿼리를 지속해서 날리는 등의 공격에 취약 -> query 의 metadata 를 이용해서 이러한 쿼리를 차단할 수 있음.
- caching - rest 와는 다르게 요구의 종류가 다양하므로 caching 이 곤란함.
- N + 1 problem - 요구의 종류가 다양하고 서로 조합되는 엔드포인트가 다양하므로 N+1 문제가 발생할 가능성이 높음 -> dataLoader 의 per request batch and cache 로 문제 해결 가능
graphql fundamentals
operators
- subscription
- mutation
- query
type
query 실행 과정
parse
- parse query to abstract syntax tree(AST)
validation
- validate AST over server schema
execution
- walk through AST
- invoke resolver
- collect values
- emit json
graphQL authentication
fundamental
- context 에 user data 를 넣는다.
session based
- session 공간 필요 -> in memory(express-session) or in-memory-db or external db(redis)
- session id 를 위해 user 를 serialize 하기 위한 도구 필요
-> passport or uuid
token based
- user credential 을 이용하여 token 을 생성, 발급하는 도구 필요
- token 을 재해석하여 user 정보를 이용하는 도구 필요