express 서버에 OOP를 적용해 보자.
// app.js
const express = require("express");
const logger = require("morgan");
const cookieParser = require("cookie-parser");
const db = require("./models");
class App {
constructor() {
this.app = express();
this.dbConnection();
this.setMiddleWare();
this.getRouting();
}
dbConnection() {
db.sequelize
.authenticate()
.then(() => {
console.log("서버와 연결 성공");
return db.sequelize.sync();
})
.then(() => {
console.log("Sync 완료");
})
.catch((err) => {
console.error("DB와 연결할 수 없음:", err);
});
}
setMiddleWare() {
this.app.use(logger("dev"));
this.app.use(express.json());
this.app.use(express.urlencoded({ extended : true}));
this.app.use(cookieParser());
}
getRouting() {
this.app.use(require("./controllers"));
}
}
module.exports = new App().app;
App.js
에서 사용할 모듈들을 require
하고
class를 사용해 application 객체를 생성할 준비를 한다.
construct
생성자 함수에 서버 실행 시 사용할 메서드와 application을 초기화한다.
마지막으로 클래스로 정의한 객체를 모듈화 해준다.
함수는 호이스팅이 발생하기 때문에 함수를 호출하는 코드가 함수 선언 코드보다 먼저 나와도 괜찮지만, 클래스로 객체를 생성할 때는 호이스팅이 발생하지 않기 때문에 항상 클래스 선언이 먼저 되어야 한다.
// server.js
const app = require("./app.js");
const port = 3000;
app.listen(port, function () {
console.log("Express listening on port", port);
});
server.js
파일은 위 코드와 같이 application 서버를 실행하는데만 집중한다.