Open jordan-choi opened 2 years ago
๐ Authentication vs Authorization Authentication: ์ ์ ๊ฐ ๋๊ตฌ์ธ์ง, ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ์ ํ๋ ํ์ Authorization: ์ ์ ๊ฐ ํน์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋์ง๋ฅผ ๊ฒฐ์ ํ๋ ํ์ GraphQL ๋จ๊ณ์์ authorization ๋ก์ง์ ํฌํจํ๋ ๊ฒ์ ์ถ์ฒํ์ง ์๋๋ค. GraphQL์ ๋ณดํต ๋๋ฉ์ธ ๋ก์ง์ ์ ๊ทผํ๋ ํ ๋ฐฉ๋ฒ์ผ ๋ฟ์ด๋ค. authroization์ ์ด๋ค ํ๋๋ ํ์ ์ ์ ์ ๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ์ง ์ ํ๋ API scopes์ ๋๋ฉ์ธ๊ณผ ๊ด๋ จ๋ authorization์ด ์๋ค. API scopes๋ GraphQL ๋ ์ด์ด์ ๊ตฌํํ๋ฉด ์ข์ผ๋, ๋๋ฉ์ธ๊ณผ ๊ด๋ จ๋ ๋น์ฆ๋์ค ๊ท์น์ ์ต๋ํ GraphQL ๋ก์ง๊ณผ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ค. GraphQL ๋ ์ด์ด์ authorization์ ๊ตฌํํ ๋ ๊ณ ๋ คํ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค: ํ๋๋ง๋ค(per-field) authroization ๊ท์น์ ์ ์ฉํ๋ ๊ฒ๋ณด๋ค ํ์ ๋ง๋ค(per-type) ๊ท์น์ ์ ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๊ฐ์ฒด ํ์ ์ด API scopes์ ์ ๋ง๋๋ค. ๊ฐ์ฒด์ ์ ๊ทผํ๋ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ์ถ์ ํ๋ ๊ฒ์ ์ด๋ ต๋ค; ํ๋ ๋ ๋ฒจ๋ก ์ฒดํฌํ๋ฉด ์์ํ์ง ๋ชปํ ์ ๊ทผ ํจํด์ ๋ ธ์ถ๋ ์ ์๋ค. type Query { adminThings: AdminOnlyType! @authorization(scopes: ["read:admin_only_types"]) product: Product! @authorization(scopes: ["read:products"]) }
๐ Authentication vs Authorization
type Query { adminThings: AdminOnlyType! @authorization(scopes: ["read:admin_only_types"]) product: Product! @authorization(scopes: ["read:products"]) }
type Product { name: String settings: AdminOnlyType! } ```
๐ Introspection (์คํค๋ง ํ์ธ) GraphQL์์ ์คํค๋ง๊ฐ ์ด๋ค ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์์ฒญํ ์ ์๋ (GraphQL์์ ์ ๊ณตํ๋) ๊ธฐ๋ฅ. Introspection์ end users๊ฐ ์๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ํด์ด๋ค. ์ฆ, development ํ๊ฒฝ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํด์ผ๊ฒ ์ง๋ง production ํ๊ฒฝ์์ ์ด์ด๋ ํ์๋ ์๋ค (ํนํ internal API). ์ฝ์ด๋ณด๋ฉด ์ข์ ๊ธ: Why You Should Disable GraphQL Introspection In Production โ GraphQL Security Public GraphQL API์ ๊ฒฝ์ฐ, ์ด๋ฏธ schema๊ฐ ๋ ธ์ถ๋์ด์๊ธฐ ๋๋ฌธ์ introspection์ ์ ํํ ํ์๊ฐ ์๋ค.
๐ Introspection (์คํค๋ง ํ์ธ) GraphQL์์ ์คํค๋ง๊ฐ ์ด๋ค ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์์ฒญํ ์ ์๋ (GraphQL์์ ์ ๊ณตํ๋) ๊ธฐ๋ฅ.
๐ lexer vs parser lexer: input stream์ token์ผ๋ก ๋ถ๋ฆฌํ๊ณ (tokenizer), ๊ฐ token์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๋ถ์ (ํ ํฐ์ ์๋ฏธ๋ฅผ ๋ถ์ํ๋ ์ญํ ). parser: lexer๊ฐ ํ ํฐ ๋จ์๋ก ํค์๋๋ ์์ฑ์ ์ ์ํ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ๋ํ๋(parse tree๋ฅผ ๊ตฌ์ถ).
๐ lexer vs parser
Authorization
Blocking Introspection
Persisted Queries
Summary