TIL Code_Camp 3์ผ์ฐจ REST-API/GRAPHQL

๋ฐ•์„ ์šฐยท2023๋…„ 1์›” 11์ผ
0

code_camp

๋ชฉ๋ก ๋ณด๊ธฐ
21/31
post-thumbnail

๐ŸŒผ ํ•™์Šต๋‚ด์šฉ

1๏ธโƒฃ REST-API, GRAPHQL์˜ ์ฐจ์ด์ 

๐Ÿซฅ GRAPHQL

  • API๋ฅผ ์œ„ํ•œ ์ฟผ๋ฆฌ ์–ธ์–ด(Query Language)์ด๋ฉฐ ํƒ€์ž… ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋Ÿฐํƒ€์ž„์ž…๋‹ˆ๋‹ค.
  • ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ํŠน์ •ํ•œ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„๊ณผ ๊ด€๊ณ„๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ ๊ธฐ์กด ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ์— ์˜ํ•ด ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.
  • ์ฟผ๋ฆฌ ์–ธ์–ด(Query Language)
    ์ฟผ๋ฆฌ ์–ธ์–ด๋Š” ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋ณด๋‚ด๋Š” ์งˆ์˜๋ฌธ(Query)๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ปดํ“จํ„ฐ ์–ธ์–ด์ด๋‹ค. ๊ฐ€์žฅ ์ž˜ ์•Œ๋ ค์ ธ์žˆ๋Š” ์˜ˆ์‹œ๋กœ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” SQL์ด ์žˆ๋‹ค.
  • GraphQL(Graph Query Language)
    SQL์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ชฉ์ ์„ ๊ฐ€์ง„๋‹ค๋ฉด, GraphQL์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค.

๐Ÿซฅ REST-API , GRAPHQL ์ฐจ์ด์ 

  • ๋ณดํ†ต ํ•˜๋‚˜์˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€์ง„๋‹ค.

  • ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

  • ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ(response)๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์†๋„ ๊ฐœ์„ ์ด ๋œ๋‹ค.

  • ์—”๋“œํฌ์ธํŠธ REST API๋Š” ๋ณดํ†ต ์—ฌ๋Ÿฌ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๊ฐ๊ฐ์˜ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๋™์ผํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, GraphQL์€ ๋ณดํ†ต ํ•˜๋‚˜์˜ ์—”๋“œํฌ์ธํŠธ๋งŒ์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์š”์ฒญํ•˜๋Š” ์ฟผ๋ฆฌ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๐Ÿถ ์—”๋“œํฌ์ธํŠธ GRAPHQL ์žฅ์ 

  • ์œ„์— ์‚ฌ์ง„ ์ฒ˜๋Ÿผ REST-API CRUD์š”์ฒญ ํ•˜๋‚˜ํ•˜๋‚˜์˜ API๊ฐ€ ์ž‘์„ฑ๋˜์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • GRAPHQL์€ R์€ QUERY๋กœ CUD๋Š” MUTATUION์œผ๋กœ ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • โ›”๏ธ ์ค‘์š” : REST-API๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ๋ฐ›์•„์˜ค๋Š” ๋ฐ˜๋ฉด, GRAPHQL์€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ณจ๋ผ์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿถ ๋„๊ตฌ์˜ ๊ฐ„ํŽธํ™”

2๏ธโƒฃ Express

  • express๋ž€ NodeJS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ํด๋ž˜์Šค์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ง‘ํ•ฉ์ฒด

๐Ÿซฅ Express๋ฅผ ์‚ฌ์šฉ๋ฐฉ๋ฒ•

1. ํ„ฐ๋ฏธ๋„์— yarn init์„ ์‹คํ–‰ํ•œํ›„ packge.json์„ ์ƒ์„ฑํ•œ๋‹ค.
2. ํ„ฐ๋ฏธ๋„์— yarn add express ๋ฅผ ๋‹ค์šด ๋ฐ›์•„์ค€๋‹ค.
3. packge.json ์•ˆ์— dependencies(ํžˆ์Šคํ† ๋ฆฌ๋ชฉ๋ก(์„ค์น˜ํ•œํŒŒ์ผ)){express: ๋ฒ„์ „} ์ด๋ผ๊ณ  ๋‚˜์˜ค๋ฉด ์„ค์น˜
๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋œ๊ฒƒ์ด๋‹ค.
4. node_module์ด๋ž€ ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค. -> node_modules(์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค) ์‚ญ์ œํ•ด๋„ ๋ฌด๋ฐฉ
(yarn install๋กœ ๋‹ค์‹œ ๋‹ค์šด)
5. github์— node_module์€ ๊ฐ€๋ฆฌ๊ณ  ์˜ฌ๋ ค์ค€๋‹ค -> ์ตœ์ƒ๋‹จ์— .gitignoer ํŒŒ์ผ์„ ์ƒ์„ฑ ํ•œํ›„ node_module์„ ์ž‘์„ฑ
6. gitignoer -> github ์ €์žฅํ• ๋•Œ ๋ฌด์‹œํ•  ํŒŒ์ผ์„ ์ž‘์„ฑํ•œ๋‹ค.
7. packge.json์€ ์ ˆ๋Œ€!! ์‚ญ์ œํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

๐Ÿซฅ Express์˜ ๊ธฐ๋ณธ๊ตฌ์กฐ

// const express = require('express');  // ์˜›๋‚ ๋ฐฉ์‹ => commonjs
import express from 'express'; // ์š”์ฆ˜๋ฐฉ์‹ => module

const app = express();
const port = 3000; // ํฌํŠธ๋ฒˆํ˜ธ

app.get('/qqq', function (req, res) {
    // ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜ (๊ฒฝ๋กœ๋ฅผ ์•Œ๋ ค์ค€๋‹ค.)
    res.send('Hello World');
});

app.listen(port, () => {
    console.log('๐Ÿถ ๋ฐฑ์—”๋“œ API ์„œ๋ฒ„๊ฐ€ ์ผœ์กŒ์–ด์š”!!');
});
  • ๋‚ด ์ปดํ“จํ„ฐ ์ฃผ์†Œ๋Š” localhost ๋˜๋Š” 127.0.0.1์ด๋‹ค
  • ์ด๋ ‡๊ฒŒ ํ•˜๊ณ ๋‚˜๋ฉด ์•„๋ž˜์™€๊ฐ™์ด ์ •์‚ญ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์•Œ์ˆ˜ ์žˆ๋‹ค.

profile
์ฝ”๋ฆฐ์ด ์—ด์‹ฌํžˆ ๋ฐฐ์šฐ์ž!

0๊ฐœ์˜ ๋Œ“๊ธ€