일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- git 같은계정 다른 컴퓨터
- Spacer
- postcss
- 리스트 렌더링
- SCSS forward
- 프로그래머스 데브코스 프론트엔드
- 폼 입력 바인딩
- vue 이벤트 수신
- vue 지역 컴포넌트
- netlify redirect
- intersection opserver
- 이벤트 수식어
- 프로그래머스 K_Digital Training
- 프로그래머스 프론트엔드 데브코스
- 고양이 사진 검색기
- nextjs사용법
- KDT 프로그래머스
- react next
- vuex map
- 다른컴퓨터에서 git사용
- KDT 프로그래머스 데브코스 프론트엔드
- flex
- SCSS import
- 프로그래머스 데브코스
- 리액트
- SCSS extend
- Vue
- 쌓임맥락
- SCSS use
- vue mixin
- Today
- Total
혼자 적어보는 노트
[Node.js] NodeJS에 MySQL 연결하기 / Sequelize 본문
🔨 Community Server / Workbench 설치
https://dev.mysql.com/downloads/
MySql Community Downloads에서
DB server를 위한 MySql Community Server와
데이터베이스 내부에 저장된 데이터를 시각적으로 확인하기 위해 MySql Workbench를 설치해준다.
두 개를 따로 따로 설치하기 싫다면 MySQL Installer for Windows를 설치하는 과정에서
Community Server와 Workbench를 선택해서 설치할 수 있다.
나는 Installer for Windows를 사용했다.
Installer for Windows로 설치할 때 아래의 세 가지 부분만 체크하고 나머지는 기본 값으로 설정하면 된다.
1. 설치 진행 중에 Choosing a Setup Type 부분에서 Custom을 선택
2. select Products and Features 에서 MySql Community Server와 MySql Workbench를 골라서 설치
3. Accounts and Roles부분에서 비밀번호 설정
💻 명령프롬프트에서 Mysql 실행하기
설치 완료 후 설치된 폴더로 이동하여
명령 프롬프트를 통해서 MySQL에 접속한다.
MySQL 설치 시 기본 경로:
C:\Program Files\MySQL\MySQL Server 8.0\bin
아래의 명령어 입력
mysql -h localhost -u root -p
명령어를 입력하면 비밀번호 입력 창이 뜨게 되며
Mysql을 설치할 때 설정했던 비밀번호를 입력하면 된다.
프롬프트창에 mysql> 으로 표시되면 연결이 된 것이다.
다시 콘솔로 이동을 하려면 exit를 입력하면 된다.
* 혹시나 비밀번호를 변경하고 싶다면 mysql이 연결된 상태에서 아래의 명령어를 입력해준다.
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '변경할 비밀번호';
🔗 Node.js에 Sequelize 세팅하기
✅ 관련 라이브러리 설치
아래의 명령어를 통해 필요한 라이브러리를 다운받아준다.
npm i sequelize sequelize-cli mysql2
sequelize: 자바스크립트로 sql을 조작할 수 있게 해주는 라이브러리
mysql2: mysql과 node, sequelize를 연결시켜주는 드라이버
✅ 시퀄라이즈 세팅
설치가 완료되면 아래의 명령어로 시퀄라이즈 세팅을 진행한다.
npx sequelize init
터미널이 위와 같이 나타나며 폴더에 config, migrations, models 폴더가 생성된 것을 확인할 수 있다.
✅ config.json 설정
config폴더 안의 config.json 파일에서
개발용(development)/ 테스트용(test) / 배포용(production) 정보를 입력할 수 있다.
일단 나는 database는 진행하고 있는 프로젝트 명으로 전부 동일하게 설정하였고
development 부분의 password부분은 기존의 MySQL 비밀번호를 적어주었다.
❗ config.json에서 MySQL의 비밀번호가 틀릴 경우 sequelize db 생성 시 에러가 발생함.
✅ models 설정
model폴더 안의 index.js 파일에서 Node와 Mysql을 연결하기 위한 세팅을 해 준다.
[index.js]
const Sequelize = require("sequelize");
const env = process.env.NODE_ENV || "development";
// 배포 시 process.env.NODE_ENV 부분이 production으로 변경
// 아무것도 설정되어있지 않다면 development
const config = require("../config/config")[env];
// 현재 env는 development이기 때문에 config에서 설정한 development를 가지고 옴
const db = {};
const sequelize = new Sequelize(config.database, config.username, config.password, config);
//sequelize가 Node와 MySQL을 연결
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
기본 설정이 끝났다면 어떤 데이터를 받을 지 테이블을 정의해야 하는데
MySQL에서는 table이라고 하고 Node에서는 model이라고 한다.
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define(
"User",
{
email: {
type: DataTypes.STRING(30),
allowNull: false,
unique: true,
},
username: {
type: DataTypes.STRING(30),
allowNull: false,
},
password: {
type: DataTypes.STRING(100),
allowNull: false,
},
},
{
charset: "utf8",
collate: "utf8_general_ci",
timestamps: true,
paranoid: true,
}
);
User.associate = (db) => {};
return User;
};
sequelize.define
sequelize.define은 아래와 같이 사용이 가능하다.
sequelize.define( "모델(테이블)이름", 컬럼 속성 설정, 모델(테이블) 옵션 설정 )
모델 이름
시퀄라이즈는 자동으로 소문자, 복수로 users의 테이블이 생성된다. (User => users)
만약 이름을 직접 지정하고 싶다면 세 번째 인자인 테이블 설정에서 tableName: "user"으로 지정하거나
freezeTableName : true를 하여 복수화를 중지시킨다.
컬럼 속성 설정
데이터를 어떤 형태로 저장할 지, 모델의 컬럼 속성을 정의 한다.
type: 데이터 타입을 정의
DataTypes에는 STRING, TEXT, INTEGER, FLOAT, BOOLEAN 등 검증을 위한 타입, 데이터의 길이를 설정해 줄 수 있다.
*password와 같은 암호화가 필요한 데이터의 경우 암호화된 문자열의 길이까지 고려해주어야 함.
allowNull : 필수로 입력해야 하는 부분이라면 falseunique : 고유한 값이라면 true
defaultValue : 기본 값 지정
comment: 해당 column에 대한 설명
이 외에도 많은 속성들이 있다.
* 참고로 시퀄라이즈는 id를 기본키로 연결하므로 id 컬럼은 따로 적을 필요가 없다.
모델 옵션 설정
charset : "utf8" / collate : "utf8_general_ci"charset과 collate를 모두 설정해야 한글이 입력된다.이모티콘 입력도 허용하고 싶다면 charset: "utf8mb4" / collate: "utf8mb4_general_ci" 를 설정한다.tableName : 테이블 이름 설정freezeTableName : true로 설정 시 자동으로 이름이 복수화가 되지 않는다.underscored : 기본적으로 테이블 명과 컬럼명을 camelCase로 생성하는데 true설정 시 스네이크 케이스 형식으로 변경timestamps : createdAt과 updatedAt 컬럼이 생성되고 데이터가 생성되는 시간과 수정되는 시간이 나타난다.
createAt과 updateAt 중 하나만 사용하고 싶다면 아래와 같이 적는다.
{
timestamps: true,
createdAt: true,
updatedAt: false,
}
paranoid : deletedAt이라는 컬럼이 추가되며 데이터를 삭제하라는 쿼리가 들어왔을 때 해당 데이터를 삭제하지 않고
삭제되는 시점을 등록한다. 데이터를 복구하기 위해 사용된다.
* timestamps를 true로 설정해야 함.
.associate
현재 예제로 User 모델 하나만 만들었지만
여러 개의 데이터들이 생기고 모델들을 생성하게되면
각각의 데이터들의 연관성을 지정을 해야 하는데 associate에서 할 수 있다.
약간의 복잡한 개념이 있기 때문에 이후의 포스팅에서 정리해 볼 예정이다.
만든 모델 index.js에서 불러오기
[models/index.js]
const Sequelize = require("sequelize");
const env = process.env.NODE_ENV || "development";
const config = require("../config/config")[env];
const db = {};
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.User = require("./user")(sequelize, Sequelize);
// 만든 User의 모델을 불러온다.
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
🔗 sequelize 연결
app.js 로 돌아와서 세팅해놓은 sequelise를 연결 해준다.
const express = require("express");
const postRouter = require("./routes/post");
const db = require("./models");
db.sequelize
.sync()
.then(() => {
console.log("★DB 연결 성공★"); // db연결 성공 시 출력 됨
})
.catch(console.error);
const app = express(); // express 호출
const port = 8080;
//... 생략
아래의 명령어로 db를 생성해준다.
npx sequelize db:create
🙌 서버 실행
node app
node app이나 지정해놓은 명령어를 입력하여 서버를 실행하고
console에 ★DB 연결 성공★ 메세지가 출력되면 완료!
✅ 워크벤치 확인
워크벤치에 들어가서 해당 connection을 클릭하여 비밀번호를 입력하고
왼쪽 메뉴의 Schemas - (config에서 설정한 database이름)- Tables를 클릭하면
아까 만든 모델(테이블)이 나타난다.✨✨
명령프롬프트에서 확인하는 법
mysql> show databases;
위 명령어를 입력하면 database의 목록이 나온다.
mysql> use [데이터베이스 이름]
mysql> show tables;
위 명령어를 입력하면 만든 테이블들이 나타난다.
* use 명령어를 먼저 사용해야 show tables가 가능함.
'NodeJS' 카테고리의 다른 글
[Node.js] 중복 로그인 검사 미들웨어 / middleware (0) | 2022.03.21 |
---|---|
[Node.js] sequelize 연관된 데이터 합쳐서 불러오기 / attributes, include (0) | 2022.03.20 |
[Node.js] bcrypt로 암호화 (0) | 2022.03.18 |
[Node.js] sequelize 관계 설정(association)하기 / 1:1 / 1:M / N:M (0) | 2022.03.17 |
[Package] http-server / live-server (0) | 2021.12.02 |