MongoDB를 사용할 때는 ODM(Object Document Mapper) 도구인 mongoose 라이브러리를 활용해서 코드를 통해 db를 조작!
MySQL을 사용할 때는 ORM(Object Relational Mapper) 도구인 Sequelize 라이브러리를 활용해서 코드를 통행 db를 조작!
sequelize 설치
npm i sequelize mysql2 -S
// -S : 서브소프트웨어
npm i sequelize-cli -D
// -D : 개발단계에서만 사용한다는 의미
sequelize 기본 세팅
terminal에서 명령어를 입력하면 기본 디렉터리와 파일 구조가 자동으로 생성된다.
npx sequelize init
// —-force 옵션을 맨 뒤에 추가하면 강제로 초기화할 수도 있다.
DB models 생성
아래와 같이 model 명령어를 통해 모델과 마이그레이션 파일을 생성한다. 샘플은 Users 테이블을 만들고 그 안에 userId (integer) nickname(string), userPw(string) 칼럼을 생성한다. ⇒ 모델을 세팅하는 것뿐이며 ( 실제 테이블이 만들어지는 것은 아니다. )
npx sequelize model:generate --name Userstest --attributes userId:string,nickname:string,userPw:string
결과로 해당 테이블 파일이 생성된다.
- migrations 디렉터리 내 '~ userstest.js'
- models 디렉터리 내 'userstest.js'
⇒ 위 두 파일 모두 생성하는 기준에 따라 수정한다. models도 pk설정 필수!!!
ex. models > user.js
userEmail: {primaryKey: true, type: DataTypes.STRING,},
nickName: DataTypes.STRING,
*수정 안 하면 필드 리스트 관련 오류가 발생한다.
DB 생성
아래와 같이 db:create 명령어를 통해 데이터베이스를 생성한다.
이때 이전 단계에서 config.js 파일 내 입력한 mysql 서버 정보를 기준으로 생성된다.
npx sequelize db:create
Table 마이그레이션
아래와 같이 db:migrate 명령어를 통해 테이블 모델을 마이그레이트 한다.
npx sequelize db:migrate
이때 이전 단계에서 생성한 migrations 디렉터리 내 js 파일을 기준으로 생성된다
따라서 특정 칼럼 속성을 수정하거나 새로운 칼럼이 필요한 경우 해당 js파일을 수정한 후 테이블을 재생성하면 된다.
*migrations 내 생성된 파일을 살펴보면 table명칭에 s가 자동으로 추가되는 점 유의! (필요시 직접 명칭을 수정하여 적용할 수 있다.)
await queryInterface.createTable('Userstests' ~
Seed 활용하여 기초 데이터 구성
아래와 같이 명령어를 통해 seeders 디렉터리 내 js 파일을 생성한다.
npx sequelize-cli seed:generate --name Userstest
생성된 seed 파일 내 정보를 입력한다.
*원활한 테스트를 위해 createdAt, updatedAt 칼럼 속성을 null 허용으로 바꾼 후 아래 내용을 진행했다.
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
/**
* Add seed commands here.
*
* Example:
* await queryInterface.bulkInsert('People', [{
* name: 'John Doe',
* isBetaMember: false
* }], {});
*/
//첫 번째 인자 : seed 적용할 테이블이름
//두 번째 인자 : 입력할 컬럼과 데이터
await queryInterface.bulkInsert('Userstests', [{
userId: 'testId',
nickname: 'testNick',
userPw: 'testPw1234',
}], {});
},
//undo 시 실행할 코드
down: async (queryInterface, Sequelize) => {
/**
* Add commands to revert seed here.
*
* Example:
* await queryInterface.bulkDelete('People', null, {});
*/
await queryInterface.bulkDelete('Userstests', null, {});
}
};
아래와 같이 db:seed 명령어를 통해 seed 파일을 적용한다.
//특정 파일 선택하여 적용
npx sequelize db:seed --seed 파일명
[example]
npx sequelize db:seed --seed 20211014060815-Userstest.js
//전체 seed 파일 적용
npx sequelize db:seed:all
//위 코드 에서 down에 입력한 내용 실행
npx sequelize db:seed:undo
mysql 워크벤치 내 테이블을 조회해보면 레코드가 seed 파일을 기준으로 추가된 것을 확인할 수 있다.
마이그레이션 파일을 재생성해야 하는 경우
npx sequelize-cli migration:generate --models파일이름
'개발일지' 카테고리의 다른 글
AWS EC2에 MySQL 세팅하는 방법 기록 (0) | 2021.10.27 |
---|---|
JOI 를 활용한 유효성 체크 기록 (middleware로 확장성있게 활용하자) (0) | 2021.10.14 |
[Javascript] 요소 노드를 추가해서 html에 적용하기 (0) | 2021.08.05 |
[개발일지] Open Graph(og) & 스파르타 웹개발 종합반을 마친 후기 (0) | 2021.07.19 |
[Python] Beautiful Soup - 스크래핑한 데이터의 특정 태그 제거 방법 (0) | 2021.07.17 |