- [Node.js] 시퀄라이즈로 컬럼 또는 테이블 추가 방법2024년 06월 11일 09시 56분 26초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
1. 데이터 손실 없이 칼럼 추가 가능?
시퀄라이즈(Sequelize)는 DB 작업을 쉽게 할 수 있도록 도와주는 ORM 라이브러리이다. 시퀄라이즈는 모델을 통해 DB 테이블과 칼럼을 자동으로 생성해 준다. 기존 테이블에 칼럼을 추가할 경우 해당 테이블의 데이터에 손실이 발생할 수 있다. 여기에서는 데이터 손실 없이 칼럼을 추가하는 방법을 알아본다.
2. Node.js 프로젝트 생성
2.1. 프로젝트 생성
npm init2.2. express 설치
노드 서버를 구동하기 위해 설치한다.
npm install express --save😉 공식 문서 : https://expressjs.com/ko/starter/installing.html
2.3. nodemon 설치
프로젝트 코드 수정 시 자동으로 서버를 재시작하는 기능을 제공하기 때문에 편리하다.
npm i -D nodemon@2package.json 파일을 아래의 코드와 같이 수정한다.
{ // (생략) "scripts": { "dev": "nodemon app" }, // (생략) }서버를 nodemon으로 구동한다.
npm run dev3. 시퀄라이즈 설치
여기에서는 DBMS로 MySQL을 이용한다. 따라서 sequelize와 mysql2 라이브러리를 설치한다.
npm i sequelize sequelize-cli mysql24. 데이터 손실 없이 칼럼 추가
4.1. 마이그레이션 작업
"addcolumn"은 임의로 작명한 것으로서 자신이 알아보기 쉬운 이름으로 작명하면 된다. 명령을 실행하면 migrations폴더 안에 마이그레이션용 js파일이 생성된다.
npx sequelize migration:create --name addcolumn4.2. 칼럼 추가
마이그레이션으로 생성된 js 파일을 열어서 칼럼을 추가하는 코드를 아래와 같이 작성하면 된다.
'use strict'; /** @type {import('sequelize-cli').Migration} */ module.exports = { async up(queryInterface, Sequelize) { // ---추가---------------------------------------------- // table1이라는 테이블에 column2라는 새로운 컬럼을 추가한다. return queryInterface.addColumn("table1", "column2", { type: Sequelize.INTEGER, defaultValue: 0, }); // ----------------------------------------------------- }, async down(queryInterface, Sequelize) { // ---추가------------------------------------------------- // 위에서 추가한 내용을 롤백할때 사용하는 코드이다. return queryInterface.removeColumn("table1", "column2"); // -------------------------------------------------------- } };위 코드 작성 후 아래의 명령을 실행하면 table1이라는 테이블에 column2라는 새로운 컬럼을 추가한다.
npx sequelize db:migrate위의 결과를 취소할 때는 아래의 명령어를 실행하면 된다.
npx sequelize db:migrate:undo4.3. 모델에 컬럼 정보 추가
최종적으로 table1 테이블 모델(table1.js)에 column2라는 칼럼과 관련된 정보를 추가한다. 모델에 컬럼 정보를 추가해야 시퀄라이즈를 이용해 CRUD를 진행할 수 있다.
module.exports = (sequelize, DataTypes) => { const User = sequelize.define('Table1', { // (생략) // ---추가------------------------ column2:{ type: DataTypes.INTEGER, defaultValue: 0, } // ------------------------------- }, { modelName: 'Table1', tableName: 'table1', charset: 'utf8', collate: 'utf8_general_ci', // 한글 저장 sequelize, }); return Table1; };5. 새로운 테이블 추가
테이블 추가 생성의 경우 migrations를 사용할 필요가 없다.
models 폴더에 추가하려고 하는 테이블의 모델(js파일)을 추가하고 init-models.js에 반영한 후 프로젝트 실행하면 아래 코드와 같이 app.js에 작성되어 있는 db.sequelize.sync()를 통해-DB에 해당 테이블이 없을 경우-새로운 테이블이 자동 생성된다.
// (생략) db.sequelize.sync() .then(() => { console.log('db 연결 성공'); }) .catch(console.error); // (생략)모델 작성 시 id 칼럼은 기본값으로서 명시하지 않아도 생성되는데, 칼럼명을 다르게 할 경우 아래와 같이 명시할 수 있다.
const Sequelize = require("sequelize"); module.exports = function (sequelize, DataTypes) { return sequelize.define( "table1", { // ---기본키 컬럼명을 id가 아닌 table1_id로 설정한 경우--- table1_id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, primaryKey: true, }, // ----------------------------------------------------- }, { sequelize, tableName: "table1", timestamps: true, // createAt, updateAt 컬럼을 sequelize가 자동으로 생성하는 옵션이다. // ---검색을 빠르게 하기 위한 인덱스 설정--- indexes: [ { name: "PRIMARY", unique: true, using: "BTREE", fields: [{ name: "table1_id" }], }, ], // ---------------------------------------- } ); };
2024-11-05 추가
테이블을 추가할 때 DBMS에서 추가하고자 하는 테이블을 생성한 후-작업 중인 프로젝트의 기존 models 폴더와 파일들 삭제 후-sequelize-auto로-models 폴더와 파일들을-자동 생성하는 것이 효율적이다. 기존 DBMS로 부터 모델을 자동 생성하는 방법은 이 링크(https://postforty.tistory.com/477)를 참조하자!
728x90반응형'언어·프레임워크 > Node.js' 카테고리의 다른 글
[Node.js] axios에서 URL 인코딩 바디 적용 (1) 2024.12.03 [Node.js] 다중 환경 변수 .env 설정 (0) 2024.11.04 [Node.js][TROUBLESHOOTING] 객체에 엉뚱한 속성이??? (0) 2024.04.19 [Node.js] MySQL 날짜, 시간이 왜 UTC 시간으로 조회될까? (0) 2024.01.29 [Node.js] API 서버에 api-key 적용 및 Swagger 문서화 (0) 2024.01.25 다음글이 없습니다.이전글이 없습니다.댓글