Menu
CoddyTech

POST로 생성하기

Coddy Node.js 여정의 REST API 섹션에 포함된 레슨. 25개 중 2번째.

작업을 추가하는 클라이언트는 새 작업이 어디에 있는지 알아야 합니다. 새 리소스를 목록의 URL로 POST로 보내면, 서버는 리소스와 해당 URL을 나타내는 Location 헤더를 포함해 201 생성됨으로 응답합니다.

POST /api/events   { "name": "Launch party" }

201 Created
Location: /api/events/12
{ "id": 12, "name": "Launch party" }

id는 서버가 정하므로 두 클라이언트가 같은 id를 사용할 수 없습니다. Location 헤더를 사용하면 클라이언트가 직접 URL을 만들지 않고도 새 이벤트를 가져올 수 있습니다. res.location(path)은 해당 헤더를 설정하며, res.status처럼 연결해서 사용할 수 있습니다.

res.status(201).location(`/api/events/${event.id}`).json(event);
challenge icon

챌린지

쉬움

클라이언트가 작업을 추가할 수 있는 방법이 필요합니다. 작업을 생성하고 새 작업의 위치를 클라이언트에 알려 주는 POST 경로를 추가하세요.

  1. routes/tasks.js에서 POST /api/tasks 경로를 추가하세요(라우터 내부에서 해당 경로는 '/'입니다). JSON 본문에서 title을 읽습니다. 예: { "title": "Order new chairs" }.
  2. 다음 네 필드로 새 작업을 만드세요.
    • id: store.js의 nextId() 함수에서 가져옵니다. tasks와 함께 가져오세요.
    • title: 본문에서 가져옵니다.
    • done: false.
    • createdAt: new Date().toISOString(), 현재 시각을 텍스트로 나타낸 값입니다.

    tasks 배열에 추가하여 GET /api/tasks에서도 표시되도록 하세요.

  3. 상태 코드 201과 새 작업을 JSON으로 응답하세요. Location 헤더를 해당 작업의 URL로 설정하세요. 작업 4의 경우 /api/tasks/4입니다. 새로 실행했을 때 응답 본문은 다음과 같습니다(createdAt은 전송하는 시각입니다).
    { "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" }
  4. 본문에 title이 없으면 상태 코드 400과 { "error": "title is required" }를 응답하고, 목록에는 아무것도 추가하지 마세요.

직접 해 보세요: POST를 선택하고, 경로에 /api/tasks, 본문에 { "title": "Order new chairs" }를 입력하세요. 상태 코드 201과 위에 나온 id가 4인 작업이 표시되고, 응답의 Headers 탭에는 Location: /api/tasks/4가 표시됩니다. GET /api/tasks/4를 전송하면 같은 작업이 반환됩니다. 그런 다음 {}를 /api/tasks에 POST로 전송하세요. 오류와 함께 상태 코드 400이 반환되고, 거부된 POST는 아무것도 추가하지 않았으므로 GET /api/tasks에는 여전히 작업 4개가 표시됩니다.

직접 해보기

import { Router } from 'express';
import { tasks } from '../store.js';

const router = Router();

router.get('/', (req, res) => {
    res.json(tasks);
});

router.get('/:id', (req, res) => {
    const task = tasks.find((t) => t.id === Number(req.params.id));
    if (!task) {
        return res.status(404).json({ error: 'Task not found' });
    }
    res.json(task);
});

export default router;

REST API의 모든 레슨

직접 연습해 보세요: Express 플레이그라운드