๐Ÿš€ ๊ทธ๋ž˜ํ”„ํ์—˜ ์„œ๋ฒ„ ๊ตฌ์ถ•: ์•„ํด๋กœ vs ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ ๋Œ€๊ฒฉ๋Œ! ๐ŸฅŠ

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿš€ ๊ทธ๋ž˜ํ”„ํ์—˜ ์„œ๋ฒ„ ๊ตฌ์ถ•: ์•„ํด๋กœ vs ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ ๋Œ€๊ฒฉ๋Œ! ๐ŸฅŠ

 

 

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐœ๋ฐœ์ž ์—ฌ๋Ÿฌ๋ถ„! ์˜ค๋Š˜์€ ์ •๋ง ํ•ซํ•œ ์ฃผ์ œ๋กœ ์ฐพ์•„์™”์–ด์š”. ๋ฐ”๋กœ ๊ทธ๋ž˜ํ”„ํ์—˜(GraphQL) ์„œ๋ฒ„ ๊ตฌ์ถ•์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ์ธ๋ฐ์š”. ํŠนํžˆ ์•„ํด๋กœ(Apollo)์™€ ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜(Express GraphQL)์„ ๋น„๊ตํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”. ์ด ๋‘ ๋…€์„, ์–ด๋–ค ๊ฒŒ ๋” ์ฉ”๊นŒ์š”? ๊ฐ™์ด ํŒŒํ—ค์ณ๋ด์š”! ๐Ÿ•ต๏ธโ€โ™‚๏ธ

์ž ๊น! ํ˜น์‹œ ๊ทธ๋ž˜ํ”„ํ์—˜์ด ๋ญ”์ง€ ๋ชจ๋ฅด๋Š” ๋ถ„๋“ค๋„ ๊ณ„์‹ค ๊ฒƒ ๊ฐ™์•„์š”. ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, GraphQL์€ API๋ฅผ ์œ„ํ•œ ์ฟผ๋ฆฌ ์–ธ์–ด์˜ˆ์š”. REST API์˜ ๋Œ€์•ˆ์œผ๋กœ ๋– ์˜ค๋ฅด๊ณ  ์žˆ์ฃ . ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํžˆ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์–ด์„œ ํšจ์œจ์ ์ด์—์š”. ๐Ÿ‘

์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์•„ํด๋กœ์™€ ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์„ ๋น„๊ตํ•ด๋ณผ๊นŒ์š”? ๋‘ ๋…€์„ ๋‹ค ๊ทธ๋ž˜ํ”„ํ์—˜ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ๋“ค์ด์—์š”. ๊ทผ๋ฐ ์–ด๋–ค ๊ฒŒ ๋” ์ข‹์„๊นŒ์š”? ๐Ÿค”

1. ์•„ํด๋กœ (Apollo) ์†Œ๊ฐœ ๐ŸŒŸ

์•„ํด๋กœ๋Š” ๊ทธ๋ž˜ํ”„ํ์—˜์˜ ์Šˆํผ์Šคํƒ€๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์™„์ „ ํ•ซํ•ด์š”! ๐Ÿ”ฅ ์•„ํด๋กœ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์ข…ํ•ฉ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ด์š”. ํŠนํžˆ ์•„ํด๋กœ ์„œ๋ฒ„๋Š” Node.js ํ™˜๊ฒฝ์—์„œ ๊ทธ๋ž˜ํ”„ํ์—˜ API๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”.

์•„ํด๋กœ์˜ ์žฅ์ :

  • ์‰ฌ์šด ์„ค์ •๊ณผ ์‚ฌ์šฉ ๐Ÿ‘Œ
  • ๊ฐ•๋ ฅํ•œ ์บ์‹ฑ ๊ธฐ๋Šฅ ๐Ÿ’ช
  • ์‹ค์‹œ๊ฐ„ ๊ตฌ๋… ์ง€์› ๐Ÿ””
  • ์Šคํ‚ค๋งˆ ์Šคํ‹ฐ์นญ๊ณผ federation ๊ธฐ๋Šฅ ๐Ÿงฉ
  • ํ’๋ถ€ํ•œ ์ƒํƒœ๊ณ„์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๐Ÿ‘ฅ

์•„ํด๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •๋ง ํŽธํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์„ ๋งŒ๋“ ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ด์š”. ์‚ฌ์šฉ์ž ํ”„๋กœํ•„, ์žฌ๋Šฅ ๋ชฉ๋ก, ๋ฆฌ๋ทฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์ฃ . ์•„ํด๋กœ์˜ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์–ด์š”. ์™„์ „ ๊ฟ€์ด์ฃ ? ๐Ÿฏ

์•„ํด๋กœ ์„œ๋ฒ„ ๊ตฌ์ถ• ์˜ˆ์‹œ

์•„ํด๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฑด ์ƒ๊ฐ๋ณด๋‹ค ์‰ฌ์›Œ์š”. ์ฝ”๋“œ๋กœ ํ•œ๋ฒˆ ๋ณผ๊นŒ์š”?


const { ApolloServer, gql } = require('apollo-server');

// ์Šคํ‚ค๋งˆ ์ •์˜
const typeDefs = gql`
  type Query {
    hello: String
  }
`;

// ๋ฆฌ์กธ๋ฒ„ ์ •์˜
const resolvers = {
  Query: {
    hello: () => 'Hello world!',
  },
};

// ์„œ๋ฒ„ ์ƒ์„ฑ
const server = new ApolloServer({ typeDefs, resolvers });

// ์„œ๋ฒ„ ์‹œ์ž‘
server.listen().then(({ url }) => {
  console.log(`๐Ÿš€ Server ready at ${url}`);
});

์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ์•„ํด๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์™„์ „ ์‰ฝ์ฃ ? ๐Ÿ˜Ž

2. ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ (Express GraphQL) ์†Œ๊ฐœ ๐Ÿš‚

์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์€ Express.js ์›น ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๋ฏธ๋“ค์›จ์–ด์˜ˆ์š”. Express๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ต์ˆ™ํ•  ๊ฑฐ์˜ˆ์š”. ๊ทธ๋ž˜ํ”„ํ์—˜์„ Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์ฃ .

์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์˜ ์žฅ์ :

  • Express์™€์˜ ์™„๋ฒฝํ•œ ํ†ตํ•ฉ ๐Ÿค
  • ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ์„ฑ๋Šฅ ๐Ÿƒโ€โ™‚๏ธ
  • ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์˜ ์ž์œ ๋กœ์›€ ๐ŸŽจ
  • ๊ธฐ์กด Express ํ”„๋กœ์ ํŠธ์— ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ โž•

์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด์˜ Express ์ง€์‹์„ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ, ๊ธฐ์กด REST API์™€ ๊ทธ๋ž˜ํ”„ํ์—˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๊ฒŒ ๋”ฑ์ด์—์š”! ๐Ÿ‘

์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ ์„œ๋ฒ„ ๊ตฌ์ถ• ์˜ˆ์‹œ

์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜๋กœ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ๋„ ์–ด๋ ต์ง€ ์•Š์•„์š”. ํ•œ๋ฒˆ ๋ณผ๊นŒ์š”?


const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');

// ์Šคํ‚ค๋งˆ ์ •์˜
const schema = buildSchema(`
  type Query {
    hello: String
  }
`);

// ๋ฃจํŠธ ๋ฆฌ์กธ๋ฒ„
const root = {
  hello: () => 'Hello world!',
};

const app = express();

app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true,
}));

app.listen(4000, () => console.log('Server running on port 4000'));

์ด๋ ‡๊ฒŒ ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์–ด์š”. Express๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋” ์‰ฝ๊ฒŒ ๋Š๊ปด์งˆ ๊ฑฐ์˜ˆ์š”! ๐Ÿ˜Š

3. ์•„ํด๋กœ vs ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜: ์–ด๋–ค ๊ฒŒ ๋” ์ข‹์„๊นŒ? ๐Ÿคผโ€โ™‚๏ธ

์ž, ์ด์ œ ๋‘ ๋…€์„์„ ๋น„๊ตํ•ด๋ณผ ์‹œ๊ฐ„์ด์—์š”! ์–ด๋–ค ๊ฒŒ ๋” ์ข‹์„๊นŒ์š”? ์ •๋‹ต์€ ์—†์–ด์š”. ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฑฐ๋“ ์š”. ๊ทธ๋ž˜๋„ ๋น„๊ต๋Š” ํ•ด๋ด์•ผ๊ฒ ์ฃ ?

์•„ํด๋กœ ๐Ÿ‘

  • ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ๊ณผ ๋„๊ตฌ
  • ๊ฐ•๋ ฅํ•œ ์บ์‹ฑ
  • ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ
  • ์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ ์‰ฝ๊ฒŒ ๊ตฌํ˜„

์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ ๐Ÿ‘

  • ๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„
  • Express์™€ ์™„๋ฒฝํ•œ ํ†ตํ•ฉ
  • ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ž์œ ๋กœ์›€
  • ์ž‘์€ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ

์–ด๋•Œ์š”? ๊ฐ์ž์˜ ์žฅ๋‹จ์ ์ด ์žˆ์ฃ ? ๐Ÿค”

์•„ํด๋กœ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋‚˜ ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ์ข‹์•„์š”. ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํฐ ํ”Œ๋žซํผ์„ ๋งŒ๋“ ๋‹ค๋ฉด ์•„ํด๋กœ๊ฐ€ ์ข‹์€ ์„ ํƒ์ผ ์ˆ˜ ์žˆ์–ด์š”.

๋ฐ˜๋ฉด์— ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์€ ์ž‘์€ ํ”„๋กœ์ ํŠธ๋‚˜ ๊ธฐ์กด Express ์•ฑ์— ๊ทธ๋ž˜ํ”„ํ์—˜์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ข‹์•„์š”. ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋‹ˆ๊นŒ์š”!

4. ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€: ์žฌ๋Šฅ๋„ท์—์„œ์˜ ํ™œ์šฉ ๐ŸŒˆ

์ž, ์ด์ œ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์žฌ๋Šฅ๋„ท์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณผ๊ฒŒ์š”. ์žฌ๋Šฅ๋„ท์€ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ๊ฑฐ๋ž˜ํ•˜๋Š” ํ”Œ๋žซํผ์ด์ž–์•„์š”? ๊ทธ๋ž˜ํ”„ํ์—˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •๋ง ํŽธ๋ฆฌํ•ด์งˆ ๊ฑฐ์˜ˆ์š”!

์žฌ๋Šฅ๋„ท์—์„œ์˜ ๊ทธ๋ž˜ํ”„ํ์—˜ ํ™œ์šฉ ์˜ˆ์‹œ:

  • ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ •๋ณด ์กฐํšŒ ๐Ÿ‘ค
  • ์žฌ๋Šฅ ๋ชฉ๋ก๊ณผ ์ƒ์„ธ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ ๐ŸŽจ
  • ๋ฆฌ๋ทฐ ๋ฐ ํ‰์  ์‹œ์Šคํ…œ ๊ตฌํ˜„ โญ
  • ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง• ๊ธฐ๋Šฅ ๐Ÿ’ฌ
  • ๊ฒ€์ƒ‰ ๋ฐ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ ๐Ÿ”

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ด์š”. REST API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์š”์ฒญ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํ•˜์ง€๋งŒ ๊ทธ๋ž˜ํ”„ํ์—˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ๋ฒˆ์˜ ์ฟผ๋ฆฌ๋กœ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์ฃ !

์•„ํด๋กœ๋ฅผ ์‚ฌ์šฉํ•œ ์žฌ๋Šฅ๋„ท ์ฟผ๋ฆฌ ์˜ˆ์‹œ


query GetUserProfile($userId: ID!) {
  user(id: $userId) {
    name
    email
    skills {
      name
      level
    }
    offerings {
      title
      price
      rating
    }
    reviews {
      text
      rating
    }
  }
}

์ด๋ ‡๊ฒŒ ํ•œ ๋ฒˆ์˜ ์ฟผ๋ฆฌ๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด, ์Šคํ‚ฌ, ์ œ๊ณต ์„œ๋น„์Šค, ๋ฆฌ๋ทฐ ๋“ฑ์„ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด์š”. ์™„์ „ ํŽธํ•˜์ฃ ? ๐Ÿ˜Ž

์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์„ ์‚ฌ์šฉํ•œ ์žฌ๋Šฅ๋„ท ์„œ๋ฒ„ ์˜ˆ์‹œ


const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');

const schema = buildSchema(`
  type User {
    id: ID!
    name: String!
    email: String!
    skills: [Skill!]!
    offerings: [Offering!]!
    reviews: [Review!]!
  }

  type Skill {
    name: String!
    level: Int!
  }

  type Offering {
    title: String!
    price: Float!
    rating: Float
  }

  type Review {
    text: String!
    rating: Int!
  }

  type Query {
    user(id: ID!): User
  }
`);

const root = {
  user: ({ id }) => {
    // ์—ฌ๊ธฐ์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    return {
      id: id,
      name: "ํ™๊ธธ๋™",
      email: "hong@example.com",
      skills: [{ name: "์›น ๊ฐœ๋ฐœ", level: 5 }],
      offerings: [{ title: "์›น์‚ฌ์ดํŠธ ์ œ์ž‘", price: 100000, rating: 4.5 }],
      reviews: [{ text: "์ •๋ง ์ข‹์€ ์„œ๋น„์Šค์˜€์–ด์š”!", rating: 5 }]
    };
  }
};

const app = express();

app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true,
}));

app.listen(4000, () => console.log('์žฌ๋Šฅ๋„ท ์„œ๋ฒ„๊ฐ€ 4000๋ฒˆ ํฌํŠธ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค!'));

์ด๋ ‡๊ฒŒ ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜๋กœ ์žฌ๋Šฅ๋„ท์˜ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ•˜์ฃ ? ๐Ÿ‘

5. ์„ฑ๋Šฅ ๋น„๊ต: ์•„ํด๋กœ vs ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ ๐ŸŽ๏ธ

์„ฑ๋Šฅ๋„ ์ค‘์š”ํ•œ ๊ณ ๋ ค์‚ฌํ•ญ์ด์—์š”. ์–ด๋–ค ๊ฒŒ ๋” ๋น ๋ฅผ๊นŒ์š”? ๐Ÿค”

์„ฑ๋Šฅ ๋น„๊ต:

  • ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜: ๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„, ์˜ค๋ฒ„ํ—ค๋“œ ์ ์Œ ๐Ÿš€
  • ์•„ํด๋กœ: ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•œ ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ, ํ•˜์ง€๋งŒ ์ตœ์ ํ™” ๋„๊ตฌ ์ œ๊ณต ๐Ÿ› ๏ธ

์ผ๋ฐ˜์ ์œผ๋กœ ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์ด ๋” ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ํŽธ์ด์—์š”. ํ•˜์ง€๋งŒ ์•„ํด๋กœ๋„ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ์–ด์š”.

์žฌ๋Šฅ๋„ท ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ํ”Œ๋žซํผ์—์„œ๋Š” ์•„ํด๋กœ์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋“ค์ด ์˜คํžˆ๋ ค ์ „์ฒด์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์–ด์š”. ์บ์‹ฑ, ๋ฐฐ์น˜ ์š”์ฒญ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ๋” ํšจ์œจ์ ์ธ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜์ฃ !

6. ํ•™์Šต ๊ณก์„ : ์–ด๋–ค ๊ฒŒ ๋” ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์šธ๊นŒ? ๐Ÿ“š

์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์šธ ๋•Œ๋Š” ํ•™์Šต ๊ณก์„ ๋„ ์ค‘์š”ํ•˜์ฃ . ์–ด๋–ค ๊ฒŒ ๋” ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์šธ๊นŒ์š”?

์•„ํด๋กœ ๐Ÿ“˜

  • ํ’๋ถ€ํ•œ ๋ฌธ์„œ์™€ ํŠœํ† ๋ฆฌ์–ผ
  • ๊ฐ•๋ ฅํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›
  • ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ํ•™์Šต ํ•„์š”

์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ ๐Ÿ“™

  • Express ์ง€์‹ ํ™œ์šฉ ๊ฐ€๋Šฅ
  • ๊ฐ„๋‹จํ•œ ์„ค์ •๊ณผ ์‚ฌ์šฉ๋ฒ•
  • ๊ธฐ๋ณธ์ ์ธ ๊ทธ๋ž˜ํ”„ํ์—˜ ์ดํ•ด๋งŒ ํ•„์š”

์•„ํด๋กœ๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ์€ ๋งŒํผ ๋ฐฐ์šธ ๊ฒƒ๋„ ๋งŽ์•„์š”. ํ•˜์ง€๋งŒ ๋ฌธ์„œ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›์ด ํ›Œ๋ฅญํ•ด์„œ ํ•™์Šต์— ๋„์›€์ด ๋งŽ์ด ๋ผ์š”. ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์€ Express๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋” ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์š”.

์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ํŒ€์˜ ๊ธฐ์ˆ  ์Šคํƒ๊ณผ ๊ฒฝํ—˜์„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”. Express์— ์ต์ˆ™ํ•œ ํŒ€์ด๋ผ๋ฉด ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๋‚˜์ค‘์— ํ•„์š”ํ•˜๋‹ค๋ฉด ์•„ํด๋กœ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜๋„ ์žˆ์–ด์š”!

7. ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ƒํƒœ๊ณ„: ๋ˆ„๊ฐ€ ๋” ํ™œ๋ฐœํ• ๊นŒ? ๐ŸŒฑ

์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ƒํƒœ๊ณ„๋Š” ์ •๋ง ์ค‘์š”ํ•ด์š”. ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”.

์ปค๋ฎค๋‹ˆํ‹ฐ ๋น„๊ต:

  • ์•„ํด๋กœ: ๋งค์šฐ ํ™œ๋ฐœํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ, ๋‹ค์–‘ํ•œ ๋„๊ตฌ์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ๊ณต ๐ŸŽ‰
  • ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜: ์•ˆ์ •์ ์ด์ง€๋งŒ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๐Ÿก

์•„ํด๋กœ๋Š” ์ •๋ง ํฐ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์š”. GitHub ์Šคํƒ€๋„ ๋งŽ๊ณ , ์ปจํผ๋Ÿฐ์Šค๋„ ์ž์ฃผ ์—ด๋ฆฌ์ฃ . ๋ฐ˜๋ฉด ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์€ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์ง€๋งŒ, Express ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ง€์›์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”.

์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํฌ๊ธฐ๋Š” ์ค‘์š”ํ•œ ๊ณ ๋ ค์‚ฌํ•ญ์ด ๋  ์ˆ˜ ์žˆ์–ด์š”. ๋ฌธ์ œ ํ•ด๊ฒฐ์ด ์‰ฝ๊ณ , ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ !

8. ํ™•์žฅ์„ฑ: ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ ธ๋„ ๊ดœ์ฐฎ์„๊นŒ? ๐Ÿ—๏ธ

ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ์žฅํ•˜๋ฉด์„œ ํ™•์žฅ์„ฑ์€ ๋งค์šฐ ์ค‘์š”ํ•ด์ ธ์š”. ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์€ ๊ณ„์† ์„ฑ์žฅํ•  ํ…Œ๋‹ˆ๊นŒ์š”!

์•„ํด๋กœ ๐Ÿ™๏ธ

  • ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ
  • ์Šคํ‚ค๋งˆ ์Šคํ‹ฐ์นญ, federation ์ง€์›
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ์ง€์›

์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ ๐Ÿ 

  • ์ž‘์€~์ค‘๊ฐ„ ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ
  • Express์˜ ๋ฏธ๋“ค์›จ์–ด ์‹œ์Šคํ…œ ํ™œ์šฉ ๊ฐ€๋Šฅ
  • ์ปค์Šคํ…€ ํ™•์žฅ ๊ฐ€๋Šฅ

์•„ํด๋กœ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์š”. ํŠนํžˆ ์Šคํ‚ค๋งˆ ์Šคํ‹ฐ์นญ๊ณผ federation์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ด์š”. ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์€ Express์˜ ์œ ์—ฐ์„ฑ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ, ํ•„์š”์— ๋”ฐ๋ผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์š”.

์žฌ๋Šฅ๋„ท์ด ๋ฏธ๋ž˜์— ์—„์ฒญ ํฌ๊ฒŒ ์„ฑ์žฅํ•œ๋‹ค๋ฉด, ์•„ํด๋กœ์˜ ํ™•์žฅ์„ฑ์ด ํฐ ๋„์›€์ด ๋  ๊ฑฐ์˜ˆ์š”. ํ•˜์ง€๋งŒ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ๋Š” ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜๋กœ๋„ ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ์ฃ !

9. ๋ณด์•ˆ: ์šฐ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋Š” ์•ˆ์ „ํ• ๊นŒ? ๐Ÿ”’

๋ณด์•ˆ์€ ๋ชจ๋“  ์›น ์„œ๋น„์Šค์—์„œ ์ค‘์š”ํ•˜์ง€๋งŒ, ํŠนํžˆ ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ๋Š” ๋”์šฑ ์ค‘์š”ํ•ด์š”. ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด์™€ ๊ฒฐ์ œ ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ๋‹ˆ๊นŒ์š”!

๋ณด์•ˆ ๋น„๊ต:

  • ์•„ํด๋กœ: ๋‚ด์žฅ๋œ ๋ณด์•ˆ ๊ธฐ๋Šฅ, ์ธ์ฆ/์ธ๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ œ๊ณต ๐Ÿ›ก๏ธ
  • ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜: Express์˜ ๋ณด์•ˆ ๋ฏธ๋“ค์›จ์–ด ํ™œ์šฉ ๊ฐ€๋Šฅ ๐Ÿ”

์•„ํด๋กœ๋Š” ๋ณด์•ˆ์— ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•ด์š”. ์ธ์ฆ, ์ธ๊ฐ€, ์†๋„ ์ œํ•œ ๋“ฑ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ฃ . ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜์€ Express์˜ ๋ณด์•ˆ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ, ๊ธฐ์กด Express ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์นœ์ˆ™ํ•  ๊ฑฐ์˜ˆ์š”.

์žฌ๋Šฅ๋„ท์—์„œ๋Š” ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ๊ฐ€ ์ •๋ง ์ค‘์š”ํ•ด์š”. ์•„ํด๋กœ์˜ ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ๋” ์•ˆ์ „ํ•œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”!

10. ๊ฒฐ๋ก : ์–ด๋–ค ๊ฑธ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ? ๐Ÿค”

์ž, ์ด์ œ ๋ชจ๋“  ๊ฑธ ๋น„๊ตํ•ด๋ดค์–ด์š”. ์–ด๋–ค ๊ฒŒ ๋” ์ข‹์•„ ๋ณด์ด๋‚˜์š”? ์‚ฌ์‹ค ์ •๋‹ต์€ ์—†์–ด์š”. ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ, ํŒ€์˜ ๊ฒฝํ—˜, ๋ฏธ๋ž˜์˜ ํ™•์žฅ ๊ณ„ํš ๋“ฑ์„ ๊ณ ๋ คํ•ด์„œ ์„ ํƒํ•ด์•ผ ํ•ด์š”.

์„ ํƒ ๊ฐ€์ด๋“œ:

  • ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ, ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ โ†’ ์•„ํด๋กœ ๐Ÿš€
  • ์ž‘์€~์ค‘๊ฐ„ ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ, Express ๊ฒฝํ—˜ ๋งŽ์Œ โ†’ ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ ๐Ÿš‚
  • ํ™•์žฅ์„ฑ, ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์› ์ค‘์š” โ†’ ์•„ํด๋กœ ๐ŸŒŸ
  • ๊ฐ€๋ณ๊ณ  ๋น ๋ฅธ ๊ตฌํ˜„ ํ•„์š” โ†’ ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ โšก

์žฌ๋Šฅ๋„ท์˜ ๊ฒฝ์šฐ, ์ฒ˜์Œ์—๋Š” ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋‚˜์ค‘์— ํ•„์š”ํ•˜๋‹ค๋ฉด ์•„ํด๋กœ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ์ „๋žต์ด ๋  ์ˆ˜ ์žˆ์–ด์š”. ์•„๋‹ˆ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ์•„ํด๋กœ๋ฅผ ์„ ํƒํ•ด์„œ ๋ฏธ๋ž˜์˜ ํ™•์žฅ์— ๋Œ€๋น„ํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ฃ .

์ค‘์š”ํ•œ ๊ฑด ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. ์žฌ๋Šฅ๋„ท์ฒ˜๋Ÿผ ๋ฉ‹์ง„ ํ”Œ๋žซํผ์„ ๋งŒ๋“ค ๋•Œ๋Š” ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ํƒํ•ด์•ผ ํ•ด์š”!

๋งˆ๋ฌด๋ฆฌ: ๊ทธ๋ž˜ํ”„ํ์—˜์˜ ๋ฏธ๋ž˜ ๐Ÿ”ฎ

๊ทธ๋ž˜ํ”„ํ์—˜์€ ๊ณ„์† ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์–ด์š”. ์•„ํด๋กœ์™€ ์ต์Šคํ”„๋ ˆ์Šค ๊ทธ๋ž˜ํ”„ํ์—˜ ๋ชจ๋‘ ์ด ๋ฐœ์ „์— ํฐ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์ฃ . ์•ž์œผ๋กœ ๋” ๋งŽ์€ ๊ธฐ์—…๋“ค์ด ๊ทธ๋ž˜ํ”„ํ์—˜์„ ๋„์ž…ํ•  ๊ฑฐ๊ณ , ๋” ๋‹ค์–‘ํ•œ ๋„๊ตฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‚˜์˜ฌ ๊ฑฐ์˜ˆ์š”.

์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ๊ทธ๋ž˜ํ”„ํ์—˜์„ ์‚ฌ์šฉํ•˜๋ฉด, ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋ฐ์ดํ„ฐ๋ฅผ ๋” ์œ ์—ฐํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ณ , ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ๋„ ๋” ์‰ฌ์›Œ์ง€์ฃ .

๊ทธ๋ž˜ํ”„ํ์—˜์˜ ๋ฏธ๋ž˜๋Š” ์ •๋ง ๋ฐ์•„ ๋ณด์—ฌ์š”. ํŠนํžˆ ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ๋Š” ๊ทธ ์žฅ์ ์ด ๋”์šฑ ๋น›์„ ๋ฐœํ•  ๊ฑฐ์˜ˆ์š”. ์‚ฌ์šฉ์ž๋“ค์˜ ๋‹ค์–‘ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ƒ์‚ฐ์„ฑ๋„ ๋†’์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”.

11. ์‹ค์ œ ๊ตฌํ˜„ ํŒ: ์žฌ๋Šฅ๋„ท์— ๊ทธ๋ž˜ํ”„ํ์—˜ ์ ์šฉํ•˜๊ธฐ ๐Ÿ’ก

์ž, ์ด์ œ ์‹ค์ œ๋กœ ์žฌ๋Šฅ๋„ท์— ๊ทธ๋ž˜ํ”„ํ์—˜์„ ์ ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณผ๊นŒ์š”? ์–ด๋–ค ์ ๋“ค์„ ๊ณ ๋ คํ•ด์•ผ ํ• ์ง€ ๋ช‡ ๊ฐ€์ง€ ํŒ์„ ๋“œ๋ฆด๊ฒŒ์š”.

์žฌ๋Šฅ๋„ท ๊ทธ๋ž˜ํ”„ํ์—˜ ๊ตฌํ˜„ ํŒ:

  1. ์Šคํ‚ค๋งˆ ์„ค๊ณ„๋ฅผ ์‹ ์ค‘ํžˆ ํ•˜์„ธ์š”. ๐Ÿ—๏ธ
  2. ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ ๊ผผ๊ผผํžˆ ๊ตฌํ˜„ํ•˜์„ธ์š”. ๐Ÿ”
  3. ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ตœ์ ํ™”๋ฅผ ๊ณ ๋ คํ•˜์„ธ์š”. โšก
  4. ์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์ฃผ๋ชฉํ•˜์„ธ์š”. ๐Ÿ””
  5. ํ”„๋ก ํŠธ์—”๋“œ์™€์˜ ํ˜‘์—…์„ ๊ณ ๋ คํ•˜์„ธ์š”. ๐Ÿค

1. ์Šคํ‚ค๋งˆ ์„ค๊ณ„

์žฌ๋Šฅ๋„ท์˜ ์Šคํ‚ค๋งˆ๋Š” ์‚ฌ์šฉ์ž, ์žฌ๋Šฅ, ๊ฑฐ๋ž˜, ๋ฆฌ๋ทฐ ๋“ฑ ๋‹ค์–‘ํ•œ ํƒ€์ž…์„ ํฌํ•จํ•ด์•ผ ํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋Ÿฐ ์‹์œผ๋กœ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์ฃ :


type User {
  id: ID!
  name: String!
  email: String!
  skills: [Skill!]!
  offerings: [Offering!]!
  reviews: [Review!]!
}

type Skill {
  id: ID!
  name: String!
  level: Int!
}

type Offering {
  id: ID!
  title: String!
  description: String!
  price: Float!
  seller: User!
  category: Category!
}

type Category {
  id: ID!
  name: String!
  offerings: [Offering!]!
}

type Review {
  id: ID!
  text: String!
  rating: Int!
  reviewer: User!
  offering: Offering!
}

type Query {
  user(id: ID!): User
  offering(id: ID!): Offering
  searchOfferings(keyword: String!): [Offering!]!
}

type Mutation {
  createOffering(input: OfferingInput!): Offering!
  bookOffering(offeringId: ID!): Booking!
  leaveReview(input: ReviewInput!): Review!
}

type Subscription {
  newOffering: Offering!
  bookingUpdated(userId: ID!): Booking!
}

์ด๋Ÿฐ ์‹์œผ๋กœ ์Šคํ‚ค๋งˆ๋ฅผ ์„ค๊ณ„ํ•˜๋ฉด ์žฌ๋Šฅ๋„ท์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๋“ค์„ ๊ทธ๋ž˜ํ”„ํ์—˜๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”.

2. ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๊ด€๋ฆฌ

์žฌ๋Šฅ๋„ท์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๊ด€๋ฆฌ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•ด์š”. ์•„ํด๋กœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”: