프로그래밍 언어/NODE JS

프로젝트 구조 갖추기 (1)

· 코딩마이데이

먼저 nodebird라는 폴더를 만듭니다. 항상 package.json을 제일 먼저 생성해야 합니다. package.json을 생성해주는 npm init  명령어를 호출해도 되고, 직접 만들어도 됩니다. version이나 description, author, license라는 원허는 대로 자유롭게 수정해도 괜찮습니다.

scripts 부분에 start 속성은 잊지 말고 넣어줘야 합니다.

{
    "name": "nodebird",
    "version": "0.0.1",
    "description": "익스프레스로 만드는 SNS 서비스",
    "main": "app.js",
    "scripts": {
        "start": "nodemon app"
    },
    "author": "cherry",
    "license": "MIT"
}

 

nodebird 폴더 안에 package.json을 생성했다면 이제 시퀄라이즈를 설치합니다. 이 프로젝트에서는 NoSQL 대신 SQL(MySQL)을 데이터베이스로 사용할 것입니다. 사용자와 게시물 간, 게시물과 해시태그 간의 관계가 중요하므로 관계형 데이터베이스인 MySQL을 선택했습니다.

$ npm i sequelize mysql2 sequelize-cli
$ npx sequelize init

 

npm i sequelize mysql2 sequelize-cli 명령어를 호출하면 node_modules 폴더와 package-lock.json이 생성됩니다. 또한, npx sequelize init 명령어를 호출하면 config, migrations, models, seeders 폴더가 생성됩니다. npx 명령어를 사용하는 이유는 전역 설치(npm i -g)를 피하기 위해서입니다.

이제 다른 폴더도 생성합니다. 템플릿 파일을 넣을 views 폴더, 라우터를 넣을 routes 폴더, 정적 파일을 넣을 public 폴더가 필요합니다.

마지막으로 익스프레스 서버 코드가 담길 app.js와 설정값들을 담을 .env 파일을 nodebird 폴더 안에 생성합니다. 폴더 구조는 다음과 같습니다.

nodebird 폴더 구조

 

이와 같은 구조라면 폴더 구조가 올바르게 설정된 것입니다.

먼저 필요한 npm 패키지들을 설치하고 app.js를 작성합니다. 템플릿 엔진은 넌적스를 사용할 것입니다.

$ npm i express cookie-parser express-session morgan multer dotenv nunjucks
$ npm i -D nodemon

 

app.js

const express = require("express");
const cookieParser = require("cookie-parser");
const morgan = require("morgan");
const path = require("path");
const session = require("express-session");
const nunjucks = require("nunjucks");
const dotenv = require("dotenv");

dotenv.config();
const pageRouter = require("./routes/page");

const app = express();
app.set("port", process.env.PORT || 8001);
app.set("view engine", "html");
nunjucks.configure("views", {
  express: app,
  watch: true,
});

app.use(morgan("dev"));
app.use(express.static(path.join(__dirname, "public")));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(
  session({
    resave: false,
    saveUninitialized: false,
    secret: process.env.COOKIE_SECRET,
    cookie: {
      httpOnly: true,
      secure: false,
    },
  })
);

app.use("/", pageRouter);

app.use((req, res, next) => {
  const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
  error.status = 404;
  next(error);
});

app.use((err, req, res, next) => {
  res.locals.message = err.message;
  res.locals.error = process.env.NODE_ENV !== "production" ? err : {};
  res.status(err.status || 500);
  res.render("error");
});

app.listen(app.get("port"), () => {
  console.log(app.get("port"), "번 포트에서 대기중");
});

 

라우터로는 현재 pageRouter만 있지만, 추후에 더 추가할 예정입니다. 라우터 이후에는 404 미들웨어와 에러 처리 미들웨어가 있습니다. 마지막으로 앱을 8001번 포트에 연결했습니다.

.env

COOKIE_SECRET=cookieSecret

 

하드 코딩된 비밀번호가 유일하게 남아 있는 파일이 있습니다. 시퀄라이즈 설정을 담아둔 config.json이며, JSON 파일이라 process.env 를 사용할 수 없습니다.

'프로그래밍 언어 > NODE JS' 카테고리의 다른 글

데이터베이스 세팅하기 (1)  (0) 2025.10.11
프로젝트 구조 갖추기 (2)  (0) 2025.10.08
쿼리 수행하기  (0) 2025.10.02
스키마 정의하기  (0) 2025.09.29
몽고디비 연결하기  (1) 2025.09.26