์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ์ฝํ
- React
- TypeScript
- JavaScript
- custom hook
- ๋ฆฌ๋์ค ํดํท
- ๋ธ๋ฃจํธํฌ์ค
- router v6
- js
- ๋ถ์คํธ์ปจํผ๋ฐ์ค
- svgํ์ผ ๋ค๋ฃจ๊ธฐ
- ๋๋๊ทธ ์ด๋ฒคํธ
- ๋ฐฑ์ค
- ๋์ ๊ณํ๋ฒ
- Redux toolkit
- ์ด๋ถํ์
- ์๊ณ ๋ฆฌ์ฆ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์ฝ๋ฉํ ์คํธ
- Node.js
- ๊ณผ์ ํ ์คํธ
- ์ด๋ฏธ์ง ์์
- ๋ถ์คํธ์บ ํ์น๋ชจ๋ฐ์ผ
- ์นด์นด์ค์ฑ์ฉ
- ์นด์นด์ค
- icecandidate
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ฝ๋ ํฌ๋ฉง
- DP
- Today
- Total
๐ฅ dev-ruby
[GraphQL]๊ทธ๋ํ ํ์ ๊ธฐ๋ณธ ๊ฐ๋ ์์๊ฐ๊ธฐ - 1ํ | ๊ทธ๋ํ ํ์๊ณผ ๋ฆฌ์กํธ? ๋ณธ๋ฌธ
[GraphQL]๊ทธ๋ํ ํ์ ๊ธฐ๋ณธ ๊ฐ๋ ์์๊ฐ๊ธฐ - 1ํ | ๊ทธ๋ํ ํ์๊ณผ ๋ฆฌ์กํธ?
ruby_s 2021. 12. 27. 13:58
๐ ๊ทธ๋ํ ํ์์ด๋ ๋ญ๊น? ๐
์ฒ์์ SQL๊ณผ ๋น์ทํ ์ด๋ฆ์ด๋ผ ๋ฐฑ์๋์์ ์ฐ๋ ์ฟผ๋ฆฌ์ธ์ด ์ผ๊น ์๊ฐํ๋ค..!
- ๊ทธ๋ํ ํ์์ ํ์ด์ค๋ถ์์ ๋ง๋ ์๋ก์ด ์ฟผ๋ฆฌ ์ธ์ด๋ค.
- ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ๋ฉฐ
- ๊ทธ๋ํ+์ฟผ๋ฆฌ ์ธ์ด๋ผ๊ณ ๋ณด๋ฉด๋๋ค.
์ฆ, API์ ์ ๋ชฉ ์ํฌ ์ ์๋ ์ฟผ๋ฆฌ ์ธ์ด์ด๋ค.
๊ทธ๋ํ ํ์์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Apollo๋ผ๋ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค.
๐ ์ฌ๊ธฐ์ ์ ๊น, Apollo๋ GraphQL์ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- Apollo๋ client์ server ์์ ๋ชจ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ๊ณต์ ํํ์ด์ง์์ Apollo client๋ react redux๋ฅผ, Apollo server๋ REST API๋ฅผ ๋์ฒดํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
๐ GraphQL์ด ์ ์ข์๊ฐ?
- endpoint๊ฐ 1๊ฐ๋ผ์ ํจ๊ณผ์ ์ธ ๋ฐ์ดํฐ ๋ก๋ฉ์ด ๊ฐ๋ฅํ๋ค!
- ํ๋ฐํธ ๋จ์์ ํ์ํ ๋ฐ์ดํฐ์ ์ฝ๊ณ ์ ํํ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ํ๋ฒ์ ์์ฒญ์ผ๋ก ์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก๋ถํฐ ์์ฒญํด์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ Rest API๋ง์ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ Overfeching ์ด๋ Underfeching ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- client์ server์ ์ปค๋ฎค๋์ผ์ด์ ์ ํจ๊ณผ์ ์ด๋ค.
Overfaching
์ํ๋ ๋ฐ์ดํฐ ์ด์์ ์ ๋ณด๋ฅผ ์์ฒญํ๋ ๊ฒ. data ๋ฆฌ์์ค ๋ญ๋น ๋ฐ์
Underfaching
endpoint๊ฐ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฐ์์์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ๋ ๋ฆฌ๋ ๊ฒ. ๋คํธ์ํฌ๋ฅผ ํตํด ์ฌ๋ฌ๋ฒ ์ ๊ทผํด์ ๋ฆฌ์์ค๋ฅผ ๋ญ๋น ๋ฐ์
REST API์ ๊ฒฝ์ฐ
์ํ๋ ์์
์ ํ ๋๋ง๋ค endpoint๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ endpoint๊ฐ ์ฌ๋ฌ ๊ฐ ์กด์ฌํ๋ค.
์๋ฅผ ๋ค์ด, ๋ธ๋ก๊ทธ์ ํฌ์คํธ๋ฅผ ์ฌ๋ฆฌ๋ ค๊ณ ํ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ endpoint๊ฐ ํ์ํ๋ค.
api/:userid
api/:userid/:postid
api/:userid/:follows
GraphQL์ ์ฌ์ฉํ๋ฉด ๊ทธ๋ด ํ์๊ฐ ์๋ค..!
query {
User (id : "1234") {
name
posts {
title
likes
}
followers(last: 2) {
name
}
}
}
์์ ๊ฐ์ด ํ๋์ endpoint๋ก ํ์ํ User์ id๋ง ๊ฐ์๋ผ์ฐ๋ฉด ํ๋ฒ์ ์์ฒญ์ผ๋ก ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ๋ฐ์์ฌ ์ ์๋ค!
๐ ์ฅ์
- ํ๋ก ํธ์์ ๋ฐ์ดํฐ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ๋ณผ ์ ์๋ค
→ REST์์๋ ๋ญ ํ๋ ์์ ํ๋ฉด api ์ฃผ์ ๋ฐ๋๊ณ ,,
๋ฐ์ดํฐ๋ ๊ทธ๋ ๊ทธ๋ ๋ฐ๋๋ ์ฃผ์๋ฅผ ํตํด์ผ์ง ๋ฐ์๋ณผ ์ ์์ด์ ์ ์ฒด์ ์ผ๋ก ํ์ธํ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
GQL์ ๋ง ๊ทธ๋๋ก ๊ทธ๋ํ์ฒ๋ผ ๋ฐ์ดํฐ๋ค์ด ์ฝํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ๋ํ๋ ๋ค ๊น๋ณด๋ฉด์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๊ณ ์ ์ ์ด ์๋๋ผ ์์ ๋ ๊ฐ๋ฅํ๋ค.
๐ถ last parameter ๋ ๋ญ์์?
: ์์ followers์ ๋ณด๋ฉด last: 2์ ๊ฐ์ด ํ๋ผ๋ฏธํฐ๊ฐ ๋ค์ด์๋ค.
๋์์๋ถํฐ ํด๋นํ๋ ์ซ์๋งํผ์ ๋ฐ์ดํฐ๋ง ๋ถ๋ฌ์ฌ ์ ์๋ค๋ ๋ป์ด๋ค.
โ Mutation
REST์์์ CRUD ์ฒ๋ผ mutation์ ํตํด CUD๋ฅผ ํ ์ ์๋ค.
ํฌ๊ฒ 3๊ฐ์ง๋ก ์๊ฐํด๋ณผ ์ ์๋ค.
- Create --> ์๋ก์ด ๋ฐ์ดํฐ ๋ง๋ค๊ธฐ
- Update --> ๊ธฐ์กด ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ
- Delete --> ๊ธฐ์กด ๋ฐ์ดํฐ ์ญ์
๋ค์๊ณผ ๊ฐ์ด mutation์ ์ธ์๋ฅผ ๋ฃ์ด ํธ์ถํ๋ฉด ์๋ก์ด ์ ์ ๊ฐ ์์ฑ๋๋ค.
mutation {
createPerson(name: "Doori", age: 29) {
name
age
}
}
๋ค์๊ณผ ๊ฐ์ด ๋ฎคํ
์ด์
์ ์ ์ํ ์ ์๋ค.
type Mutation {
createUser(id: ID!, name: String!, email: String!, age: Int): User!
updateUser(id: ID!, name: String, email: String, age: Int): User!
deleteUser(id: ID!): User!
}
๋๋ํ(!) ๋ null๊ฐ์ด ๋ ์ ์๋ค๋ ๋ป์ด๋ค.
์ฆ, ํ์ ๊ฐ์ด๋ค !
์ ๋ฆฌํด๋ณด๋ฉด,
- createUser: ์๋ก์ด ์ ์ ๋ฑ๋กํ๋ ๋ฎคํ ์ด์
- updateUser: ๊ธฐ์กด ์ ์ ์ ๋ฐ์ดํธํ๋ ๋ฎคํ ์ด์
- deleteUser: ID๋ฅผ ๋๊ฒจ๋ฐ๊ณ ํด๋น ์ ์ ๋ฅผ ์ญ์ ํ๋ ๋ฎคํ ์ด์
๐ ์ด์ ๋๋ก 1ํ์ ๋ง๋ฌด๋ฆฌํ๋ ค๊ณ ํ๋ค.
๋ค์ 2ํ์์๋ ์ง์ ์ฟผ๋ฆฌ๋ฌธ์ ๋ ๋ ค๋ณด๊ณ ์ค์ตํ๋ ํฌ์คํธ๋ก ๋์์ค๊ฒ ๋ค~