MapleStory Finger Point

๐Ÿ”ด WEB/๐Ÿ”ด GraphQL

[GraphQL] ๊ธฐ์ดˆ ๊ฐœ๋…, ๋ฌธ๋ฒ•

HYEJU01 2025. 4. 3. 00:50

 

 

GraphQL ์ด๋ž€?

GraphQL ์€ Facebook ์—์„œ ๊ฐœ๋ฐœ๋œ ์˜คํ”ˆ์†Œ์Šค ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ์ž„

API๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 


 

GraphQL ์™œ ์‚ฌ์šฉํ• ๊นŒ?

๊ธฐ์กด REST API ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•จ

 


 

 

GraphQL ์š”์ฒญ๋ฐฉ์‹

  • REST API : ํŠน์ • ์—”๋“œํฌ์ธํŠธ(URL)์— ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  • GraphQL : ๋‹จ์ผ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌ๋กœ ์š”์ฒญ (ํ•œ๋ฒˆ์— ์š”์ฒญ ๊ฐ€๋Šฅ)

 

 

GraphQL ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜ ๋ฐฉ์‹

  • REST API : ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๊ณผ๋‹ค์š”์ฒญ(Over-fetching) , ์—ฌ๋Ÿฌ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์„ ์ˆ˜ ์žˆ๋Š” ๋ถ€์กฑํ•œ ์š”์ฒญ(Under-fetching)
  • GraphQL : ์ •ํ™•ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ์š”์ฒญ ๊ฐ€๋Šฅ, ํ•œ๋ฒˆ์˜ ์š”์ฒญ์œผ๋กœ ์›ํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํฌํ•จ ๊ฐ€๋Šฅ

 

 

GraphQL ์—”๋“œํฌ์ธํŠธ ๊ตฌ์กฐ

  • REST API : ๊ฐ๊ฐ ์ž์›๋งˆ๋‹ค ๋ณ„๋„์˜ ์—”๋“œํฌ์ธํŠธ ์ œ๊ณต
  • GraphQL : ๋‹จ์ผ ์—”๋“œํฌ์ธํŠธ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ (์—”๋“œํฌ์ธํŠธ ๋‹จ์ผํ™”)

 

 

์Šคํ‚ค๋งˆ, ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

  • REST API : ์Šคํ‚ค๋งˆ ์ •์˜์—†์ด ์—”๋“œํฌ์ธํŠธ๋ณ„๋กœ ๋ฐ์ดํ„ฐ ์„ค๊ณ„ (๋ฐ์ดํ„ฐ๊ฐ„ ๊ด€๊ณ„ ํ‘œํ˜„ ์–ด๋ ค์›€, ์„œ๋ฒ„๊ฐ€ ๋ฐ˜ํ™˜ํ•  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ •ํ•จ)
  • GraphQL : ๋ช…ํ™•ํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ตฌ์กฐ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ์ •์˜ํ•จ (ํƒ€์ž…๊ฐ„ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํ•œ ๋ชจ๋ธ๋ง ๊ฐ€๋Šฅ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ)

 

 

์Šคํ‚ค๋งˆ 

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ, ๊ด€๊ณ„ ์„ค๋ช…ํ•˜๋Š” ์ฒญ์‚ฌ์ง„
    `type Creator { id : ID!, name: String }`

 

์—”ํ‹ฐํ‹ฐ 

  • ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด
    `{ "id" : "1", "name" : "anna"}`

 

 


 

 

ํด๋ผ์ด์–ธํŠธ

GraphQL ์ฟผ๋ฆฌ(Query)๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์„œ๋ฒ„๋กœ ๋ณด๋ƒ„

 

POST /graphql HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "query": "query getCreator($id: String!) { creator(id: $id) { id name videos { url } } }",
  "variables": {
    "id": "1"
  }
}

 

์ด๋Ÿฐ์‹์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ํฌํ•จํ•ด์„œ POST ๋กœ ๋„˜๊ธด๋‹ค.

 

 

 

์„œ๋ฒ„

1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•จ : 

2. ์ฟผ๋ฆฌ ํŒŒ์‹ฑ or ๊ฒ€์ฆ : ์ฟผ๋ฆฌ ํ•„๋“œ ํ™•์ธ or ์ž˜๋ชป๋œ ์š”์ฒญ(์Šคํ‚ค๋งˆ์— ์—†๋Š” ํ•„๋“œ ์š”์ฒญ) ๊ฒ€์ฆ

3. ์Šคํ‚ค๋งˆ, ๋ฐ์ดํ„ฐ ๋งคํ•‘ :  ์Šคํ‚ค๋งˆ์— ์ •์˜๋œ ํƒ€์ž…, ์š”์ฒญ ํ•„๋“œ๋ฅผ ๋งคํ•‘ํ•˜๊ณ 

4. ๋ฆฌ์กธ๋ฒ„ ์‹คํ–‰ : ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ์œ„ํ•ด resolver ๋ฅผ ์‹คํ–‰ํ•จ

5. ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜(JSON) : ๋ฐ์ดํ„ฐ ์กฐํšŒ ํ›„ ์š”์ฒญํ•œ ํ•„๋“œ์—๋งž๊ฒŒ JSON ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•จ

 


 

 

Type Definition : `type`

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜

 

Query: `type Query`

๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ ์ •์˜

 

Mutation: `type Mutation`

๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ ์ •์˜

 

Scalar Types

๊ธฐ๋ณธ ์Šค์นผ๋ผ ํƒ€์ž… ์ œ๊ณต

  • Int: ์ •์ˆ˜
  • Float: ๋ถ€๋™์†Œ์ˆ˜์  ์ˆซ์ž
  • String: ๋ฌธ์ž์—ด
  • Boolean: ์ฐธ/๊ฑฐ์ง“ ๊ฐ’
  • ID: ๊ณ ์œ  ์‹๋ณ„์ž (๋ณดํ†ต ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ)

 

Non-Null : `!`

ํƒ€์ž… ๋’ค์— ! ๋ฅผ ๋ถ™์ด๋ฉด ํ•„๋“œ ๊ฐ’์ด ํ•„์ˆ˜

 

Relationships : ๊ด€๊ณ„

ํƒ€์ž…๊ฐ„ ๊ด€๊ณ„ ์ง€์ • ๊ฐ€๋Šฅ

 

์ฃผ์„ : `#`

ํ•œ ์ค„ ์ฃผ์„๋งŒ ๊ฐ€๋Šฅํ•จ

 

๋“ฑ๋“ฑ ์ด์™ธ์—๋„ ๋ฌธ๋ฒ•์€ ๋งŽ์Œ.

 


์˜ˆ์ œ

 

type Creator {
	id: ID!
	name: String
	subcribers: Int
	videos: [Video]
}

type Video {
	url: String!
	creator: Creator
}
type Query {
	videos: [Video] # ๋ชจ๋“  Video ๊ฐ์ฒด ๋ฐฐ์—ด ๋ฐ˜ํ™˜
	creator(id String!): Creator # ํŠน์ • Creator ๋ฐ˜ํ™˜ , id ํ•„์ˆ˜๋กœ ์ „๋‹ฌ
}

type Mutation {
	createVideo(url: String): Video
	deleteVideo(url: String): String
}

 

 

๋ชจ๋“  Video ์กฐํšŒ (๋ฐ์ดํ„ฐ ์š”์ฒญ)

query getVideos {
  videos {
    url
    creator {
      id
      name
    }
  }
}

 

 

Mutation ์˜ˆ์ œ (๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ)

mutation createVideo($url: String!) {
  createVideo(url: $url) {
    url
    creator {
      id
      name
    }
  }
}

 


 

๋ฐ์ดํ„ฐ ์š”์ฒญ,๋ณ€๊ฒฝ์‹œ์— ์™œ Query ์™€ Mutation ์œผ๋กœ ๋‚˜๋ˆŒ๊นŒ?

 

- ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋ฆฌ

- API ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ ์œ ์ง€

 

Query (์ฝ๊ธฐ/์กฐํšŒ) : ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœํ•ด๋„ ์•ˆ๋ณ€ํ•จ

Mutation (์“ฐ๊ธฐ/์ˆ˜์ •) : ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœํ•˜๋ฉด ์ค‘๋ณต ์ž‘์—… ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

 

๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ž˜ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•จ์ž„ !

 

 

 

 

https://www.youtube.com/watch?v=eIQh02xuVw4