본문 바로가기
Backend

백엔드 코드 패턴 정리

by KWONE 2025. 10. 7.

 


🧩 1. 서버 기본 구조 패턴

 
// 🧱 기본 Express 서버 패턴
const express = require('express');
const app = express();
const PORT = 3000;

app.get('/', (req, res) => {
  res.send('Hello Express!');
});

app.listen(PORT, () => {
  console.log(`${PORT}번 포트에서 서버 실행 중`);
});

패턴 핵심 정리

  • express() : 서버 객체 생성
  • app.get('/', callback) : 요청 라우팅 (경로와 콜백 연결)
  • res.send() : 클라이언트로 응답 전송
  • app.listen() : 서버 구동

실험해볼 것

  • res.send() 대신 res.json() 쓰면 결과가 어떻게 달라지는가?
  • 포트를 8080으로 바꾸면 접근 URL은 어떻게 되나?

🛣 2. 라우터 분리 패턴

 
// routes/user.js
const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
  res.send('User list');
});

router.post('/', (req, res) => {
  res.send('User created');
});

module.exports = router;

// app.js
const express = require('express');
const app = express();
const userRouter = require('./routes/user');

app.use('/users', userRouter);

패턴 핵심 정리

  • express.Router() : 라우팅 전용 객체 생성
  • module.exports : 라우터 외부로 내보내기
  • app.use('/경로', router) : 경로 접두어 붙여 등록

기억 포인트
라우터 파일 하나는 “하나의 기능 단위(사용자, 게시글 등)” 담당한다.


🗂 3. 미들웨어 패턴

 
// 공통 로그 미들웨어 예시
app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next(); // 다음 미들웨어로 이동
});

패턴 핵심 정리

  • app.use() : 모든 요청에 대해 미들웨어 실행
  • next() : 다음 미들웨어 또는 라우터로 제어 이동
  • next('route') : 현재 라우터 건너뛰기

실험해볼 것

  • next()를 안 쓰면 요청이 멈추는 이유는?
  • 특정 경로(/api)에만 적용하려면 어떻게 할까?

💾 4. Sequelize (DB 연결) 패턴

// models/index.js
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('db_name', 'user', 'password', {
  host: 'localhost',
  dialect: 'mysql',
});

sequelize.authenticate()
  .then(() => console.log('DB 연결 성공'))
  .catch(err => console.error('DB 연결 실패:', err));

module.exports = sequelize;

패턴 핵심 정리

  • new Sequelize(database, user, password, config) : 연결 설정
  • sequelize.authenticate() : 연결 테스트
  • 모델 정의 시 sequelize.define('User', {...}) 사용

기억 포인트

  • 연결은 한 번만 설정하고 여러 모델이 공유한다.

🧠 5. 모델(Model) 정의 패턴

 
// models/User.js
const { DataTypes } = require('sequelize');
const sequelize = require('./index');

const User = sequelize.define('User', {
  name: { type: DataTypes.STRING, allowNull: false },
  age: { type: DataTypes.INTEGER },
});

module.exports = User;

패턴 핵심 정리

  • sequelize.define() : 테이블 구조 정의
  • DataTypes : 자료형 지정
  • allowNull : null 허용 여부

🌐 6. REST API 패턴

HTTP 메서드의미예시
GET 데이터 조회 /users
POST 새 데이터 생성 /users
PUT 전체 수정 /users/:id
PATCH 일부 수정 /users/:id
DELETE 삭제 /users/:id

패턴 예시

router.get('/', getUsers);
router.post('/', createUser);
router.put('/:id', updateUser);
router.delete('/:id', deleteUser);

기억 포인트

  • URI는 명사, 동사는 HTTP 메서드로 표현한다.
  • 응답은 항상 JSON으로 반환하는 게 RESTful 관례.

🧩 7. 오류 처리 & 예외 패턴

 
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('서버 에러 발생');
});

패턴 핵심 정리

  • 에러 미들웨어는 4개의 인자 (err, req, res, next)
  • res.status(코드).send(메시지) : 상태코드와 함께 응답
  • 위쪽에서 throw new Error() 하면 여기서 잡힘

📜 8. 전체 구조 기억용 요약

 
프로젝트 구조 예시
📁 myapp
 ┣ 📁 routes
 ┃ ┗ user.js
 ┣ 📁 models
 ┃ ┣ index.js
 ┃ ┗ User.js
 ┣ app.js
 ┗ package.json

흐름 요약

  1. app.js → 서버 실행
  2. app.use('/users', userRouter) → 요청 전달
  3. userRouter → DB 접근 (모델 사용)
  4. Sequelize → MySQL과 통신
  5. 결과를 JSON으로 응답

 

'Backend' 카테고리의 다른 글

크리스마스 시즌 웹사이트를 만들었는데  (0) 2025.11.17
Express 미들웨어  (0) 2025.10.04
자유 게시판  (0) 2025.09.29