TypeScript와 Express를 사용하여 REST API 구축

TypeScript와 Express는 견고한 REST API를 구축하기 위한 강력한 조합입니다. TypeScript는 유형 안전성, 더 나은 툴링, 향상된 개발 경험을 제공하는 반면 Express는 Node.js를 위한 미니멀리스트 웹 프레임워크입니다. 이 가이드는 TypeScript와 Express를 사용하여 REST API를 구축하는 단계를 안내합니다.

프로젝트 설정

프로젝트를 위한 새 디렉토리를 만들고 Node.js 애플리케이션을 초기화하는 것으로 시작합니다.

mkdir typescript-express-api
cd typescript-express-api
npm init -y

다음으로, Express와 TypeScript에 필요한 종속성을 설치합니다.

npm install express
npm install --save-dev typescript ts-node @types/node @types/express

TypeScript를 구성하려면 tsconfig.json 파일을 만듭니다. 다음 명령을 실행합니다.

npx tsc --init

프로젝트의 필요에 맞게 tsconfig.json 파일을 수정하여 "strict", "esModuleInterop"과 같은 옵션을 활성화하고 출력 디렉터리를 "dist"으로 설정합니다.

Express 서버 생성

src라는 이름의 새 폴더를 만들고 그 안에 index.ts라는 이름의 파일을 만듭니다. 이 파일은 Express 서버의 진입점 역할을 합니다.

import express, { Request, Response } from 'express';

const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.json());

app.get('/', (req: Request, res: Response) => {
  res.send('Hello, TypeScript and Express!');
});

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

서버를 실행하려면 다음 명령을 사용하세요.

npx ts-node src/index.ts

API 경로 정의

src 안에 routes라는 이름의 새 폴더를 만듭니다. 이 폴더에서 userRoutes.ts라는 이름의 파일을 만들어 사용자 관련 요청을 처리하기 위한 경로를 정의합니다.

import { Router, Request, Response } from 'express';

const router = Router();

router.get('/users', (req: Request, res: Response) => {
  res.json({ message: 'Get all users' });
});

router.post('/users', (req: Request, res: Response) => {
  const user = req.body;
  res.json({ message: 'User created', user });
});

export default router;

index.ts 파일에서 userRoutes를 가져와서 애플리케이션에서 사용합니다.

import userRoutes from './routes/userRoutes';

app.use('/api', userRoutes);

컨트롤러 및 서비스 계층 생성

컨트롤러와 서비스에 대해 별도의 레이어를 만들어 코드를 구성합니다. src 내부에 두 개의 새 폴더를 만듭니다. controllersservices.

controllers 폴더에 userController.ts이라는 이름의 파일을 만듭니다.

import { Request, Response } from 'express';
import { getAllUsers, createUser } from '../services/userService';

export const getUsers = (req: Request, res: Response) => {
  const users = getAllUsers();
  res.json(users);
};

export const addUser = (req: Request, res: Response) => {
  const newUser = req.body;
  const user = createUser(newUser);
  res.json(user);
};

services 폴더에 userService.ts이라는 이름의 파일을 만듭니다.

interface User {
  id: number;
  name: string;
}

let users: User[] = [];

export const getAllUsers = (): User[] => {
  return users;
};

export const createUser = (user: User): User => {
  users.push(user);
  return user;
};

다음 컨트롤러를 사용하도록 userRoutes.ts를 업데이트하세요.

import { Router } from 'express';
import { getUsers, addUser } from '../controllers/userController';

const router = Router();

router.get('/users', getUsers);
router.post('/users', addUser);

export default router;

REST API 테스트

REST API를 테스트하려면 Postman이나 curl과 같은 도구를 사용하여 엔드포인트에 요청을 보냅니다. 서버를 시작하고 /api/users에 GET 요청을 하고 JSON 페이로드와 함께 /api/users에 POST 요청을 합니다.

결론

이러한 단계를 따르면 TypeScript와 Express를 사용하여 REST API를 만들 수 있습니다. TypeScript는 유형 안전성과 더 나은 개발 경험을 추가하는 반면 Express는 RESTful 서비스를 구축하기 위한 간단하고 강력한 프레임워크를 제공합니다. 이 설정은 검증, 오류 처리 및 더 복잡한 비즈니스 로직을 추가하여 더욱 향상될 수 있습니다.