📘 Express 프로젝트 구조란?
Express는 Node.js에서 백엔드 API 서버를 만들 때 가장 많이 쓰는 웹 프레임워크입니다.
프로젝트가 커질수록 “기능별로 코드를 나누어 관리”하는 게 핵심입니다.
/project-root
├── app.js # 서버 진입점, 모든 라우터/미들웨어 연결
├── routes/ # URL별 기능(회원, 채널 등) 라우터 파일 모음
│ ├── users.js
│ └── channels.js
├── controllers/ # 실질적 비즈니스 로직 (데이터 검증, 응답 등)
│ ├── userController.js
│ └── channelController.js
├── models/ # 데이터 관리(임시 DB/Map, 나중엔 DB연동)
│ ├── user.js
│ └── channel.js
└── package.json # 프로젝트 메타/모듈 정보
app.js: 서버 생성, 라우터 연결, 미들웨어 등록, 포트 열기 등 “프로젝트의 뇌/진입점” 역할
routes/: - URL과 HTTP 메서드별로 어떤 controller를 실행할지 지정 (주소/기능 분배)
controllers/: 실제로 클라이언트 요청을 처리하는 로직(데이터 체크, 응답 형식, 에러처리 등)
models/: 데이터 저장/조회/수정/삭제 담당 (실습에선 Map, 실무에선 DB와 연결)
const express = require('express');
const app = express();
app.use(express.json());
const userRouter = require('./routes/users');
const channelRouter = require('./routes/channels');
app.use('/', userRouter); // 회원 관련 주소(/join, /login, /users)
app.use('/channels', channelRouter); // 채널 관련 주소(/channels, /channels/:id)
app.listen(7777, () => {
console.log('서버가 7777번 포트에서 실행 중입니다.');
});
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');
router.post('/join', userController.join);
router.post('/login', userController.login);
router.get('/users', userController.getAll);
// ... (개별 조회/수정/삭제는 .route('/users/:id').get(...).put(...).delete(...))
module.exports = router;
// 실질적 처리 (ex: 회원가입)
exports.join = (req, res) => {
const { userId, password, name } = req.body;
// (유효성 체크 → models 호출 → 응답)
};
const db = new Map();
function createUser({ userId, password, name }) { ... }
function getUser(id) { ... }
module.exports = { createUser, getUser, ... }
예시로, 회원가입 요청의 경우
클라이언트 → /join(POST) → userRouter → userController.join → userModel.createUser → 응답 반환
이런 단계로 흘러간다.
이번에 Express 구조를 설계하면서,
개발자 입장에서 배운 점
TIP