백엔드/Node.js

[Node.js] Node.js + Express + Sequelize + MySQL 프로젝트 세팅 방법

순코딩 2024. 10. 30. 16:18

들어가기

해당 게시물은 Node.js 와 MySQL이 설치된 환경을 가정합니다.
 

Node.js — Run JavaScript Everywhere

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

 

MySQL

Over 2000 ISVs, OEMs, and VARs rely on MySQL as their products' embedded database to make their applications, hardware and appliances more competitive, bring them to market faster, and lower their cost of goods sold. Learn More »

www.mysql.com

 

최종 템플릿

 

GitHub - LDK1009/template-node.js-express: API 서버 개발을 위한 템플릿입니다.

API 서버 개발을 위한 템플릿입니다. Contribute to LDK1009/template-node.js-express development by creating an account on GitHub.

github.com

 

시작

1. MySQL Connection 생성

MySQL Workbench를 실행합니다.

+ 버튼을 누릅니다.

입력 폼을 채워주세요.

필자는 Connection Name만 입력하고 나머지는 기본값으로 설정하였습니다.

비밀번호 설정을 원하신다면 'Store in Valut ...' 버튼을 눌러주세요.

생성된 커넥션을 클릭해 입장합니다.

커넥션 생성 끝.

 

2. 스키마 생성

스키마 이름을 입력합니다.

 커넥션 이름과 동일해도 무방합니다.

스키마 생성 완료

홈으로 돌아가 커넥션에 기본 스키마를 적용한다.

위에서 생성한 스키마 이름을 작성하면 된다.

 

스키마 생성 끝.

 

3. 테이블 생성

필자는 ERDCloud를 사용해 ERD 작성과 SQL문 작성을 하였다.

https://inpa.tistory.com/entry/ERD-CLOUD-%E2%98%81%EF%B8%8F-ERD-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8%EC%9D%84-%EC%98%A8%EB%9D%BC%EC%9D%B8%EC%97%90%EC%84%9C-%EA%B7%B8%EB%A0%A4%EB%B3%B4%EC%9E%90

 

☁️ ERD CLOUD - ERD 다이어그램을 온라인에서 그려보자

ERD CLOUD 프론트엔드 작업을 하기전에 UI 와이어프레임을 그리는 과정은 중요하듯이, 백엔드에서도 데이터베이스 모델링 설계 과정은 매우 중요하다. 데이터베이스 모델링을 할 때 ERD 다이어그램

inpa.tistory.com

 

USE MyProject;

CREATE TABLE `products` (
	`id`	int	NOT NULL,
	`name`	varchar(255)	NOT NULL,
	`link`	varchar(255)	NOT NULL,
	`src`	varchar(255)	NOT NULL,
	`major_category`	varchar(100)	NOT NULL,
	`middle_category`	varchar(100)	NOT NULL
);

SQL문을 실행하면 하단에 실행 결과 로그가 찍힌다.

성공적으로 테이블이 생성되었다면 좌측 사이드바의 우측 상단에 있는 새로고침 버튼을 누른다.

드롭다운을 열어 생성된 테이블을 확인한다.

테이블 생성 끝.

 

4. 프로젝트 세팅

# package.json 생성
npm init -y

# Express, Sequelize 및 MySQL 관련 패키지 설치
npm install express sequelize mysql2 dotenv

# Sequelize CLI 설치 (Migration, Seed 등을 위한 툴)
npm install --save-dev sequelize-cli

 

코드 편집기를 통해 프로젝트 폴더를 열고 터미널에 위 명령어를 입력한다.

 

npx sequelize-cli init

위 명령어를 사용해 기본 설정 파일과 디렉토리 구조를 만듭니다.

 

project
├── config
│   └── config.json    # 데이터베이스 설정
├── models
│   ├── index.js       # 모델 초기화 코드
│   └── (Your Models)  # 모델 파일이 들어갈 디렉토리
├── migrations         # 마이그레이션 파일 저장소
└── seeders            # 더미 데이터 삽입 스크립트 저장소

명령어 입력 후 폴더 구조는 위와 같습니다.

 

.env 파일을 생성하고 해당 파일에 DB 정보를 작성합니다.

이 때 DB 정보는 MySQL에서 확인할 수 있습니다.

 

 

config/config.json 파일명을 config.js로 변경한다.

require('dotenv').config(); // .env 파일에서 환경변수를 불러오기 위한 설정

module.exports = {
  development: {
    username: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB_NAME,
    host: process.env.DB_HOST,
    dialect: process.env.DB_DIALECT,
  },
  test: {
    username: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: "test_database",
    host: process.env.DB_HOST,
    dialect: process.env.DB_DIALECT,
  },
  production: {
    username: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: "production_database",
    host: process.env.DB_HOST,
    dialect: process.env.DB_DIALECT,
  },
};

config.js에 위 코드를 복붙한다.

파일명을 변경했기 때문에 models/index.js에서 파일 경로도 변경한다.

 

 

npx sequelize-cli model:generate --name Products --attributes name:string,link:string,src:string,major_category:string,middle_category:string

위 코드를 터미널에 복붙한다. (Sequelize CLI를 사용하여 Product 모델을 생성)

 

// 수정 편의를 위한 줄바꿈 버전이다.
// 터미널에 입력하기 전 줄바꿈을 삭제해야한다.
npx sequelize-cli model:generate --name Products --attributes 
name:string,
link:string,
src:string,
major_category:string,
middle_category:string

정상적으로 실행됐다면 models 폴더 하위에 products.js 라는 모델 파일이 생성된다.

 

 

npx sequelize-cli db:migrate

데이터베이스에 테이블을 생성하기 위해 마이그레이션을 실행한다. (프로젝트에 작성된 모델 파일들을 데이터베이스 테이블로 마이그레이션)

마이그레이션을 실행하면 MySQL에 products 테이블과 sequelizemeta 테이블이 생성한다. (이 때, 우리는 3번 과정에서 이미 SQL문을 사용하여 products 테이블을 생성한 상태이기 때문에 위 코드를 실행해도 기존 products 테이블은 변경되지 않는다.)

실행 결과 products 테이블과 sequelizemeta 테이블이 생성된 것을 확인할 수 있다.

const express = require('express');
const { sequelize } = require('./models');
const dotenv = require('dotenv');
dotenv.config();

const app = express();
app.use(express.json());

// API Route
const PORT = process.env.PORT || 3000;

sequelize.sync()
  .then(() => {
    console.log('Database connected!');
    app.listen(PORT, () => {
      console.log(`Server is running on port ${PORT}`);
    });
  })
  .catch(err => console.log('Error: ' + err));

프로젝트 폴더에 app.js 파일을 생성하고 위 코드를 복붙한다.

 

node app.js

터미널에 위 코드를 실행하여 서버를 실행시킨다.

데이터베이스가 정상적으로 연동되었다면 'Server is running on port 3000'을 출력하고 에러가 발생했다면 에러 메세지를 출력한다.

 

프로젝트 세팅 끝.

 

추가

만약 sequelize-cli로 모델 생성 이후에 모델을 수정하고 이를 DB에 마이그레이션 하고싶다면?
 

[NodeJS] Sequelize로 마이그레이션 진행하기

nodejs로 개발을 하던 중 데이터베이스 테이블에 컬럼을 추가할 일이 있었다. 그때 사용한 방법을 기록해볼까 한다. 1. 데이터베이스 마이그레이션? 어디서 많이 들어보긴했지만 정확한 의미는 잘

llshl.tistory.com