Skip to content

๐Ÿ– ๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - ๋ธ”๋กœ๊ทธ ๋งŒ๋“ค๊ธฐ ํ”„๋กœ์ ํŠธ ๐Ÿ–

Notifications You must be signed in to change notification settings

sangjun1126/React_Blog_Velopert

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

19 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Koa ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์šฉํ•˜๊ธฐ

  • koa ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฏธ๋“ค์›จ์–ด์˜ ๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ์ „ ์ฝ”๋“œ์—์„œ app.useํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋ฅผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

(ctx, next) => {}
  • koa์˜ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋Š” ๋‘ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์กฐ๊ธˆ ์ „์—๋„ ์‚ฌ์šฉํ•œ ctx๋ผ๋Š” ๊ฐ’์ด๊ณ , ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” next ์ž…๋‹ˆ๋‹ค.

  • ctx๋Š” context์˜ ์ค„์ž„๋ง๋กœ ์›น ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. next๋Š” ํ˜„์žฌ ์ฒ˜๋ฆฌ ์ค‘์ธ ๋ฏธ๋“ค์›จ์–ด์˜ ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋“ฑ๋กํ•˜๊ณ  next ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ ๋ฏธ๋“ค์›จ์–ด์—์„œ next๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ctx => {}์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ์— next๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ผ์šฐํŠธ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋‚˜์ค‘์— ์„ค์ •ํ•  ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋กœ next๋ฅผ ์ƒ๋žตํ•˜์—ฌ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

const Koa = require('koa');
const app = new Koa();

app.use(async (ctx, next) => {
    console.log(ctx.url);
    console.log(1);
    if (ctx.query.authorized !== '1') {
        ctx.status = 401; // unauthorized
        return;
    }
    await next();
    console.log("END");
});

app.use((ctx, next) => {
    console.log(2);
    next();
});

app.use(ctx => {
    ctx.body = 'hello world';
});

app.listen(4000, () => {
    console.log("Listening on port 4000");
});
`
``

* KOA ์•Œ์•„๋ณด๊ธฐ ๋กœ์ง 2

```javascript
const koa = require('koa');
const Router = require('koa-router');
const app = new koa();
const router = new Router();

// ๋ผ์šฐํ„ฐ ์„ค์ •ํ•˜๊ธฐ
router.get('/', ctx => {
    ctx.body = 'ํ™ˆ';
})

router.get('/about/:name', ctx => {
    const {name} = ctx.params;
    // name์˜ ์กด์žฌ ์œ ๋ฌด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    ctx.body = name ? `${name}์˜ ์†Œ๊ฐœ` : '์†Œ๊ฐœ';
});

router.get('/posts', ctx => {
    const {id} = ctx.query;
    // id์˜ ์กด์žฌ ์œ ๋ฌด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    ctx.body = id? `ํฌ์ŠคํŠธ #${id}` : 'ํฌ์ŠคํŠธ ์•„์ด๋””๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.';
});

// app ์ธ์Šคํ„ด์Šค์— ๋ผ์šฐํ„ฐ ์ ์šฉ
app.use(router.routes()).use(router.allowedMethods());

app.listen(4000, () => {
    console.log('listening on port 4000');
});

REST API

  • ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๋ ค๋ฉด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์ฝ์–ด ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ง์ ‘ ์ ‘์†ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด ๋ณด์•ˆ์ƒ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ REST API๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ž์‹ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ ์ƒ์„ฑ ์‚ญ์ œ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ ์‹ถ๋‹ค๊ณ  ์š”์ฒญํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ํ•„์š”ํ•œ ๋กœ์ง์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • REST API๋Š” ์š”์ฒญ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅธ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. HTTP ๋ฉ”์„œ๋“œ๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉฐ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” GET, POST, PUT, DELETE, PATCH์ž…๋‹ˆ๋‹ค.

MongoDB

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

  • ๊ทธ๋Ÿฐ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฒซ๋ฒˆ์งธ๋Š” ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ๊ฐ€ ๊ณ ์ •์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์Šคํ‚ค๋งˆ๋ž€ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์–ด๋–ค ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํšŒ์› ์ •๋ณด ์Šคํ‚ค๋งˆ๋ผ๋ฉด ๊ณ„์ •๋ช…, ์ด๋ฉ”์ผ, ์ด๋ฆ„ ๋“ฑ์ด ๋˜๊ฒ ์ง€์š”. ์ƒˆ๋กœ ๋“ฑ๋กํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์ด ๊ธฐ์กด์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋“ค๊ณผ ๋‹ค๋ฅด๋‹ค๋ฉด? ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ˆ˜์ •ํ•ด์•ผ ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์€ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์ด ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กœ์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‘๋ฒˆ์งธ๋Š” ํ™•์žฅ์„ฑ์ž…๋‹ˆ๋‹ค. RDBMS๋Š” ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ ์–‘์ด ๋Š˜์–ด๋‚˜๋ฉด ์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ์— ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ™•์žฅํ•ด์ฃผ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชฝ๊ณ ๋””๋น„๋Š” ์ด๋Ÿฐ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•œ ๋ฌธ์„œ ์ง€ํ–ฅ์  nosql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋“ฑ๋กํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์œ ๋™์ ์ธ ์Šคํ‚ค๋งˆ๋ฅผ ์ง€๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข…๋ฅ˜๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ํ•˜๋”๋ผ๋„, ์ƒˆ๋กœ ๋“ฑ๋กํ•ด์•ผํ•  ๋ฐ์ดํ„ฐ ํ˜•์‹์ด ๋ฐ”๋€๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ˆ˜์ •ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ ์–‘์ด ๋Š˜์–ด๋‚˜๋„ ํ•œ ์ปดํ“จํ„ฐ์—์„œ๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ๋กœ ๋ถ„์‚ฐํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•์žฅํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

  • moongoose๋Š” node.js ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชฝ๊ณ ๋””๋น„ ๊ธฐ๋ฐ˜ ODM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฌธ์„œ๋“ค์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

dotenv

  • dotenv๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค์„ ํŒŒ์ผ์— ๋„ฃ๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. moongoose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชฝ๊ณ ๋””๋น„์— ์ ‘์†ํ•  ๊ฒฝ์šฐ, ์„œ๋ฒ„์— ์ฃผ์†Œ๋‚˜ ๊ณ„์ • ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฏผ๊ฐํ•˜๊ฑฐ๋‚˜ ํ™˜๊ฒฝ๋ณ„๋กœ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ ์ฝ”๋“œ ์•ˆ์— ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

postchtrl.js

let postId = 1; // id์˜ ์ดˆ๊ธฐ๊ฐ’์ž…๋‹ˆ๋‹ค.

// posts ๋ฐฐ์—ด ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ
const posts = [
    {
        id : 1,
        title : '์ œ๋ชฉ',
        'body' : '๋‚ด์šฉ',
    },
];

// ํฌ์ŠคํŠธ ์ž‘์„ฑํ•˜๊ธฐ
export const write = ctx => {
    // REST API์˜ Request Body๋Š” ctx.request.body์—์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    const { title, body } = ctx.request.body;
    postId += 1; // ๊ธฐ์กด postId ๊ฐ’์— 1์„ ๋”ํ•ฉ๋‹ˆ๋‹ค.
    const post = {
        id : postId,
        title : body
    };
    posts.push(post);
    ctx.body = post;
};

// ํฌ์ŠคํŠธ ๋ชฉ๋ก ์กฐํšŒ
export const list = ctx => {
    ctx.body = posts;
}

// ํŠน์ • ํฌ์ŠคํŠธ ์กฐํšŒ
export const read = ctx => {
    const { id } = ctx.params;
    // ์ฃผ์–ด์ง„ id ๊ฐ’์œผ๋กœ ํฌ์ŠคํŠธ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
    // ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„ ์˜จ ๊ฐ’์€ ๋ฌธ์ž์—ด ํ˜•์‹์ด๋ฏ€๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜
    // ๋น„๊ตํ•  p.id ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    const post = posts.find(p => p.id.toString() === id);
    // ํฌ์ŠคํŠธ๊ฐ€ ์—†์œผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    if (!post) {
        ctx.status = 404;
        ctx.body = {
            message : 'ํฌ์ŠคํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.',
        };
        return;
    }
    ctx.body = post;
};

// ํŠน์ • ํฌ์ŠคํŠธ ์ œ๊ฑฐ
export const remove = ctx => {
    const {id} = ctx.params;
    // ํ•ด๋‹น id๋ฅผ ๊ฐ€์ง„ post๊ฐ€ ๋ช‡ ๋ฒˆ์งธ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    const index = posts.findIndex(p => p.id.toString() === id);
    // ํฌ์ŠคํŠธ๊ฐ€ ์—†์œผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    if (index === -1) {
        ctx.status = 404;
        ctx.body = {
            message : 'ํฌ์ŠคํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.',
        };
        return;
    };
    // index๋ฒˆ ์จฐ ์•„์ดํ…œ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    posts.splice(index,1);
    ctx.status = 204; // No content
};

// ํฌ์ŠคํŠธ ์ˆ˜์ •
export const replace = ctx => {
    // PUT ๋ฉ”์„œ๋“œ๋Š” ์ „์ฒด ํฌ์ŠคํŠธ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ต์งธ๋กœ ๊ต์ฒดํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    const {id} = ctx.params;
    // ํ•ด๋‹น id๋ฅผ ๊ฐ€์ง„ post๊ฐ€ ๋ช‡ ๋ฒˆ์งธ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    const index = posts.findIndex(p => p.id.toString() === id);
    // ํฌ์ŠคํŠธ๊ฐ€ ์—†์œผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    if (index === -1) {
        ctx.status = 404;
        ctx.body = {
            message : 'ํฌ์ŠคํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.',
        };
        return;
    };
    // ์ „์ฒด ๊ฐ์ฒด๋ฅผ ๋ฎ์–ด ์”Œ์›๋‹ˆ๋‹ค.
    // ๋”ฐ๋ผ์„œ id๋ฅผ ์ œ์™ธํ•œ ๊ธฐ์กด ์ •๋ณด๋ฅผ ๋‚ ๋ฆฌ๊ณ , ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    posts[index] = {
        id,
        ...ctx.request.body,
    };
    ctx.body = posts[index];
};

// ํฌ์ŠคํŠธ ์ˆ˜์ •(ํŠน์ • ํ•„๋“œ ๋ณ€๊ฒฝ)
export const update = ctx => {
    // PATCH ๋ฉ”์„œ๋“œ๋Š” ์ฃผ์–ด์ง„ ํ•„๋“œ๋งŒ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
    const {id} = ctx.params;
    // ํ•ด๋‹น id๋ฅผ ๊ฐ€์ง„ post๊ฐ€ ๋ช‡ ๋ฒˆ์งธ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    const index = posts.findIndex(p => p.id.toString() === id);
    // ํฌ์ŠคํŠธ๊ฐ€ ์—†์œผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    if (index === -1) {
        ctx.status = 404;
        ctx.body = {
            message : 'ํฌ์ŠคํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.',
        };
        return;
    };
    // ์ „์ฒด ๊ฐ์ฒด๋ฅผ ๋ฎ์–ด ์”Œ์›๋‹ˆ๋‹ค.
    // ๋”ฐ๋ผ์„œ id๋ฅผ ์ œ์™ธํ•œ ๊ธฐ์กด ์ •๋ณด๋ฅผ ๋‚ ๋ฆฌ๊ณ , ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    posts[index] = {
      ...posts[index],
      ...ctx.request.body,  
    };
    ctx.body = posts[index];
}
  • mongoose์—๋Š” ์Šคํ‚ค๋งˆ์™€ ๋ชจ๋ธ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์ด ๋‘˜์€ ํ˜ผ๋™ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๋Š” ์ปฌ๋ ‰์…˜์— ๋“ค์–ด๊ฐ€๋Š” ๋ฌธ์„œ ๋‚ด๋ถ€์˜ ๊ฐ ํ•„๋“œ๊ฐ€ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ๋Š”์ง€ ์ •์˜ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด์™€ ๋‹ฌ๋ฆฌ ๋ชจ๋ธ์€ ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“œ๋Š” ์ธ์Šคํ„ด์Šค๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹ค์ œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์„ ์ง€๋‹ˆ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ ์ƒ์„ฑ

  • ๋ชจ๋ธ์„ ๋งŒ๋“œ๋ ค๋ฉด ์‚ฌ์ „์— ์Šคํ‚ค๋งˆ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ์— ๋Œ€ํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์ค€๋น„ํ•  ํ…๋ฐ, ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•  ์ง€ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.

์ œ๋ชฉ, ๋‚ด์šฉ, ํƒœ๊ทธ, ์ž‘์„ฑ์ผ

  • ํฌ์ŠคํŠธ ํ•˜๋‚˜์— ์ด๋ ‡๊ฒŒ ์ด ๋„ค ๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ •๋ณด์— ๋Œ€ํ•œ ํ•„๋“œ ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์„ค์ •ํ•˜์—ฌ ์Šคํ‚ค๋งˆ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

About

๐Ÿ– ๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  - ๋ธ”๋กœ๊ทธ ๋งŒ๋“ค๊ธฐ ํ”„๋กœ์ ํŠธ ๐Ÿ–

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published