13주차 회의록 - Sieun1126/Final_projects GitHub Wiki

데이터 관리와 API 설계

1. 데이터 관리

  1. JSON 데이터 생성 src/data/data.json 파일 생성 후 초기 데이터 추가
[
    {
        "id": 1,
        "name": "WonGyeong Choi",
        "email": "[email protected]"
    },
    {
        "id": 2,
        "name": "Sieun Kim",
        "email": "[email protected]"
    }
]
  1. 데이터 읽기/쓰기 유틸리티 함수 작성 src/utils/fileHandler.ts를 생성하고 데이터 관리를 위한 함수를 작성
import { promises as fs } from 'fs';

const filePath = './src/data/data.json';

// 데이터 읽기
export const readData = async () => {
    const data = await fs.readFile(filePath, 'utf-8');
    return JSON.parse(data);
};

// 데이터 쓰기
export const writeData = async (data: any) => {
    await fs.writeFile(filePath, JSON.stringify(data, null, 2));
};

2. RESTful API 설계

  1. API 라우트 생성 src/routes/api.ts 파일 생성 후 아래 내용 추가
import { Router, Request, Response } from 'express';
import { readData, writeData } from '../utils/fileHandler';

const router = Router();

// GET: 모든 사용자 데이터 가져오기
router.get('/users', async (req: Request, res: Response) => {
    const data = await readData();
    res.json(data);
});

// POST: 새 사용자 추가
router.post('/users', async (req: Request, res: Response) => {
    const newUser = req.body;
    const data = await readData();

    newUser.id = data.length + 1; // ID 자동 생성
    data.push(newUser);

    await writeData(data);
    res.status(201).json(newUser);
});

export default router;
  1. 메인 서버에 API 연결 src/app.ts에 API 추가
import express from 'express';
import apiRoutes from './routes/api';

const app = express();
const PORT = 3000;

// JSON 파싱 미들웨어 추가
app.use(express.json());

// API 라우트 추가
app.use('/api', apiRoutes);

app.listen(PORT, () => {
    console.log(`Server is running on http://localhost:${PORT}`);
});

3. 테스트 실행

  1. 서버 실행
npm run dev
  1. Postman을 사용해 API 테스트
  • GET/api/users
[
    {
        "id": 1,
        "name": "WonGyeong Choi",
        "email": "[email protected]"
    },
    {
        "id": 2,
        "name": "Sieun Kim",
        "email": "[email protected]"
    }
]
  • POST/api/users
    • 요청
{
    "name": "Eunjin Joe",
    "email": "[email protected]"
}
  • 응답
{
    "id": 3,
    "name": "Eunjin Joe",
    "email": "[email protected]"
}