{"id":2002,"date":"2024-10-03T13:11:51","date_gmt":"2024-10-03T04:11:51","guid":{"rendered":"https:\/\/hyunsu.com\/wordpress\/?p=2002"},"modified":"2024-10-03T13:11:51","modified_gmt":"2024-10-03T04:11:51","slug":"graphql%ec%9d%98-%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4-%ec%97%b0%eb%8f%99","status":"publish","type":"post","link":"https:\/\/hyunsu.com\/wordpress\/?p=2002","title":{"rendered":"GraphQL\uc758 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9"},"content":{"rendered":"\n<p>\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640\uc758 \uc5f0\ub3d9\uc740 GraphQL\uc758 \ub9ac\uc878\ubc84\uc5d0\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc774\ub8e8\uc5b4\uc9d1\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 GraphQL \ucffc\ub9ac\ub098 \ubba4\ud14c\uc774\uc158\uc744 \ud1b5\ud574 \ub370\uc774\ud130\ub97c \uc694\uccad\ud558\uac70\ub098 \uc218\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubc88\uc5d0\ub294 <strong>Node.js \ud658\uacbd<\/strong>\uc5d0\uc11c <strong>MongoDB<\/strong>\ub098 <strong>PostgreSQL<\/strong> \uac19\uc740 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 GraphQL\uc744 \uc5f0\ub3d9\ud558\ub294 \ubc29\ubc95\uc744 \uc608\uc2dc\ub85c \uc124\uba85\ud560\uac8c\uc694.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. GraphQL \uc11c\ubc84\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9 \uae30\ubcf8 \uac1c\ub150<\/strong><\/h3>\n\n\n\n<p>GraphQL \uc11c\ubc84\ub294 \ub370\uc774\ud130 \uc694\uccad\uc744 \ucc98\ub9ac\ud560 \ub54c **\ub9ac\uc878\ubc84(Resolver)**\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub9ac\uc878\ubc84\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc694\uccad\uc744 \ubc1b\uc544 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc9c8\uc758(query)\ud558\uac70\ub098, \ub370\uc774\ud130\ub97c \uc218\uc815\ud558\ub294 \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\uae30\ubcf8 \ud750\ub984:<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\ud074\ub77c\uc774\uc5b8\ud2b8<\/strong>\ub294 GraphQL \ucffc\ub9ac\ub098 \ubba4\ud14c\uc774\uc158\uc744 \uc11c\ubc84\uc5d0 \ubcf4\ub0c5\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>GraphQL \uc11c\ubc84<\/strong>\uc758 \ub9ac\uc878\ubc84\ub294 \ud574\ub2f9 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uace0, \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc5f0\uacb0\ud574 \ub370\uc774\ud130\ub97c \uc870\ud68c\ud558\uac70\ub098 \ubcc0\uacbd\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\ub370\uc774\ud130\ubca0\uc774\uc2a4<\/strong>\ub294 \ub9ac\uc878\ubc84\uc758 \uc694\uccad\uc5d0 \ub530\ub77c \ub370\uc774\ud130\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\uc11c\ubc84<\/strong>\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc694\uccad\ud55c \ub370\uc774\ud130\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. MongoDB\uc640\uc758 \uc5f0\ub3d9<\/strong><\/h3>\n\n\n\n<p>MongoDB\ub294 <strong>NoSQL<\/strong> \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc911 \ud558\ub098\ub85c, JavaScript \uac1d\uccb4\ucc98\ub7fc \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\ub294 \uc720\uc5f0\ud55c \uad6c\uc870\ub97c \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4. <strong>Mongoose<\/strong>\ub77c\ub294 ORM(Object Relational Mapping)\uc744 \ud1b5\ud574 Node.js\uc640 \uc27d\uac8c \uc5f0\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1) \ud658\uacbd \uc124\uc815<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\ud328\ud0a4\uc9c0 \uc124\uce58<\/strong>:bash\ucf54\ub4dc \ubcf5\uc0ac<code>npm install mongoose npm install graphql express express-graphql<\/code><\/li>\n\n\n\n<li><strong>MongoDB\uc640 \uc5f0\uacb0 \uc124\uc815<\/strong>: \uba3c\uc800 MongoDB\uc5d0 \uc5f0\uacb0\ud558\uace0, Mongoose\ub97c \uc774\uc6a9\ud574 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\ub294 \uac04\ub2e8\ud55c \uc608\uc81c\ub97c \uc791\uc131\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>const mongoose = require('mongoose');<br>const express = require('express');<br>const { graphqlHTTP } = require('express-graphql');<br>const { buildSchema } = require('graphql');<br><br>\/\/ MongoDB \uc5f0\uacb0<br>mongoose.connect('mongodb:\/\/localhost:27017\/mydatabase', {<br>  useNewUrlParser: true,<br>  useUnifiedTopology: true<br>});<br><br>\/\/ Mongoose \uc2a4\ud0a4\ub9c8 \uc815\uc758<br>const userSchema = new mongoose.Schema({<br>  name: String,<br>  email: String<br>});<br><br>const User = mongoose.model('User', userSchema);<br><br>\/\/ GraphQL \uc2a4\ud0a4\ub9c8 \uc815\uc758<br>const schema = buildSchema(`<br>  type User {<br>    id: ID!<br>    name: String!<br>    email: String!<br>  }<br><br>  type Query {<br>    users: [User]<br>    user(id: ID!): User<br>  }<br><br>  type Mutation {<br>    addUser(name: String!, email: String!): User<br>  }<br>`);<br><br>\/\/ GraphQL \ub9ac\uc878\ubc84 \uc815\uc758<br>const root = {<br>  users: async () => {<br>    return await User.find();<br>  },<br>  user: async ({ id }) => {<br>    return await User.findById(id);<br>  },<br>  addUser: async ({ name, email }) => {<br>    const newUser = new User({ name, email });<br>    await newUser.save();<br>    return newUser;<br>  }<br>};<br><br>\/\/ Express \uc124\uc815<br>const app = express();<br>app.use('\/graphql', graphqlHTTP({<br>  schema: schema,<br>  rootValue: root,<br>  graphiql: true<br>}));<br><br>app.listen(4000, () => {<br>  console.log('Server is running on http:\/\/localhost:4000\/graphql');<br>});<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2) \uc124\uba85<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mongoose \uc2a4\ud0a4\ub9c8<\/strong>: <code>userSchema<\/code>\ub294 MongoDB\uc5d0 \uc800\uc7a5\ub420 \uc0ac\uc6a9\uc790\uc758 \uad6c\uc870\ub97c \uc815\uc758\ud569\ub2c8\ub2e4. \uc774\ub984\uacfc \uc774\uba54\uc77c\uc744 \ud544\ub4dc\ub85c \uac00\uc9c0\ub294 \uc0ac\uc6a9\uc790 \ub370\uc774\ud130\ub97c \uc815\uc758\ud558\uc600\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\ub9ac\uc878\ubc84<\/strong>: <code>users<\/code> \ub9ac\uc878\ubc84\ub294 \ubaa8\ub4e0 \uc0ac\uc6a9\uc790 \ubaa9\ub85d\uc744 \ubc18\ud658\ud558\uace0, <code>addUser<\/code>\ub294 \uc0c8\ub85c\uc6b4 \uc0ac\uc6a9\uc790\ub97c \ucd94\uac00\ud55c \ud6c4 \ud574\ub2f9 \ub370\uc774\ud130\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>MongoDB\uc640 \uc5f0\ub3d9<\/strong>: \ub9ac\uc878\ubc84\uc5d0\uc11c Mongoose\uc758 <code>find()<\/code>\ub098 <code>findById()<\/code>\uc640 \uac19\uc740 \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud574 \ub370\uc774\ud130\ub97c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uc870\ud68c\ud558\uace0, <code>save()<\/code>\ub85c \uc0c8 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3) \uc2e4\ud589 \ubc0f \ud14c\uc2a4\ud2b8<\/strong><\/h4>\n\n\n\n<p>\uc11c\ubc84\ub97c \uc2e4\ud589\ud558\uace0 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c <code>http:\/\/localhost:4000\/graphql<\/code>\uc5d0 \uc811\uc18d\ud558\uba74 GraphiQL\uc744 \ud1b5\ud574 \ub370\uc774\ud130\ub97c \uc870\ud68c\ud558\uac70\ub098 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc608\ub97c \ub4e4\uc5b4, \uc0ac\uc6a9\uc790 \ubaa9\ub85d\uc744 \uac00\uc838\uc624\ub294 \ucffc\ub9ac:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>query {<br>  users {<br>    id<br>    name<br>    email<br>  }<br>}<br><\/code><\/pre>\n\n\n\n<p>\uc0c8\ub85c\uc6b4 \uc0ac\uc6a9\uc790\ub97c \ucd94\uac00\ud558\ub294 \ubba4\ud14c\uc774\uc158:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>mutation {<br>  addUser(name: \"Alice\", email: \"alice@example.com\") {<br>    id<br>    name<br>    email<br>  }<br>}<br><\/code><\/pre>\n\n\n\n<p>\uc774\ub807\uac8c \ud558\uba74 MongoDB\uc5d0 \ub370\uc774\ud130\uac00 \uc800\uc7a5\ub418\uace0, \uc870\ud68c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. PostgreSQL\uacfc\uc758 \uc5f0\ub3d9<\/strong><\/h3>\n\n\n\n<p><strong>PostgreSQL<\/strong>\uc740 <strong>SQL<\/strong> \uae30\ubc18\uc758 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc785\ub2c8\ub2e4. <strong>Sequelize<\/strong>\ub77c\ub294 ORM\uc744 \uc0ac\uc6a9\ud558\uc5ec Node.js\uc640 PostgreSQL\uc744 \uc27d\uac8c \uc5f0\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1) \ud658\uacbd \uc124\uc815<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\ud328\ud0a4\uc9c0 \uc124\uce58<\/strong>:<br><code>npm install sequelize pg pg-hstore npm install graphql express express-graphql<\/code><br><\/li>\n\n\n\n<li><strong>PostgreSQL\uacfc \uc5f0\uacb0 \uc124\uc815<\/strong>: PostgreSQL\uc5d0 \uc5f0\uacb0\ud55c \ud6c4, Sequelize\ub97c \uc774\uc6a9\ud574 \ud14c\uc774\ube14\uacfc \ubaa8\ub378\uc744 \uc815\uc758\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>const { Sequelize, DataTypes } = require('sequelize');<br>const express = require('express');<br>const { graphqlHTTP } = require('express-graphql');<br>const { buildSchema } = require('graphql');<br><br>\/\/ PostgreSQL \uc5f0\uacb0<br>const sequelize = new Sequelize('postgres:\/\/username:password@localhost:5432\/mydatabase');<br><br>\/\/ Sequelize \ubaa8\ub378 \uc815\uc758<br>const User = sequelize.define('User', {<br>  name: {<br>    type: DataTypes.STRING,<br>    allowNull: false<br>  },<br>  email: {<br>    type: DataTypes.STRING,<br>    allowNull: false<br>  }<br>}, {});<br><br>\/\/ \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ucd08\uae30\ud654<br>sequelize.sync();<br><br>\/\/ GraphQL \uc2a4\ud0a4\ub9c8 \uc815\uc758<br>const schema = buildSchema(`<br>  type User {<br>    id: ID!<br>    name: String!<br>    email: String!<br>  }<br><br>  type Query {<br>    users: [User]<br>    user(id: ID!): User<br>  }<br><br>  type Mutation {<br>    addUser(name: String!, email: String!): User<br>  }<br>`);<br><br>\/\/ GraphQL \ub9ac\uc878\ubc84 \uc815\uc758<br>const root = {<br>  users: async () => {<br>    return await User.findAll();<br>  },<br>  user: async ({ id }) => {<br>    return await User.findByPk(id);<br>  },<br>  addUser: async ({ name, email }) => {<br>    return await User.create({ name, email });<br>  }<br>};<br><br>\/\/ Express \uc124\uc815<br>const app = express();<br>app.use('\/graphql', graphqlHTTP({<br>  schema: schema,<br>  rootValue: root,<br>  graphiql: true<br>}));<br><br>app.listen(4000, () => {<br>  console.log('Server is running on http:\/\/localhost:4000\/graphql');<br>});<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2) \uc124\uba85<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sequelize \ubaa8\ub378<\/strong>: <code>User<\/code> \ubaa8\ub378\uc740 PostgreSQL\uc758 <code>users<\/code> \ud14c\uc774\ube14\uacfc \uc5f0\ub3d9\ub429\ub2c8\ub2e4. \uac01 \uc0ac\uc6a9\uc790\ub294 <code>name<\/code>\uacfc <code>email<\/code> \ud544\ub4dc\ub97c \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\ub9ac\uc878\ubc84<\/strong>: <code>users<\/code> \ub9ac\uc878\ubc84\ub294 \ubaa8\ub4e0 \uc0ac\uc6a9\uc790 \ubaa9\ub85d\uc744 \ubc18\ud658\ud558\uace0, <code>addUser<\/code> \ub9ac\uc878\ubc84\ub294 \uc0c8\ub85c\uc6b4 \uc0ac\uc6a9\uc790\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>PostgreSQL \uc5f0\ub3d9<\/strong>: \ub9ac\uc878\ubc84\uc5d0\uc11c Sequelize\uc758 <code>findAll()<\/code>, <code>findByPk()<\/code> \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud574 \ub370\uc774\ud130\ub97c \uc870\ud68c\ud558\uace0, <code>create()<\/code>\ub97c \uc0ac\uc6a9\ud574 \uc0c8 \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3) \uc2e4\ud589 \ubc0f \ud14c\uc2a4\ud2b8<\/strong><\/h4>\n\n\n\n<p>\uc11c\ubc84\ub97c \uc2e4\ud589\ud558\uace0 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c GraphiQL\uc744 \ud1b5\ud574 \ub370\uc774\ud130\ub97c \uc870\ud68c\ud558\uac70\ub098 \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\uc2dc\ub294 MongoDB\uc640 \ub3d9\uc77c\ud558\uac8c \ucffc\ub9ac\ub098 \ubba4\ud14c\uc774\uc158\uc744 \uc2e4\ud589\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc120\ud0dd \ubc0f \uc5f0\ub3d9\uc758 \uc8fc\uc694 \ud3ec\uc778\ud2b8<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1) \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc120\ud0dd<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MongoDB<\/strong>: \ub370\uc774\ud130 \uad6c\uc870\uac00 \uc790\uc8fc \ubc14\ub00c\uac70\ub098, \ube44\uc815\ud615 \ub370\uc774\ud130\ub97c \ub2e4\ub8f0 \ub54c NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc778 MongoDB\uac00 \uc720\ub9ac\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>PostgreSQL<\/strong>: \ub370\uc774\ud130 \uad6c\uc870\uac00 \uace0\uc815\uc801\uc774\uac70\ub098 \uad00\uacc4\ud615 \ub370\uc774\ud130\uac00 \ud544\uc694\ud560 \uacbd\uc6b0, SQL \uae30\ubc18\uc758 PostgreSQL\uc774 \uc801\ud569\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2) GraphQL\uacfc\uc758 \uc5f0\ub3d9<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GraphQL\uc740 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub3c5\ub9bd\uc801\uc778 \ucffc\ub9ac \uc5b8\uc5b4\uc785\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ub370\uc774\ud130\ub97c \uac00\uc838\uc624\uac70\ub098 \uc218\uc815\ud560 \ub54c, GraphQL \uc790\uccb4\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \uc885\ub958\uc5d0 \uc0c1\uad00\uc5c6\uc774 \uc0ac\uc6a9\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uac01 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \uc5f0\ub3d9\ud560 \ub54c, \uc801\uc808\ud55c ORM\uc774\ub098 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc5ec GraphQL\uc758 \ub9ac\uc878\ubc84\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uac04\uc758 \uc5f0\uacb0\uc744 \ucc98\ub9ac\ud558\uba74 \ub429\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640\uc758 \uc5f0\ub3d9\uc740 GraphQL\uc758 \ub9ac\uc878\ubc84\uc5d0\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc774\ub8e8\uc5b4\uc9d1\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 GraphQL \ucffc\ub9ac\ub098 \ubba4\ud14c\uc774\uc158\uc744 \ud1b5\ud574 \ub370\uc774\ud130\ub97c \uc694\uccad\ud558\uac70\ub098 \uc218\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubc88\uc5d0\ub294 Node.js \ud658\uacbd\uc5d0\uc11c MongoDB\ub098 PostgreSQL \uac19\uc740 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 GraphQL\uc744 \uc5f0\ub3d9\ud558\ub294 \ubc29\ubc95\uc744 \uc608\uc2dc\ub85c \uc124\uba85\ud560\uac8c\uc694. 1. GraphQL \uc11c\ubc84\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9 \uae30\ubcf8 \uac1c\ub150 GraphQL \uc11c\ubc84\ub294 \ub370\uc774\ud130 \uc694\uccad\uc744 \ucc98\ub9ac\ud560 \ub54c **\ub9ac\uc878\ubc84(Resolver)**\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ub9ac\uc878\ubc84\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc694\uccad\uc744 \ubc1b\uc544 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc9c8\uc758(query)\ud558\uac70\ub098, \ub370\uc774\ud130\ub97c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[],"class_list":["post-2002","post","type-post","status-publish","format-standard","hentry","category-coding"],"_links":{"self":[{"href":"https:\/\/hyunsu.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2002","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hyunsu.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hyunsu.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hyunsu.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hyunsu.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2002"}],"version-history":[{"count":1,"href":"https:\/\/hyunsu.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2002\/revisions"}],"predecessor-version":[{"id":2003,"href":"https:\/\/hyunsu.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2002\/revisions\/2003"}],"wp:attachment":[{"href":"https:\/\/hyunsu.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hyunsu.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hyunsu.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}