MERN 스택을 활용하여 간단한 Todo 앱을 만들려고 합니다.
이번 포스팅에서는 Node.js 초기 프로젝트 설정과 Auth 및 Todo 라우팅 구성, 그리고 controllers 폴더까지 구현하는 과정을 정리합니다.
1. 프로젝트 초기화
먼저 프로젝트를 초기화하기 위해 npm init -y 명령을 실행하여 package.json을 생성합니다.
{
"name": "todo",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"dev": "nodemon src/index.js",
},
"keywords": [],
"author": "",
"license": "ISC",
"description": ""
}
- nodemon 설치 후 scripts에 "dev": "nodemon src/index.js" 추가 (저장 시 자동 반영)
이제 npm run dev를 실행하면 nodemon이 적용되어 코드 변경 시 자동으로 서버가 재시작됩니다.
그리고 필요한 패키지를 설치하고 ES 모듈(import 방식)을 사용하기 위해 type: module을 추가합니다.
{
"name": "backend",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"dev": "nodemon src/index.js"
},
"keywords": [],
"author": "",
"type": "module",
"license": "ISC",
"description": "",
"dependencies": {
"bcryptjs": "^3.0.2",
"cookie-parser": "^1.4.7",
"cors": "^2.8.5",
"dotenv": "^16.5.0",
"express": "^5.1.0",
"jsonwebtoken": "^9.0.2",
"mongoose": "^8.14.1"
},
"devDependencies": {
"nodemon": "^3.1.10"
}
}
2. Express 서버 설정 (app.js)
import express from 'express';
import authRoutes from './routes/auth.route.js';
import todoRoutes from './routes/todo.route.js';
import dotenv from 'dotenv';
dotenv.config();
const app = express();
const PORT = process.env.PORT || 3000;
app.use('/api/auth', AuthRoute);
app.use('/api/todo', TodoRoute);
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
현재는 auth 및 todo 라우터 설정을 구성한 상태입니다.
3. Auth 라우터 설정 (routes/auth.route.js)
import express from 'express';
import { register, login, logout } from '../controllers/auth.controller.js';
const router = express.Router();
router.post('/login', login);
router.post('/register', register);
router.post('/logout', logout);
export default router;
컨트롤러 파일 (controllers/auth.controller.js)
- controllers/ 폴더는 라우터에서 요청을 처리하는 함수들을 모아두는 곳입니다.
export const register = async (req, res) => {};
export const login = async (req, res) => {};
export const logout = async (req, res) => {};
현재 컨트롤러 내부 로직은 작성하지 않았으며, Postman으로 간단한 API 테스트만 진행했습니다.
5. Todo 라우터 설정 (routes/todo.route.js)
import express from 'express';
import { getAllTodos, getTodo, updateTodo, deleteTodo, addTodo } from '../controllers/todo.controller.js';
const router = express.Router();
router.get('/', getAllTodos); // 모든 Todo 조회
router.post('/', addTodo); // Todo 추가
router.put('/:id', updateTodo); // 특정 Todo 수정
router.get('/:id', getTodo); // 특정 Todo 조회
router.delete('/:id', deleteTodo); // 특정 Todo 삭제
export default router;
컨트롤러 파일(controllers/todo.controller.js)
export const getAllTodos = async (req, res) => {};
export const addTodo = async (req, res) => {};
export const updateTodo = async (req, res) => {};
export const getTodo = async (req, res) => {};
export const deleteTodo = async (req, res) => {};
현재 controllers/todo.controller.js도 컨트롤러 로직은 작성하지 않았고, Postman을 이용해 라우팅이 정상적으로 동작하는지 테스트하였습니다.
'Node.js > Todo' 카테고리의 다른 글
Google 로그인 구현 (OAuth 2.0 + JWT + Zustand) (0) | 2025.02.27 |
---|---|
회원가입 및 로그인 기능 구현 (0) | 2025.02.20 |
Todo CRUD API 구현하기 (0) | 2025.02.19 |
JWT 인증 방식 개선: 쿠키 기반에서 토큰 기반으로 전환 (0) | 2025.02.18 |
MongoDB 연결 및 회원가입 구현 (0) | 2025.02.17 |