๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ–ฅ dev-ruby

[GraphQL]๊ทธ๋ž˜ํ”„ ํ์—˜ ๊ธฐ๋ณธ ๊ฐœ๋… ์•Œ์•„๊ฐ€๊ธฐ - 1ํƒ„ | ๊ทธ๋ž˜ํ”„ ํ์—˜๊ณผ ๋ฆฌ์•กํŠธ? ๋ณธ๋ฌธ

graphQL

[GraphQL]๊ทธ๋ž˜ํ”„ ํ์—˜ ๊ธฐ๋ณธ ๊ฐœ๋… ์•Œ์•„๊ฐ€๊ธฐ - 1ํƒ„ | ๊ทธ๋ž˜ํ”„ ํ์—˜๊ณผ ๋ฆฌ์•กํŠธ?

ruby_s 2021. 12. 27. 13:58
728x90
๋ฐ˜์‘ํ˜•
SMALL

๐Ÿ“ˆ ๊ทธ๋ž˜ํ”„ ํ์—˜์ด๋ž€ ๋ญ˜๊นŒ? ๐Ÿ“‰

์ฒ˜์Œ์— 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ํƒ„์—์„œ๋Š” ์ง์ ‘ ์ฟผ๋ฆฌ๋ฌธ์„ ๋‚ ๋ ค๋ณด๊ณ  ์‹ค์Šตํ•˜๋Š” ํฌ์ŠคํŠธ๋กœ ๋Œ์•„์˜ค๊ฒ ๋‹ค~

728x90
๋ฐ˜์‘ํ˜•
LIST