GraphQL๊ณผ Apollo ์—ฌ๋Ÿ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - GraphQL Union๊ณผ Interface ๊ทธ๋ฆฌ๊ณ  ์ธ์ž์™€ ์ธํ’‹ ํƒ€์ž…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•„์š” ๐Ÿ˜€

2023. 11. 21. 12:00ใ†Back-End ์ž‘์—…์‹ค/๊ธฐํƒ€ ์ฐธ๊ณ  ์ž๋ฃŒ

728x90
๋ฐ˜์‘ํ˜•

 

 

์นด์นด์˜คํŽ˜์ด | ๋งˆ์Œ ๋†“๊ณ  ๊ธˆ์œตํ•˜๋‹ค

์—ฌ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ ๋งํฌ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

qr.kakaopay.com

 

 

 

 

 

GraphQL๊ณผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ์›น ์„œ๋น„์Šค:์„ค๊ณ„๋ถ€ํ„ฐ ๊ฐœ๋ฐœ·๋ฐฐํฌ๊นŒ์ง€ ๋”ฐ๋ผ ํ•˜๋ฉฐ ์™„์„ฑํ•˜๋Š” ์›น ํ’€

COUPANG

www.coupang.com

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 




๐Ÿ—‚ ๋ชฉ์ฐจ

โœ… GraphQL๊ณผ Apollo ์ฒซ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - ๊ฐœ๋… ์ตํžˆ๊ธฐ
โœ… GraphQL๊ณผ Apollo ๋‘๋ฒˆ์งธ ์ด์•ผ๊ธฐ - REST API๋ž€?
โœ… GraphQL๊ณผ Apollo ์„ธ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - GraphQL์˜ ์ •๋ณด ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ์‹

โœ… GraphQL๊ณผ Apollo ๋„ค๋ฒˆ์งธ ์ด์•ผ๊ธฐ - Apollo๋ž€?
โœ… GraphQL๊ณผ Apollo ๋‹ค์„ฏ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - GraphQL์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด ๋ณด์•„์š” ๐Ÿ˜€
โœ… GraphQL๊ณผ Apollo ์—ฌ์„ฏ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - GraphQL Moduleํ™”์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•„์š” ๐Ÿ˜€
โœ… GraphQL๊ณผ Apollo ์ผ๊ณฑ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - GraphQL Data Type์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•„์š” ๐Ÿ˜€
โœ… GraphQL๊ณผ Apollo ์—ฌ๋Ÿ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - GraphQL Union๊ณผ Interface ๊ทธ๋ฆฌ๊ณ  ์ธ์ž์™€ ์ธํ’‹ ํƒ€์ž…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•„์š” ๐Ÿ˜€
โœ… GraphQL๊ณผ Apollo ์•„ํ™‰๋ฒˆ์งธ ์ด์•ผ๊ธฐ - Java + Spring Boot์—์„œ GraphQL ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ - ์‹ค์Šต ํ™˜๊ฒฝ ๊ตฌ์„ฑ
โœ… GraphQL๊ณผ Apollo ์—ด๋ฒˆ์งธ ์ด์•ผ๊ธฐ - Java + Spring Boot์—์„œ GraphQL ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ - ์‹ค์Šต ํ•ด๋ณด๊ธฐ
โœ… GraphQL๊ณผ Apollo ์—ด ํ•œ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - TypeScript + Nest.js์—์„œ GraphQL ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ - ์‹ค์Šต ํ™˜๊ฒฝ ๊ตฌ์„ฑ
โœ… 
GraphQL๊ณผ Apollo ์—ด ๋‘๋ฒˆ์งธ ์ด์•ผ๊ธฐ - TypeScript + Nest.js์—์„œ GraphQL ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ - ์‹ค์Šต ํ™˜๊ฒฝ ํ…Œ์ŠคํŠธ
โœ… GraphQL๊ณผ Apollo ์—ด ์„ธ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - TypeScript + Nest์—์„œ GraphQL ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ - ์‹ค์Šต ํ•ด๋ณด๊ธฐ
โœ… 
GraphQL๊ณผ Apollo ์—ด ๋„ค๋ฒˆ์งธ ์ด์•ผ๊ธฐ - React์™€ Apollo Client
โœ… GraphQL๊ณผ Apollo ์—ด๋‹ค์„ฏ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - React์™€ Apollo Client - Query์™€ Mutation ์‚ฌ์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ
โœ… GraphQL๊ณผ Apollo ์—ด ์—ฌ์„ฏ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - Kotlin + Spring Boot์—์„œ GraphQL ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ - ์‹ค์Šต ํ™˜๊ฒฝ ๊ตฌ์„ฑ
โœ… GraphQL๊ณผ Apollo ์—ด ์ผ๊ณฑ๋ฒˆ์งธ ์ด์•ผ๊ธฐ - Kotlin + Spring Boot์—์„œ GraphQL ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ - ์‹ค์Šต ํ•ด๋ณด๊ธฐ


๐Ÿค” ๋‚ด๊ฐ€ ๋งŒ๋‚œ ๋ฌธ์ œ

โš ๏ธ [Nest.js] TypeORM Table ๊ด€๊ณ„๊ฐ€ ๋งบ์–ด์กŒ์„ ๋•Œ, Seeding (feat. Migration)
โš ๏ธ [Spring Boot 3.0] Could not resolve org.springframework.boot:spring-boot-gradle-plugin
โš ๏ธ [Spring Boot 3] Spring Doc(Swagger) White Label Error


๐Ÿ“‹ ๋ถ€๋ก

๐Ÿ” [Nest.js] ์ดˆ๊ธฐ ํ™˜๊ฒฝ ๊ตฌ์„ฑ (feat. TypeORM, QueryBuilder, GraphQL, Apollo)
๐Ÿ” [SOLID][Nest.js][Java + Spring] Interface๋ฅผ ํ™œ์šฉํ•œ ๊ฒฐํ•ฉ๋„ ๋ถ„๋ฆฌ (Interface๋ฅผ ์ด์šฉํ•œ Dependency Injection - DI)

 

 

 

๐Ÿš€ GraphQL๊ณผ Apollo ์—ฌ๋Ÿ๋ฒˆ์งธ ์ด์•ผ๊ธฐ

    ๐Ÿ”ฝ GraphQL Union๊ณผ Interface ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•„์š” ๐Ÿ˜€

        ๐Ÿ“ฆ ๊ฐœ์š”

์ด๋ฒˆ ๋ถ€ํ„ฐ ์ง€๋‚œ ๊ธ€๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹Œ ์•„๋ž˜ ํ”„๋กœ์ ํŠธ๋กœ ์‹ค์Šตํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ•ด ๋ณด๋ ค๊ณ  ํ•ด์š”.

 

3-3-union-interface · master · Channel Yalco / yalco-inflearn-graphql-apollo · GitLab

GitLab.com

gitlab.com

728x90

 


์ฐธ๊ณ ๋กœ ๋˜‘๋˜‘ํ•œ InteliJ ๋‹ต๊ฒŒ ์•„๋ž˜ ๋ณด๋ฉด ์ข…์†์„ฑ ์„ค์น˜๊ฐ€ ๋‚˜์˜ค๊ณ , npm install ๋ฒ„ํŠผ์ด ์žˆ๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๊ฑธ ๋ˆ„๋ฅด๋ฉด ํ„ฐ๋ฏธ๋„์—์„œ npm install์„ ์ž…๋ ฅํ•  ํ•„์š” ์—†์–ด์š”.

 

 

    ๐Ÿ”ฝ  ์‹ค์Šตํ•˜๋ฉฐ ์•Œ์•„๋ณด๊ธฐ

        ๐Ÿ“ฆ Union ์ด๋ž€?

Union(์œ ๋‹ˆ์–ธ)์€ Type(ํƒ€์ž…) ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ํ•œ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ด ์ „ ๊ธ€๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฐ์—ด์€ ํŠน์ • ๋ฐ์ดํ„ฐ ํƒ€์ž…, ์ฆ‰ String(๋ฌธ์ž์—ด) ์ด๋‚˜, Integer(์ •์ˆ˜), ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“  ๊ฐ์ฒด ์ž๋ฃŒํ˜• ํƒ€์ž… ์ค‘์— ํ•œ๊ฐ€์ง€๋งŒ์„ ์„ ํƒํ•˜์—ฌ ๊ฐ๊ฐ ๋ฐ˜ํ™˜ํ–ˆ์—ˆ์–ด์š”.

์œ ๋‹ˆ์–ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ๋ฐฐ์—ด ์•ˆ์— ํ•œ ๊ฐ€์ง€ ์ด์ƒ์˜ ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ์–ด์š”.

์‹ค์Šต์„ ํ†ตํ•ด Equipment์™€ Supply ๋‚ด์šฉ์„ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ ๋ฐ›๊ฒŒ ํ•ด๋ณผ๊ฒŒ์š”.

givens.js


givens.js๋ฅผ ๋ณด๋ฉด ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

givens.js


์ตœ์ดˆ typeDefs Schema(์Šคํ‚ค๋งˆ) ๋ถ€ํ„ฐ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•ด์š”.

5๋ฒˆ์งธ ์ค„์„ ๋ณด๋ฉด union ์ž๋ฃŒํ˜• ํƒ€์ž…์œผ๋กœ Given์ด๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ ๋˜์–ด ์žˆ๊ณ , ํ•ด๋‹น ๋ณ€์ˆ˜์—๋Š” Equipment ๊ฐ์ฒด๋‚˜, Supply ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ช…์‹œํ•œ ๊ฒƒ์ด์—์š”.

์ฆ‰, Given์ด๋ผ๋Š” ๋ณ€์ˆ˜๋Š” Equipment ๊ฐ์ฒด๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , Supply ๊ฐ์ฒด๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์—์š”.

givens.js


resolvers์— Query๋ฅผ ์‚ดํŽด๋ณด๋ฉด ํ•œ ๋ฐฐ์—ด์— Equipments์™€ Supply ๋‘˜ ๋‹ค ๋„ฃ์–ด์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” givens๋ผ๋Š” Query๊ฐ€ ์„ ์–ธ๋œ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

resolvers์— Query๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด _queries.js์— Root Query Type์—๋„ ์ถ”๊ฐ€๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•ด์š”.

_queries.js


์œ„์™€ ๊ฐ™์ด 10๋ฒˆ์งธ ์ค„์— givens๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ์–ด์š”. ์œ„์—์„œ ์œ ๋‹ˆ์˜จ์œผ๋กœ ์ง€์ •ํ–ˆ๋˜ Given์ด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜๋  ๊ฑฐ์—์š”.

์ด์ œ index.js์— Module(๋ชจ๋“ˆ)๋กœ ์ถ”๊ฐ€ํ•ด ์ค„๊ฒŒ์š”.

index.js


์œ„์™€ ๊ฐ™์ด 9, 18, 25๋ฒˆ์งธ์— ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•ด ์ฃผ์—ˆ์–ด์š”.


npm start


๊ทธ๋Ÿฐ ๋’ค ์„œ๋ฒ„๋ฅผ ๊ธฐ๋™ ์‹œ์ผœ์ค„๊ฒŒ์š”.

Playgroud

 

query {
  givens {
    __typename
    ... on Equipment {
      id
      used_by
      count
      new_or_used
    }
    
    ... on Supply {
      id
      team
    }
  }
}

 

{
  "data": {
    "givens": [
      {
        "__typename": "Equipment",
        "id": "machanical keyboard",
        "used_by": "developer",
        "count": 24,
        "new_or_used": "used"
      },
      {
        "__typename": "Equipment",
        "id": "pen tablet",
        "used_by": "designer",
        "count": 15,
        "new_or_used": "used"
      },
      {
        "__typename": "Equipment",
        "id": "notebook",
        "used_by": "planner",
        "count": 37,
        "new_or_used": "new"
      },
      {
        "__typename": "Equipment",
        "id": "ergonomic mouse",
        "used_by": "designer",
        "count": 31,
        "new_or_used": "used"
      },
      {
        "__typename": "Equipment",
        "id": "dual monitor",
        "used_by": "developer",
        "count": 20,
        "new_or_used": "used"
      },
      {
        "__typename": "Equipment",
        "id": "whiteboard",
        "used_by": "planner",
        "count": 12,
        "new_or_used": "used"
      },
      {
        "__typename": "Equipment",
        "id": "sketchboard",
        "used_by": "designer",
        "count": 48,
        "new_or_used": "new"
      },
      {
        "__typename": "Supply",
        "id": "ergonomic mouse",
        "team": 1
      },
      {
        "__typename": "Supply",
        "id": "mug",
        "team": 1
      },
      {
        "__typename": "Supply",
        "id": "webcam",
        "team": 2
      },
      {
        "__typename": "Supply",
        "id": "hoodie",
        "team": 2
      },
      {
        "__typename": "Supply",
        "id": "chair",
        "team": 3
      },
      {
        "__typename": "Supply",
        "id": "usb hub",
        "team": 3
      },
      {
        "__typename": "Supply",
        "id": "headphone",
        "team": 4
      },
      {
        "__typename": "Supply",
        "id": "stempler",
        "team": 4
      },
      {
        "__typename": "Supply",
        "id": "calculator",
        "team": 5
      },
      {
        "__typename": "Supply",
        "id": "t shirt",
        "team": 5
      }
    ]
  }
}


Playgroud์—์„œ ์œ„์™€ ๊ฐ™์ด Query๋ฅผ ๋‚ ๋ฆฌ๋ฉด ๊ฒฐ๊ณผ๊ฐ’์„ ์œ„์™€ ๊ฐ™์ด ๋ฐ›๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

๊ฒฐ๊ณผ๊ฐ’์„ ๋ณด๋ฉด __typename์„ ํ†ตํ•ด Equipment ํƒ€์ž…์œผ๋กœ ํ˜น์€ Supply ํƒ€์ž…์œผ๋กœ ์ด๋ค„์ง„ ๊ฐ์ฒด์ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

query {
  givens {
    __typename
    ... on Equipment {
      id
      used_by
      count
      new_or_used
    }
    
    ... on Supply {
      id
      team
    }
  }
}


์ด Query๋ฅผ ๋ถ„์„ํ•ด ๋ณด๋ฉด

__typename์€ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ Equipment์— ์†ํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด Supply์— ์†ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์—์š”.

givens.js


์œ„ ๋‚ด์šฉ์€ ์ด ์ฝ”๋“œ๊ฐ€ ์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ์—์š”.

๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ๊ฐ’์ด Equipment์ธ์ง€ Supply์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ํ•ญ๋ชฉ์— used_by Filed(ํ•„๋“œ)๊ฐ€ ์žˆ์œผ๋ฉด Equipment ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , team ํ•„๋“œ๊ฐ€ ์žˆ์œผ๋ฉด Supply ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ๋Š” ๊ฒƒ์ด์—์š”.

๋‘˜ ๋‹ค ์•„๋‹ˆ๋ฉด? Null์„ ๋ฐ˜ํ™˜ํ•˜๊ฒ ๋„ค์š”.

์ด ์ฝ”๋“œ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๊ฐ ํ•ญ๋ชฉ์ด ์–ด๋–ค ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋ถ„์„ํ•œ ๋’ค __typename์— ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ์ด์—์š”.

query {
  givens {
    __typename
    ... on Equipment {
      id
      used_by
      count
      new_or_used
    }
    
    ... on Supply {
      id
      team
    }
  }
}


๋‚˜๋จธ์ง€๋„ ๋ถ„์„ํ•ด ๋ณผ๊ฒŒ์š”. 


์•„ ๋ถ€๋ถ„์€ ๋งŒ์•ฝ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ Equipment์— ํ•ด๋‹น๋œ๋‹ค๋ฉด ๊ทธ ์ค‘ ์–ด๋–ค ํ•„๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ• ์ง€ ๋ช…์‹œํ•ด ์ค€ ๊ฒƒ์ด์—์š”.


์œ„์™€ ๊ฐ™์ด Equipment์— id์™€ used_by๋งŒ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ’๋งŒ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
์ฆ‰, ์œ ๋‹ˆ์–ธ์— ํฌํ•จ๋œ ๊ฐ ํ•ญ๋ชฉ๋“ค์— ๋Œ€ํ•ด ์–ด๋–ค ํ•„๋“œ๋“ค์„ ๋ฐ˜ํ™˜ํ• ์ง€๋ฅผ ... on Equipment, ... on Supply ์ด ๋‘˜์—๋‹ค๊ฐ€ ๋ช…์‹œํ•ด ์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ํƒ€์ž…์— ์†ํ•œ ๋ฐ์ดํ„ฐ์ด๊ฑด ์ž์œ ์ž์žฌ๋กœ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜, ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ์ˆ˜ ์žˆ์–ด์š”.

 

 

 

 

 

 

        ๐Ÿ“ฆ Interface๋ž€?

Interface(์ธํ„ฐํŽ˜์ด์Šค)๋Š” ์œ ์‚ฌํ•œ ๊ฐ์ฒด ํƒ€์ž…์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ณตํ†ต ํ•„๋“œ ํƒ€์ž…์ด์—์š”.
์ด๋Š” ์ถ”์ƒ ํƒ€์ž…์ธ๋ฐ, ๋‹ค๋ฅธ ํƒ€์ž…์— Implement(๊ตฌํ˜„) ๋˜๊ธฐ ์œ„ํ•œ ํƒ€์ž…์ด์—์š”.

์ฃผ๋‹ˆ๊ฐ€ ์‚ฌ๋ž‘ํ•˜๋Š” ์ž๋ฐ”์™€ ๊ฐ™์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์—์„œ ์•„์ฃผ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด์—์š”.

equipments.js

 

softwares.js


๋‘ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๊ณตํ†ต๋˜๋Š” ์‚ฌํ•ญ์ด ๋ณด์—ฌ์š”.
๋ฐ”๋กœ id, used_by ํ•„๋“œ์—์š”.

์ž๋ฐ”์™€ ๊ฐ™์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์—์„œ ์ฝ”๋”ฉ์„ ํ•  ๊ฒฝ์šฐ ์ด๋ ‡๊ฒŒ ๊ณตํ†ต๋œ ์‚ฌํ•ญ์€ ์ƒ์œ„ ๊ฐ์ฒด ํ˜น์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜ํ•˜๊ณ , ๊ฐ๊ฐ์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜, ์ƒ์† ๋ฐ›์•„ ์ž์‹ ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋”ฉ ํ•ด์š”.

GraphQL์—์„œ๋„ ์ด์™€ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ์‹ค์Šต์„ ์œ„ํ•ด tools.js๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ๊ฒŒ์š”.

tools.js

const { gql } = require('apollo-server')
const typeDefs = gql`
    interface Tool {
        id: ID!
        used_by: Role!
    }
`
const resolvers = {
    Tool: {
        __resolveType(tool, context, info) {
            if (tool.developed_by) {
                return 'Software'
            }
            if (tool.new_or_used) {
                return 'Equipment'
            }
            return null
        }
    }
}
module.exports = {
    typeDefs: typeDefs,
    resolvers: resolvers
}

 

tools.js


3 ~ 6๋ฒˆ์งธ ์ค„์— ์œ„์™€ ๊ฐ™์ด ์ธํ„ฐํŽ˜์ด์Šค ํ˜•์‹์œผ๋กœ Tool์ด๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ id ๊ทธ๋ฆฌ๊ณ , used_by ํ•„๋“œ์™€ ํ•จ๊ป˜ ์„ ์–ธ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

tools.js


resolver(๋ฆฌ์กธ๋ฒ„) ํƒ€์ž…์€ givens์—์„œ ๋ณธ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด์—์š”.

์ด๋ ‡๊ฒŒ Tool์„ ์ •์˜ํ–ˆ์œผ๋‹ˆ ์ด๋ฅผ Equipment์™€ Supply๊ฐ€ ๊ฐ๊ฐ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์ •ํ•ด ๋ณผ๊ฒŒ์š”.

equipments.js

 

softwares.js


์œ„์™€ ๊ฐ™์ด implements Tool ์ด๋ผ๋Š” ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ์–ด์š”.

์ง€๊ธˆ ์ด ์ƒํƒœ๋Š” Equiqments์™€ Software๊ฐ€ Tool ์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ ์šฉํ•œ ์ƒํƒœ์—์š”.


์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ํ•˜๋ฉด ํ„ฐ๋ฏธ๋„์€ ๋‚œ๋ฆฌ๊ฐ€ ๋‚ฌ์„ ๊ฑฐ์—์š”.
์™œ๋ƒํ•˜๋ฉด Tool์— ๋Œ€ํ•ด Import ์‹œ์ผœ์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

index.js


index.js์— ์œ„์™€ ๊ฐ™์ด tools์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์„ ์–ธํ•ด ์ฃผ์—ˆ์–ด์š”.


์ด์ œ ํ„ฐ๋ฏธ๋„์€ ๋‹ค์‹œ ํ‰ํ™”๋ฅผ ์ฐพ๊ฒŒ ๋˜์—ˆ๊ณ ,

Playground

 

query {
  equipments {
    id
    used_by
    count
    new_or_used
  }
  
  softwares {
    id
    used_by
    description
    developed_by
  }
}


์œ„์™€ ๊ฐ™์ด Query๋ฅผ ๋‚ ๋ ค๋ณด๋ฉด

{
  "data": {
    "equipments": [
      {
        "id": "machanical keyboard",
        "used_by": "developer",
        "count": 24,
        "new_or_used": "used"
      },
      {
        "id": "pen tablet",
        "used_by": "designer",
        "count": 15,
        "new_or_used": "used"
      },
      {
        "id": "notebook",
        "used_by": "planner",
        "count": 37,
        "new_or_used": "new"
      },
      {
        "id": "ergonomic mouse",
        "used_by": "designer",
        "count": 31,
        "new_or_used": "used"
      },
      {
        "id": "dual monitor",
        "used_by": "developer",
        "count": 20,
        "new_or_used": "used"
      },
      {
        "id": "whiteboard",
        "used_by": "planner",
        "count": 12,
        "new_or_used": "used"
      },
      {
        "id": "sketchboard",
        "used_by": "designer",
        "count": 48,
        "new_or_used": "new"
      }
    ],
    "softwares": [
      {
        "id": "Eclipse",
        "used_by": "developer",
        "description": "integrated development environment",
        "developed_by": "Eclipse Foundation"
      },
      {
        "id": "Excel",
        "used_by": "planner",
        "description": "spreadsheet",
        "developed_by": "Microsoft"
      },
      {
        "id": "Illustrator",
        "used_by": "designer",
        "description": "vector graphics editor",
        "developed_by": "Adobe"
      },
      {
        "id": "Photoshop",
        "used_by": "designer",
        "description": "raster graphics editor",
        "developed_by": "Adobe"
      },
      {
        "id": "PowerPoint",
        "used_by": "planner",
        "description": "presentation program",
        "developed_by": "Microsoft"
      },
      {
        "id": "Sketch",
        "used_by": "designer",
        "description": "vector graphics editor",
        "developed_by": "Sketch B.V."
      },
      {
        "id": "VS Code",
        "used_by": "developer",
        "description": "source code editor",
        "developed_by": "Microsoft"
      },
      {
        "id": "Word",
        "used_by": "planner",
        "description": "word processor",
        "developed_by": "Microsoft"
      },
      {
        "id": "Xcode",
        "used_by": "developer",
        "description": "integrated development environment",
        "developed_by": "Apple"
      }
    ]
  }
}


์ด๋ ‡๊ฒŒ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
ํ™•์ธํ•ด๋ณด๋ฉด Equipments ๋ฐฐ์—ด ๊ฐ์ฒด์™€ Softwares ๋ฐฐ์—ด ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ด๋ฒˆ์—๋Š” People ์ด๋ผ๋Š” Query์— ์ ์šฉํ•ด ๋ณด๋ ค๊ณ  ํ•ด์š”.

people.js

 

_queries.js


11๋ฒˆ์งธ ์ค„๊ณผ ๊ฐ™์ด Root Query Type์— people์„ ์„ ์–ธํ•ด์ฃผ๊ณ , ๋ฐ˜ํ™˜๊ฐ’์€ People ๊ฐ์ฒด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๊ฒ ๋‹ค๊ณ  ์„ ์–ธํ•ด์ฃผ๊ณ ,

index.js


index.js์— people์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ ์„ ์–ธํ•ด์ฃผ์—ˆ์–ด์š”.


Playground


query {
  people {
    id
    first_name
    last_name
  	
    givens {
      __typename
      ... on Equipment {
        id
        used_by
        count
        new_or_used
      }
      
      ... on Supply {
        id
        team
      }
    }
    
    tools {
      __typename
      ... on Equipment {
        id
        used_by
        count
        new_or_used
      }
      
      ... on Software {
        id
        used_by
        description
        developed_by
      }
    }
  }
}


Playground์—์„œ ์œ„์™€ ๊ฐ™์ด Query๋ฅผ ๋‚ ๋ ค์ฃผ๋ฉด

{
  "data": {
    "people": [
      {
        "id": "1",
        "first_name": "Alex",
        "last_name": "Davidson",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "webcam",
            "team": 2
          },
          {
            "__typename": "Supply",
            "id": "hoodie",
            "team": 2
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "2",
        "first_name": "Lindsay",
        "last_name": "West",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "chair",
            "team": 3
          },
          {
            "__typename": "Supply",
            "id": "usb hub",
            "team": 3
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "3",
        "first_name": "Nathan",
        "last_name": "Jenkins",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "ergonomic mouse",
            "team": 1
          },
          {
            "__typename": "Supply",
            "id": "mug",
            "team": 1
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "4",
        "first_name": "Christine",
        "last_name": "Harris",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "headphone",
            "team": 4
          },
          {
            "__typename": "Supply",
            "id": "stempler",
            "team": 4
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "5",
        "first_name": "Page",
        "last_name": "Adams",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "webcam",
            "team": 2
          },
          {
            "__typename": "Supply",
            "id": "hoodie",
            "team": 2
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "6",
        "first_name": "Herbert",
        "last_name": "Ford",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "calculator",
            "team": 5
          },
          {
            "__typename": "Supply",
            "id": "t shirt",
            "team": 5
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "7",
        "first_name": "Dennis",
        "last_name": "Marshall",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "webcam",
            "team": 2
          },
          {
            "__typename": "Supply",
            "id": "hoodie",
            "team": 2
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "8",
        "first_name": "Isabella",
        "last_name": "Martin",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "ergonomic mouse",
            "team": 1
          },
          {
            "__typename": "Supply",
            "id": "mug",
            "team": 1
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "9",
        "first_name": "Alfred",
        "last_name": "Clarke",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "headphone",
            "team": 4
          },
          {
            "__typename": "Supply",
            "id": "stempler",
            "team": 4
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "10",
        "first_name": "Tyler",
        "last_name": "Philips",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "calculator",
            "team": 5
          },
          {
            "__typename": "Supply",
            "id": "t shirt",
            "team": 5
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "11",
        "first_name": "Noelle",
        "last_name": "Holmes",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "chair",
            "team": 3
          },
          {
            "__typename": "Supply",
            "id": "usb hub",
            "team": 3
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "12",
        "first_name": "Kate",
        "last_name": "Owen",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "ergonomic mouse",
            "team": 1
          },
          {
            "__typename": "Supply",
            "id": "mug",
            "team": 1
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "13",
        "first_name": "Priscilla",
        "last_name": "Walker",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "headphone",
            "team": 4
          },
          {
            "__typename": "Supply",
            "id": "stempler",
            "team": 4
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "14",
        "first_name": "Shirley",
        "last_name": "Grant",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "chair",
            "team": 3
          },
          {
            "__typename": "Supply",
            "id": "usb hub",
            "team": 3
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "15",
        "first_name": "Byron",
        "last_name": "Barnes",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "ergonomic mouse",
            "team": 1
          },
          {
            "__typename": "Supply",
            "id": "mug",
            "team": 1
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "16",
        "first_name": "Toby",
        "last_name": "Lewis",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "chair",
            "team": 3
          },
          {
            "__typename": "Supply",
            "id": "usb hub",
            "team": 3
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "17",
        "first_name": "Barbara",
        "last_name": "White",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "headphone",
            "team": 4
          },
          {
            "__typename": "Supply",
            "id": "stempler",
            "team": 4
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "18",
        "first_name": "Arnold",
        "last_name": "Armstrong",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "headphone",
            "team": 4
          },
          {
            "__typename": "Supply",
            "id": "stempler",
            "team": 4
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "19",
        "first_name": "Eleanor",
        "last_name": "Smith",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "webcam",
            "team": 2
          },
          {
            "__typename": "Supply",
            "id": "hoodie",
            "team": 2
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "20",
        "first_name": "Nina",
        "last_name": "Dawson",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "calculator",
            "team": 5
          },
          {
            "__typename": "Supply",
            "id": "t shirt",
            "team": 5
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "21",
        "first_name": "Jamie",
        "last_name": "Reynolds",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "chair",
            "team": 3
          },
          {
            "__typename": "Supply",
            "id": "usb hub",
            "team": 3
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "22",
        "first_name": "Myrtle",
        "last_name": "Hamilton",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "headphone",
            "team": 4
          },
          {
            "__typename": "Supply",
            "id": "stempler",
            "team": 4
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "23",
        "first_name": "Zelda",
        "last_name": "Hall",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "webcam",
            "team": 2
          },
          {
            "__typename": "Supply",
            "id": "hoodie",
            "team": 2
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "24",
        "first_name": "Edgar",
        "last_name": "Willson",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "headphone",
            "team": 4
          },
          {
            "__typename": "Supply",
            "id": "stempler",
            "team": 4
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "25",
        "first_name": "Brian",
        "last_name": "Hunt",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "ergonomic mouse",
            "team": 1
          },
          {
            "__typename": "Supply",
            "id": "mug",
            "team": 1
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "26",
        "first_name": "Naomi",
        "last_name": "Taylor",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "headphone",
            "team": 4
          },
          {
            "__typename": "Supply",
            "id": "stempler",
            "team": 4
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "27",
        "first_name": "Brooke",
        "last_name": "Evans",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "webcam",
            "team": 2
          },
          {
            "__typename": "Supply",
            "id": "hoodie",
            "team": 2
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "28",
        "first_name": "Katherine",
        "last_name": "Bennett",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "calculator",
            "team": 5
          },
          {
            "__typename": "Supply",
            "id": "t shirt",
            "team": 5
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "29",
        "first_name": "Violet",
        "last_name": "Pearson",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "ergonomic mouse",
            "team": 1
          },
          {
            "__typename": "Supply",
            "id": "mug",
            "team": 1
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "30",
        "first_name": "Margaret",
        "last_name": "Davies",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "calculator",
            "team": 5
          },
          {
            "__typename": "Supply",
            "id": "t shirt",
            "team": 5
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "31",
        "first_name": "Raymond",
        "last_name": "Cook",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "chair",
            "team": 3
          },
          {
            "__typename": "Supply",
            "id": "usb hub",
            "team": 3
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "32",
        "first_name": "Garth",
        "last_name": "Roberts",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "calculator",
            "team": 5
          },
          {
            "__typename": "Supply",
            "id": "t shirt",
            "team": 5
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "33",
        "first_name": "Victoria",
        "last_name": "Brown",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "webcam",
            "team": 2
          },
          {
            "__typename": "Supply",
            "id": "hoodie",
            "team": 2
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "34",
        "first_name": "Russel",
        "last_name": "Jones",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "chair",
            "team": 3
          },
          {
            "__typename": "Supply",
            "id": "usb hub",
            "team": 3
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "35",
        "first_name": "Sally",
        "last_name": "Fox",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "ergonomic mouse",
            "team": 1
          },
          {
            "__typename": "Supply",
            "id": "mug",
            "team": 1
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "36",
        "first_name": "Chloe",
        "last_name": "Bailey",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "headphone",
            "team": 4
          },
          {
            "__typename": "Supply",
            "id": "stempler",
            "team": 4
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "37",
        "first_name": "Will",
        "last_name": "McDonald",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "calculator",
            "team": 5
          },
          {
            "__typename": "Supply",
            "id": "t shirt",
            "team": 5
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "38",
        "first_name": "Grant",
        "last_name": "Cole",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "chair",
            "team": 3
          },
          {
            "__typename": "Supply",
            "id": "usb hub",
            "team": 3
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "39",
        "first_name": "Audrey",
        "last_name": "Fisher",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "calculator",
            "team": 5
          },
          {
            "__typename": "Supply",
            "id": "t shirt",
            "team": 5
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "40",
        "first_name": "Amber",
        "last_name": "Russel",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "chair",
            "team": 3
          },
          {
            "__typename": "Supply",
            "id": "usb hub",
            "team": 3
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "41",
        "first_name": "Peter",
        "last_name": "Payne",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "headphone",
            "team": 4
          },
          {
            "__typename": "Supply",
            "id": "stempler",
            "team": 4
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "42",
        "first_name": "Russ",
        "last_name": "Lawrence",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "ergonomic mouse",
            "team": 1
          },
          {
            "__typename": "Supply",
            "id": "mug",
            "team": 1
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "43",
        "first_name": "Margot",
        "last_name": "Watson",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "calculator",
            "team": 5
          },
          {
            "__typename": "Supply",
            "id": "t shirt",
            "team": 5
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "44",
        "first_name": "Nancy",
        "last_name": "Brooks",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "webcam",
            "team": 2
          },
          {
            "__typename": "Supply",
            "id": "hoodie",
            "team": 2
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "45",
        "first_name": "Oliver",
        "last_name": "Simpson",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "webcam",
            "team": 2
          },
          {
            "__typename": "Supply",
            "id": "hoodie",
            "team": 2
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "46",
        "first_name": "Pansy",
        "last_name": "Moore",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "chair",
            "team": 3
          },
          {
            "__typename": "Supply",
            "id": "usb hub",
            "team": 3
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      },
      {
        "id": "47",
        "first_name": "Leroy",
        "last_name": "Elliott",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "ergonomic mouse",
            "team": 1
          },
          {
            "__typename": "Supply",
            "id": "mug",
            "team": 1
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "48",
        "first_name": "Barbara",
        "last_name": "Murphy",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "calculator",
            "team": 5
          },
          {
            "__typename": "Supply",
            "id": "t shirt",
            "team": 5
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "machanical keyboard",
            "used_by": "developer",
            "count": 24,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "dual monitor",
            "used_by": "developer",
            "count": 20,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Eclipse",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Eclipse Foundation"
          },
          {
            "__typename": "Software",
            "id": "VS Code",
            "used_by": "developer",
            "description": "source code editor",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Xcode",
            "used_by": "developer",
            "description": "integrated development environment",
            "developed_by": "Apple"
          }
        ]
      },
      {
        "id": "49",
        "first_name": "Simon",
        "last_name": "Henderson",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Supply",
            "id": "webcam",
            "team": 2
          },
          {
            "__typename": "Supply",
            "id": "hoodie",
            "team": 2
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "pen tablet",
            "used_by": "designer",
            "count": 15,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "ergonomic mouse",
            "used_by": "designer",
            "count": 31,
            "new_or_used": "used"
          },
          {
            "__typename": "Equipment",
            "id": "sketchboard",
            "used_by": "designer",
            "count": 48,
            "new_or_used": "new"
          },
          {
            "__typename": "Software",
            "id": "Illustrator",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Photoshop",
            "used_by": "designer",
            "description": "raster graphics editor",
            "developed_by": "Adobe"
          },
          {
            "__typename": "Software",
            "id": "Sketch",
            "used_by": "designer",
            "description": "vector graphics editor",
            "developed_by": "Sketch B.V."
          }
        ]
      },
      {
        "id": "50",
        "first_name": "Ned",
        "last_name": "Butler",
        "givens": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Supply",
            "id": "ergonomic mouse",
            "team": 1
          },
          {
            "__typename": "Supply",
            "id": "mug",
            "team": 1
          }
        ],
        "tools": [
          {
            "__typename": "Equipment",
            "id": "notebook",
            "used_by": "planner",
            "count": 37,
            "new_or_used": "new"
          },
          {
            "__typename": "Equipment",
            "id": "whiteboard",
            "used_by": "planner",
            "count": 12,
            "new_or_used": "used"
          },
          {
            "__typename": "Software",
            "id": "Excel",
            "used_by": "planner",
            "description": "spreadsheet",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "PowerPoint",
            "used_by": "planner",
            "description": "presentation program",
            "developed_by": "Microsoft"
          },
          {
            "__typename": "Software",
            "id": "Word",
            "used_by": "planner",
            "description": "word processor",
            "developed_by": "Microsoft"
          }
        ]
      }
    ]
  }
}


์œ„์™€ ๊ฐ™์ด ๊ฒฐ๊ณผ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

people.js

 

_enums.js


People ์Šคํ‚ค๋งˆ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์„ฑ๋ณ„๊ณผ ํ˜ˆ์•กํ˜• ๋‘˜์€ ์—ด๊ฑฐํ˜•์— ์ƒˆ๋กœ ์ถ”๊ฐ€ ๋˜์–ด์žˆ๊ณ , 

์œ ๋‹ˆ์˜จ์œผ๋กœ ์ง€์ •๋œ tools๊ณผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ง€์ •๋œ givens๊ฐ€ ๊ฐ๊ฐ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜๋  ์ˆ˜ ์žˆ๋„๋ก ์Šคํ‚ค๋งˆ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”.

์ด์™€ ๊ฐ™์ด ํ•„๋“œ๊ฐ€ ๋งŽ๊ณ , ๋ณต์žกํ•œ ๊ฒฝ์šฐ์™€ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒƒ์ด ์œ ๋‹ˆ์˜จ๊ณผ ์ธํ„ฐํŽ˜์ด์Šค์—์š”.



 

        ๐Ÿ“ฆ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ž€?

๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ์ด๋ฏธ GraphQL ์ด์•ผ๊ธฐ ์ดˆ๋ฐ˜๋ถ€ํ„ฐ ์•Œ์•„๋ดค์—ˆ๊ณ , Mutation(๋ฎคํ…Œ์ด์…˜)์„ ๊ตฌํ˜„ํ•  ๋•Œ๋„ ์ด๋ฏธ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ–ˆ์–ด์š”.

peoples.js


์œ„ ์ฝ”๋“œ์—์„œ People์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” Query์˜ ๊ฒฝ์šฐ

_queries.js


11๋ฒˆ์งธ ์ค„์˜ ์š”์ฒญ์œผ๋กœ 

Playground


์œ„์™€ ๊ฐ™์ด Query๋ฅผ ๋‚ ๋ ค ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์˜ ์ •๋ณด๋ฅผ ๋‹ค ๋ฐ›์•„์˜ค๋„๋ก ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด์š”. 

Query๋ฅผ ๋‚ ๋ฆด ๋•Œ ์ผ์ • ์กฐ๊ฑด์„ ์ฃผ๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ๊ธฐ์ค€์— ๋งž๋Š” ์‚ฌ๋žŒ๋“ค๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ๊ตฌ์„ฑํ•ด ๋ณด๋ ค๊ณ  ํ•ด์š”.

_queries.js

        peopleFiltered (
            team: Int,
            sex: Sex,
            blood_type: BloodType,
            from: String
        ): [People]


์œ„์™€ ๊ฐ™์ด peopleFilter()๋ผ๋Š” Query๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์–ด์š”.

peopleFilter() ์•ˆ์—๋Š” ์—ฌ๋Ÿฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
์œ„ ๋‚ด์šฉ์€ team, sex, blood_type, from์— ๋”ฐ๋ผ ์กฐ๊ฑด์„ ๊ฑธ์–ด ํŠน์ • ์‚ฌ๋žŒ๋งŒ ๊ฐ€์ ธ์˜ค๋ ค๋Š” ๊ฒƒ์ด์—์š”.

people.js


๊ทธ๋ฆฌ๊ณ  ์œ„ 21๋ฒˆ์งธ ์ค„๊ณผ ๊ฐ™์ด ๋ฆฌ์กธ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ์–ด์š”.
๋ฐ›์€ args ๊ฐ์ฒด์— ๋”ฐ๋ผ ์‚ฌ๋žŒ๋“ค ์ •๋ณด๋ฅผ ํ•„ํ„ฐ๋ง ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์€ ์ด๋ฏธ dbWorks.js์— ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ์–ด์š”.

dbWorks.js

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

people.js


ํ•˜์ง€๋งŒ, people Query๋Š”

_queries.js


11๋ฒˆ์งธ ์ค„์—์„œ ๋ณด๋“ฏ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜ ํ˜•์‹์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ›์•„ ์˜ค๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์—†์–ด ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ด์šฉํ•  ์ˆ˜ ์—†์„ ๋ฟ์ด์—์š”.

_queries.js


peopleFiltered Query๋Š” ์œ„์™€ ๊ฐ™์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์€ ํ•จ์ˆ˜ ํ˜•์‹์œผ๋กœ ์ง€์ •๋œ๋Œ€๋กœ ๋งค๊ฐœ ๋ณ€์ˆ˜๋“ค์„ ๋ฐ›์•„ 

people.js


dbWorks ๊ฐ์ฒด์˜ getPeople()๋กœ ์ „๋‹ฌํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

Playground

 

query {
  peopleFiltered (
    team: 1
    blood_type: B
    from: "Texas"
  ) {
    id
    first_name
    last_name
    sex
    blood_type
    serve_years
    role
    team
    from
  }
}
๋ฐ˜์‘ํ˜•


์œ„์™€ ๊ฐ™์ด Query๋ฅผ ๋‚ ๋ ค๋ณด๋ฉด

{
  "data": {
    "peopleFiltered": [
      {
        "id": "3",
        "first_name": "Nathan",
        "last_name": "Jenkins",
        "sex": "male",
        "blood_type": "B",
        "serve_years": 1,
        "role": "planner",
        "team": "1",
        "from": "Texas"
      }
    ]
  }
}


์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

์œ„์—์„œ ์กฐ๊ฑด์„ ์ค€ ๋Œ€๋กœ 1ํŒ€์— ์†ํ•˜๊ณ , ํ˜ˆ์•กํ˜•์€ Bํ˜•์ด๊ณ , Texas ์ถœ์‹ ์˜ ์‚ฌ๋žŒ์ด ์กฐํšŒ๋œ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.


Playground

 

query {
  peopleFiltered (
    team: 1
    blood_type: B
  ) {
    id
    first_name
    last_name
    sex
    blood_type
    serve_years
    role
    team
    from
  }
}


์œ„์™€ ๊ฐ™์ด ์ถœ์‹ ์ง€๋ฅผ ์—†์•ค ๋’ค ๋‹ค์‹œ Query๋ฅผ ๋‚ ๋ ค๋ณด๋ฉด

{
  "data": {
    "peopleFiltered": [
      {
        "id": "3",
        "first_name": "Nathan",
        "last_name": "Jenkins",
        "sex": "male",
        "blood_type": "B",
        "serve_years": 1,
        "role": "planner",
        "team": "1",
        "from": "Texas"
      },
      {
        "id": "12",
        "first_name": "Kate",
        "last_name": "Owen",
        "sex": "female",
        "blood_type": "B",
        "serve_years": 2,
        "role": "developer",
        "team": "1",
        "from": "Maine"
      },
      {
        "id": "25",
        "first_name": "Brian",
        "last_name": "Hunt",
        "sex": "male",
        "blood_type": "B",
        "serve_years": 2,
        "role": "planner",
        "team": "1",
        "from": "Indiana"
      }
    ]
  }
}


์œ„์™€ ๊ฐ™์ด 1ํŒ€์— ์†ํ•˜๋Š” Bํ˜•์ธ ์‚ฌ๋žŒ๋“ค์ด 3๋ช… ์กฐํšŒ ๋˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

๋งŒ์•ฝ ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ณณ์—์„œ where ๋“ฑ์˜ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด ์ฃผ๋ฉด ๋  ๊ฒƒ์ด์—์š”.

์ฐธ๊ณ ๋กœ Query๋ฅผ ๋‚ ๋ฆด ๋•Œ, ์—ด๊ฑฐํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ์กฐํšŒํ•  ๊ฐ’์€ ""๋ฅผ ๋ถ™์ด๋ฉด ์•ˆ๋ผ์š”.


์ด๋ฒˆ์—๋Š” Paging(ํŽ˜์ด์ง•) ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ• ๊ฒŒ์š”.

_queries.js


_queries.js์— 18 ~ 21๋ฒˆ์งธ ์ค„์— ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋„๋ก ์„ ์–ธํ•ด ์ฃผ์—ˆ์–ด์š”.


people.js


๊ทธ๋Ÿฐ ๋’ค people.js 22๋ฒˆ์งธ ์ค„์— ์œ„์™€ ๊ฐ™์ด peoplePaginated()๋ฅผ ์„ ์–ธํ•ด ์ฃผ์—ˆ์–ด์š”.

ํ•ด๋‹น ๊ธฐ๋Šฅ ์—ญ์‹œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฏธ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ์–ด์š”.

dbWorks.js


์ด๋ ‡๊ฒŒ ํŽ˜์ด์ง• ์ €๋ฆฌ๋ฅผ ์œ„ํ•œ ๋‚ด์šฉ์ด ์ถ”๊ฐ€ ๋˜์–ด ์žˆ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.


Playground

 

query {
  peoplePaginated(page: 1, per_page: 7) {
    id
    first_name
    last_name
    sex
    blood_type
    serve_years
    role
    team
    from
  }
}


์œ„์™€ ๊ฐ™์ด Paging ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ page(ํ˜„์žฌ Page ๋ฒˆํ˜ธ)์™€ per_page(์กฐํšŒํ•  ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜)๋ฅผ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” Query๋ฅผ ๋‚ ๋ ค์ฃผ๋ฉด

{
  "data": {
    "peoplePaginated": [
      {
        "id": "1",
        "first_name": "Alex",
        "last_name": "Davidson",
        "sex": "male",
        "blood_type": "O",
        "serve_years": 2,
        "role": "developer",
        "team": "2",
        "from": "California"
      },
      {
        "id": "2",
        "first_name": "Lindsay",
        "last_name": "West",
        "sex": "female",
        "blood_type": "A",
        "serve_years": 3,
        "role": "designer",
        "team": "3",
        "from": "Arizona"
      },
      {
        "id": "3",
        "first_name": "Nathan",
        "last_name": "Jenkins",
        "sex": "male",
        "blood_type": "B",
        "serve_years": 1,
        "role": "planner",
        "team": "1",
        "from": "Texas"
      },
      {
        "id": "4",
        "first_name": "Christine",
        "last_name": "Harris",
        "sex": "female",
        "blood_type": "B",
        "serve_years": 2,
        "role": "developer",
        "team": "4",
        "from": "Ohio"
      },
      {
        "id": "5",
        "first_name": "Page",
        "last_name": "Adams",
        "sex": "female",
        "blood_type": "O",
        "serve_years": 5,
        "role": "developer",
        "team": "2",
        "from": "California"
      },
      {
        "id": "6",
        "first_name": "Herbert",
        "last_name": "Ford",
        "sex": "male",
        "blood_type": "A",
        "serve_years": 2,
        "role": "designer",
        "team": "5",
        "from": "Messachusetts"
      },
      {
        "id": "7",
        "first_name": "Dennis",
        "last_name": "Marshall",
        "sex": "male",
        "blood_type": "AB",
        "serve_years": 1,
        "role": "planner",
        "team": "2",
        "from": "Colorado"
      }
    ]
  }
}


์œ„์™€ ๊ฐ™์ด 1 ~ 7๋ฒˆ๊นŒ์ง€์˜ ID๋ฅผ ๊ฐ–์€ ์‚ฌ๋žŒ๋“ค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”.

query {
  peoplePaginated(page: 1, per_page: 10) {
    id
    first_name
    last_name
    sex
    blood_type
    serve_years
    role
    team
    from
  }
}


์œ„์™€ ๊ฐ™์ด 10๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋„๋ก ํ•˜๋ฉด

{
  "data": {
    "peoplePaginated": [
      {
        "id": "1",
        "first_name": "Alex",
        "last_name": "Davidson",
        "sex": "male",
        "blood_type": "O",
        "serve_years": 2,
        "role": "developer",
        "team": "2",
        "from": "California"
      },
      {
        "id": "2",
        "first_name": "Lindsay",
        "last_name": "West",
        "sex": "female",
        "blood_type": "A",
        "serve_years": 3,
        "role": "designer",
        "team": "3",
        "from": "Arizona"
      },
      {
        "id": "3",
        "first_name": "Nathan",
        "last_name": "Jenkins",
        "sex": "male",
        "blood_type": "B",
        "serve_years": 1,
        "role": "planner",
        "team": "1",
        "from": "Texas"
      },
      {
        "id": "4",
        "first_name": "Christine",
        "last_name": "Harris",
        "sex": "female",
        "blood_type": "B",
        "serve_years": 2,
        "role": "developer",
        "team": "4",
        "from": "Ohio"
      },
      {
        "id": "5",
        "first_name": "Page",
        "last_name": "Adams",
        "sex": "female",
        "blood_type": "O",
        "serve_years": 5,
        "role": "developer",
        "team": "2",
        "from": "California"
      },
      {
        "id": "6",
        "first_name": "Herbert",
        "last_name": "Ford",
        "sex": "male",
        "blood_type": "A",
        "serve_years": 2,
        "role": "designer",
        "team": "5",
        "from": "Messachusetts"
      },
      {
        "id": "7",
        "first_name": "Dennis",
        "last_name": "Marshall",
        "sex": "male",
        "blood_type": "AB",
        "serve_years": 1,
        "role": "planner",
        "team": "2",
        "from": "Colorado"
      },
      {
        "id": "8",
        "first_name": "Isabella",
        "last_name": "Martin",
        "sex": "female",
        "blood_type": "A",
        "serve_years": 3,
        "role": "developer",
        "team": "1",
        "from": "Georgia"
      },
      {
        "id": "9",
        "first_name": "Alfred",
        "last_name": "Clarke",
        "sex": "male",
        "blood_type": "AB",
        "serve_years": 4,
        "role": "designer",
        "team": "4",
        "from": "Pennsylvania"
      },
      {
        "id": "10",
        "first_name": "Tyler",
        "last_name": "Philips",
        "sex": "male",
        "blood_type": "O",
        "serve_years": 1,
        "role": "designer",
        "team": "5",
        "from": "Virginia"
      }
    ]
  }
}


1 ~ 10 ID๋ฅผ ๊ฐ–์€ ์‚ฌ๋žŒ๋“ค์ด ์กฐํšŒ๋˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ ,

query {
  peoplePaginated(page: 2, per_page: 10) {
    id
    first_name
    last_name
    sex
    blood_type
    serve_years
    role
    team
    from
  }
}


Page๋ฅผ 2 Page๋กœ ํ•˜์—ฌ ์กฐํšŒ ํ•ด๋ณด๋ฉด

{
  "data": {
    "peoplePaginated": [
      {
        "id": "11",
        "first_name": "Noelle",
        "last_name": "Holmes",
        "sex": "female",
        "blood_type": "AB",
        "serve_years": 5,
        "role": "planner",
        "team": "3",
        "from": "California"
      },
      {
        "id": "12",
        "first_name": "Kate",
        "last_name": "Owen",
        "sex": "female",
        "blood_type": "B",
        "serve_years": 2,
        "role": "developer",
        "team": "1",
        "from": "Maine"
      },
      {
        "id": "13",
        "first_name": "Priscilla",
        "last_name": "Walker",
        "sex": "female",
        "blood_type": "O",
        "serve_years": 2,
        "role": "developer",
        "team": "4",
        "from": "California"
      },
      {
        "id": "14",
        "first_name": "Shirley",
        "last_name": "Grant",
        "sex": "female",
        "blood_type": "AB",
        "serve_years": 1,
        "role": "developer",
        "team": "3",
        "from": "Messachusetts"
      },
      {
        "id": "15",
        "first_name": "Byron",
        "last_name": "Barnes",
        "sex": "male",
        "blood_type": "A",
        "serve_years": 3,
        "role": "designer",
        "team": "1",
        "from": "Idaho"
      },
      {
        "id": "16",
        "first_name": "Toby",
        "last_name": "Lewis",
        "sex": "male",
        "blood_type": "A",
        "serve_years": 1,
        "role": "planner",
        "team": "3",
        "from": "New York"
      },
      {
        "id": "17",
        "first_name": "Barbara",
        "last_name": "White",
        "sex": "female",
        "blood_type": "AB",
        "serve_years": 4,
        "role": "developer",
        "team": "4",
        "from": "Ohio"
      },
      {
        "id": "18",
        "first_name": "Arnold",
        "last_name": "Armstrong",
        "sex": "male",
        "blood_type": "AB",
        "serve_years": 5,
        "role": "designer",
        "team": "4",
        "from": "Nevada"
      },
      {
        "id": "19",
        "first_name": "Eleanor",
        "last_name": "Smith",
        "sex": "female",
        "blood_type": "B",
        "serve_years": 2,
        "role": "planner",
        "team": "2",
        "from": "Texas"
      },
      {
        "id": "20",
        "first_name": "Nina",
        "last_name": "Dawson",
        "sex": "female",
        "blood_type": "O",
        "serve_years": 1,
        "role": "developer",
        "team": "5",
        "from": "Virginia"
      }
    ]
  }
}


์œ„์™€ ๊ฐ™์ด 11 ~ 20์˜ ID๋ฅผ ๊ฐ–์€ ์‚ฌ๋žŒ๋“ค์ด ์กฐํšŒ๋˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

_queries.js

        peoplePaginated (
            team: Int,
            sex: Sex,
            blood_type: BloodType,
            from: String
            page: Int!,
            per_page: Int!
        ): [People]


์œ„์™€ ๊ฐ™์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ๋ฉด ์–ด๋–ป๊ฒŒ ํ™•์žฅ ํ™œ์šฉ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

Playground

 

query {
  peoplePaginated(
    team: 2,
    page: 1, 
    per_page: 3
  ) {
    id
    first_name
    last_name
    sex
    blood_type
    serve_years
    role
    team
    from
  }
}


์œ„์™€ ๊ฐ™์ด ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•ด์„œ ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

{
  "data": {
    "peoplePaginated": [
      {
        "id": "1",
        "first_name": "Alex",
        "last_name": "Davidson",
        "sex": "male",
        "blood_type": "O",
        "serve_years": 2,
        "role": "developer",
        "team": "2",
        "from": "California"
      },
      {
        "id": "5",
        "first_name": "Page",
        "last_name": "Adams",
        "sex": "female",
        "blood_type": "O",
        "serve_years": 5,
        "role": "developer",
        "team": "2",
        "from": "California"
      },
      {
        "id": "7",
        "first_name": "Dennis",
        "last_name": "Marshall",
        "sex": "male",
        "blood_type": "AB",
        "serve_years": 1,
        "role": "planner",
        "team": "2",
        "from": "Colorado"
      }
    ]
  }
}


team์ด 2์ธ ์‚ฌ๋žŒ๋“ค๋งŒ ๋ฝ‘์•„์„œ ์ฒซ๋ฒˆ์งธ ํŽ˜์ด์ง€์—์„œ 3 ์‚ฌ๋žŒ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฝ‘์•„์˜จ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ๊ณผ ํŽ˜์ด์ง• ๊ธฐ๋Šฅ์„ ํ•จ๊ป˜ ๋งŒ๋“ค์–ด ์ค„ ์ˆ˜ ์žˆ๊ฒ ์–ด์š”.

ํ•œ ๊ฐ€์ง€ ๊ฟ€ํŒ์„ ์ž‘์„ฑํ•ด ๋ณด์ž๋ฉด

Playground


์—ฌํƒœ๊ป ์šฐ๋ฆฌ๋Š” ์œ„์™€ ๊ฐ™์ด Query๋ฅผ ๋‚ ๋ ค ๋ฐ˜ํ™˜ ๋ฐ›๋Š” ๊ฒฐ๊ณผ๊ฐ’ ๊ฐ์ฒด ์ด๋ฆ„์„ Query ์ด๋ฆ„์œผ๋กœ ๋ฐ›์•„์™”์—ˆ์–ด์š”.

Playground


๊ทธ๋Ÿฐ๋ฐ ์œ„์™€ ๊ฐ™์ด ๋ณ„์นญ(Alias)๋ฅผ ์ง€์ •ํ•ด์„œ Query๋ฅผ ๋‚ ๋ฆฌ๊ณ , ๋ฐ˜ํ™˜ ๋ฐ›๋Š” ๊ฒฐ๊ณผ๊ฐ’ ์ด๋ฆ„์„ ํ•ด๋‹น ๋ณ„์นญ์œผ๋กœ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์–ด์š”.

์ด๊ฒŒ ํ•„์š”ํ•  ๋•Œ๋Š” ํ•œ ์š”์ฒญ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์˜ ๋ชฉ๋ก์„ ๋ฐ›์•„์˜ฌ ๋•Œ, ํŠน์ • ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋ฐ›์•„์˜ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š”๋ฐ,
์˜ˆ๋ฅผ ๋“ค๋ฉด Bํ˜•์˜ ์„ฑ๋ณ„์ด ๋‚จ์ž์ธ ์‚ฌ๋žŒ๋“ค์— ๋Œ€ํ•œ ๋ณ„์นญ์„ ๋‚˜์œ ๋‚จ์ž(์ฃผ๋‹ˆ๋Š” Bํ˜•์ด์—์š”.. ๐Ÿ˜ญ)๋ผ๊ณ  ๋ถ™ํ˜€์ฃผ๊ณ , 

Playground

 

query {
  badGuys: peopleFiltered (
    blood_type: B,
    sex: male
  ) {
    id
    first_name
    last_name
    sex
    blood_type
    serve_years
    role
    team
    from
  }
  
  newyorkers: peopleFiltered (
    from: "New York"
  ) {
    id
    first_name
    last_name
    sex
    blood_type
    serve_years
    role
    team
    from
  }
}


์œ„์™€ ๊ฐ™์ด Bํ˜•์ธ ๋‚จ์ž์™€ New york์—์„œ ์˜จ ์‚ฌ๋žŒ์„ ๊ฐ๊ฐ ์กฐํšŒํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ๋ณ„์นญ์„ ์ด์šฉํ•œ๋‹ค๋ฉด ์ง€์ •ํ•œ๋Œ€๋กœ ๊ตฌ๋ถ„๋œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋ผ์š”.

 

 

 

        ๐Ÿ“ฆ Input Type์ด๋ž€?

๋ฎคํ…Œ์ด์…˜์— ์—ฌ๋Ÿฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋‹ด์•„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑธ ์ด ์ „ ๊ธ€์—์„œ ์•Œ์•„๋ณด์•˜์—ˆ์–ด์š”.

people.js


์œ„์™€ ๊ฐ™์ด People ์Šคํ‚ค๋งˆ์ฒ˜๋Ÿผ ํ•„๋“œ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ

_mutations.js


๋ฎคํ…Œ์ด์…˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค์ด ์–ด๋งˆ์–ด๋งˆํ•˜๊ฒŒ ๋งŽ์•„์งˆ๊ฑฐ์—์š”.
์ด๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐ ํ•˜๊ธฐ ์œ„ํ•ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋“ค์„ ๋ฌถ์–ด ๋ณด๋‚ด๋Š”๊ฒŒ ๋ฐ”๋กœ Input Type์ด์—์š”.

people.js

 

    input PostPersonInput {
        team: ID!
        first_name: String!
        last_name: String!
        sex: Sex!
        blood_type: BloodType!
        serve_years: Int!
        role: Role!
        from: String!
    }


์œ„์™€ ๊ฐ™์ด PostPersonInput์ด๋ผ๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์–ด์š”.

์ฃผ๋ชฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์—ฌํƒœ ์„ ์–ธํ–ˆ๋˜ type๊ณผ๋Š” ๋‹ฌ๋ฆฌ input์ด๋ผ๋Š” ํ˜•์‹์„ ์„ ์–ธํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด์—์š”.

people.js

    Mutation: {
        postPerson: (parent, args) => dbWorks.postPerson(args),
    }


๊ทธ๋Ÿฐ ๋’ค ์œ„์™€ ๊ฐ™์ด ๋ฎคํ…Œ์ด์…˜์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ , postPerson()์„ ์„ ์–ธํ•ด ์ฃผ์—ˆ์–ด์š”.
ํ˜„์žฌ ํ•ด๋‹น ๋ฎคํ…Œ์ด์…˜์€ args ๊ฐ์ฒด์— ์–ด๋–ค ๊ฒƒ์ด ๋“ค์–ด๊ฐ”๋Š”์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†์–ด์š”.
์™œ๋ƒํ•˜๋ฉด ์Šคํ‚ค๋งˆ์— ์ž‘์„ฑ๋˜์ง€ ์•Š์€ ๋ฎคํ…Œ์ด์…˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ํ„ฐ๋ฏธ๋„์€ ๋‚œ๋ฆฌ๊ฐ€ ๋‚ฌ์„๊ฑฐ์—์š”.

 

_mutations.js


_nutations.js์— 7๋ฒˆ์งธ ์ค„๊ณผ ๊ฐ™์ด PostPerson()์„ ์„ ์–ธํ•ด ์ฃผ์—ˆ์–ด์š”.
์ด ๋•Œ, ๋ฐ˜ํ™˜๊ฐ’์€ People ๊ฐ์ฒด์ธ๋ฐ, Null์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก ์„ ์–ธํ•ด ์ฃผ์—ˆ์–ด์š”.

people.js


postPerson()์€ input์ด๋ผ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ, people.js์˜ input PostPersonInput ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ์นœ๊ตฌ์—์š”.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฎคํ…Œ์ด์…˜์ด ํ•œ ์ค„๋กœ ๊น”๋”ํ•˜๊ฒŒ ๋๋‚œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”.

Playground

 

mutation {
  postPerson(input: {
    first_name: "Juny"
    last_name: "H"
    sex: male
    blood_type: B
    serve_years: 10
    role: developer
    team: 1
    from: "Seoul"
  }) {
    id
    first_name
    last_name
    sex
    blood_type
    role
    team
    from
  }
}


์œ„์™€ ๊ฐ™์ด Query๋ฅผ ๋‚ ๋ ค ๋ฐ์ดํ„ฐ ์ €์žฅ ์š”์ฒญ์„ ๋ณด๋‚ด๋ณด๋ฉด
์ด ๋•Œ, postPerson()์— ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ input์„ ๋„ฃ์–ด์ฃผ๋Š”๋ฐ, ์ด ๋•Œ, ๊ฐ์ฒด๋กœ {} ์•ˆ์— ์ •๋ณด๋ฅผ ๋‹ด์•„ 

people.js


์œ„ input ํ˜•์‹์œผ๋กœ ์„œ๋ฒ„์— Create ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

{
  "data": {
    "postPerson": {
      "id": "51",
      "first_name": "Juny",
      "last_name": "H",
      "sex": "male",
      "blood_type": "B",
      "role": "developer",
      "team": "1",
      "from": "Seoul"
    }
  }
}


์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ๋ฐ˜ํ™˜ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”.

์ง€๊ธˆ๊นŒ์ง€ Apollo Server๋ฅผ ์ด์šฉํ•˜์—ฌ GraphQL๊ณผ Node.js๋ฅผ ์ด์šฉํ•˜์—ฌ Backend ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์–ด์š”.


 

 

 

GraphQL๊ณผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ์›น ์„œ๋น„์Šค:์„ค๊ณ„๋ถ€ํ„ฐ ๊ฐœ๋ฐœ·๋ฐฐํฌ๊นŒ์ง€ ๋”ฐ๋ผ ํ•˜๋ฉฐ ์™„์„ฑํ•˜๋Š” ์›น ํ’€

COUPANG

www.coupang.com

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

 

๐Ÿง ์ฐธ๊ณ  ์ž๋ฃŒ

ํ•ด๋‹น ๋‚ด์šฉ์€ ์•„๋ž˜ ๊ฐ•์˜๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž„์„ ์•Œ๋ ค ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

[๋ฌด๋ฃŒ] ์–„ํŒํ•œ GraphQL๊ณผ Apollo - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

โšก ์งง๊ณ  ๊ตต์€ ์ „์ฒด 90๋ถ„ ๊ฐ•์ขŒ! ์‚ฌ์ดํŠธ์˜ ์ฝ”๋“œ๋“ค์„ ๋ณต๋ถ™ํ•˜๋ฉฐ ๋น ๋ฅด๊ฒŒ GraphQL์„ ๋ฐฐ์šฐ๊ณ  ์•„ํด๋กœ ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ์„ธ์š”., โฑ ์—ฌ๋Ÿฌ๋ถ„์˜ ์‹œ๊ฐ„์€ ์†Œ์ค‘ํ•ฉ๋‹ˆ๋‹ค. [์‚ฌ์ง„] ๐ŸŽข  GraphQL์ด ๋ญ”๊ฐ€์š”? ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”

www.inflearn.com

 

 

 

 

์นด์นด์˜คํŽ˜์ด | ๋งˆ์Œ ๋†“๊ณ  ๊ธˆ์œตํ•˜๋‹ค

์—ฌ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ ๋งํฌ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

qr.kakaopay.com

 

 

 

728x90
๋ฐ˜์‘ํ˜•