Graph QL
Graph QL ์ Server API ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด Facebook ์์ ๋ง๋ Query Language ์ด๋ค.
๊ธฐ์กด์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์ค์ธ RESTful API ์ ์ ์ฌํ์ง๋ง ์กฐ๊ธ๋ ์ ์ฐํ๊ฒ ์ด์๊ฐ๋ฅํ๋ฉฐ ํ๋์ API ๋ก ๋ค์ํ ์ ๋ณด๋ค์ ํํฐ๋ง ํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณต ๋ฐ์์ ์๋ ์ง์์ด๋ฅผ ์ ๊ณตํ๋ค.
RESTful API ์ ์ฐจ์ด์
RESTful API ์์ ์ฐจ์ด์ ์ ๋์ฒด์ ์ผ๋ก ์๋ ๋๊ฐ์ง๋ก ์์ถ๋๋ค.
- Graph QL API ๋ ์ฃผ๋ก ํ๋์ EndPoint ๋ง์ ์ฌ์ฉํ๋ค.
- Graph QL API ๋ ์์ฒญํ ๋ ์ฌ์ฉํ Query ๋ฌธ ์ ๋ฐ๋ผ ์๋ต ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ์ง๋ค.
์ด๋ ์ ๋๊ฐ์ง ํน์ง์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด ์ฅ์ ์ ๊ฐ์ง์ ์๋ค.
- HTTP ์์ฒญ ํ์๋ฅผ ์ค์ผ ์ ์๋ค.
- RESTful API ๋ ๊ฐ๊ฐ์ Resource ์ข ๋ฅ๋ณ๋ก ์์ฒญ์ ํด์ผํ๊ณ , ํ์ํ Resource ์ ๋ฐ๋ผ ์์ฒญ ํ์๊ฐ ์ฆ๊ฐํ๋ค.
- HTTP ์๋ต์ Size ๋ฅผ ์ค์ผ ์ ์๋ค.
- RESTful ์ ์๋ต์ ํํ๊ฐ ์ ํด์ ธ ์๊ณ , ๋ฐ๋ผ์ ํ์ํ ์ ๋ณด๋ง ๋ถ๋ถ์ ์ผ๋ก ์์ฒญํ๋ ๊ฒ์ด ํ๋ค๋ค.
- Graph QL ์ ์ํ๋ ๋๋ก ์ ๋ณด๋ฅผ ์์ฒญํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Graph QL ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ๋ฒ์ ๋คํธ์ํฌ ํธ์ถ ์์ด ํ๋ฒ์ ๋คํธ์ํฌ ํธ์ถ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
๋ฐ๋ฉด ์์ ๊ฐ์ด ๋ค์ํ ์์ฒญ์ ์ ์ฐํ๊ฒ ๋ฐ์ํ๊ธฐ ์ด๋ ค์ธ๋๋ ์๋์ ๊ฐ์ ๋จ์ ๋ ๊ฐ์ง์ ์๋ค.
- File ์ ์ก๋ฑ Text ๋ง์ผ๋ก ํ๊ธฐ ํ๋ ๋ด์ฉ๋ค์ ์ฒ๋ฆฌํ๊ธฐ ๋ณต์กํ๋ค.
- ๊ณ ์ ๋ ์์ฒญ๊ณผ ์๋ต๋ง ํ์ํ ๊ฒฝ์ฐ์๋ Query ๋ก ์ธํด ์์ฒญ์ ํฌ๊ธฐ๊ฐ RESTful API ๋ณด๋ค ๋ ์ปค์ง๋ค.
- ์ฌ๊ท์ ์ธ Query ๊ฐ ๋ถ๊ฐ๋ฅ ํ๋ค.
File ์ ์ก์ด ๋ถ๊ฐ๋ฅํ์ง ์์ง๋ง ์ผ๋ฐ์ ์ธ Graph QL API ์ฅ์ ์ ์ป์์ ์์ผ๋ฉฐ ๋ค๋ฅธ 3rd Party Service ์ ์์กดํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์๋ ์๋ ์๋ค.
Graph QL vs RESTful
Graph QL ๊ณผ RESTful ์ ์ ํ๊ธฐ์ค์ ์ฝ๊ฒ ์๋์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ํํ๋ฉด ๋๋ค.
- Graph QL
- ์๋ก ๋ค๋ฅธ ์ ํ์ ๋ค์ํ ์์ฒญ๋ค์ ๋ํด ์๋ตํ ์ ์์ด์ผ ํ ๋
- ๋๋ถ๋ถ์ ์์ฒญ์ด CRUD ์ ํด๋น๋ ๋
- RESTful
- HTTP/HTTPS ์ ์ํ Caching ์ด ๋ฐ๋์ ํ์ํ ๋
- File ์ ์ก๊ณผ ๊ฐ์ ๋จ์ํ Text ๊ธฐ๋ฐ์ ์ ๋ณด๋ค๋ก ์ฒ๋ฆฌ๊ฐ ํ๋ค๋
- ์์ฒญ์ ๊ตฌ์กฐ๊ฐ ๋จ์ํ์ฌ ์ ์ฐํจ์ด ๋ถ ํ์ํ ๋
์ ๊ธฐ์ค๊ณผ ๊ฐ์ด ๊ฐ ์ฌ์ฉ๋ชฉ์ ์ ๋ง๊ฒ ๋ Best Practice ์ ๊ธฐ์ค์ผ๋ก ์ ํํ๋๊ฒ์ด ์ต์ ์ด๋ค.
Graph QL ์ ๊ตฌ์กฐ
Query/Mutation
Graph QL ์ ์ฟผ๋ฆฌ์ ๋ฎคํ
์ด์
๋ฐ ์๋ต ๊ตฌ์กฐ๋ ์๋นํ ์ง๊ด์ ์ผ๋ก
์์ฒญํ๋ ์ง์๋ฌธ๊ณผ ์๋ต๋ด์ฉ์ ๊ตฌ์กฐ๋ ๊ฑฐ์ ์ผ์นํ๋ค.
- ์ฟผ๋ฆฌ -> Read
- ๋ฎคํ ์ด์ -> Create/Update/Delete
Schema/Type
Object Type & Field
type Character {
name: String!
appearsIn: [Episode!]!
}
- Object Type
- Character
- Field
- name, appearsIn
- Scalar
- String, ID, int ...
- ๋๋ํ (!)
- ํ์๊ฐ (non-nullable)
- ๋๊ดํธ ([,])
- ๋ฐฐ์ด (array)
Resolver
Introspection