[Node.js] Sequelize

nhchoi·2021년 11월 9일
0

Nodejs

목록 보기
1/1
post-thumbnail

Sequelize(시퀄라이즈)는 node.js의 ORM으로,
MySQL, Postgres, MariaDB, SQLite, Microsoft SQL Server를 사용할 때
raw query문을 사용하지 않고 쉽게 다룰 수 있도록 도와주는 라이브러리



ORM이란?

Object Relational Mapping
관계형 데이터베이스의 데이터와 객체를 매핑해주는 것이다.
기존의 객체와 테이블 사이의 Dismatch가 발생하는 것을 줄여 개발자가 Object Model에만 집중하여 개발할 수 있도록 한다.

Java에서 Hibernate가 있다면, Node.js에선 Sequelize가 있다.


설치

(mysql 사용을 가정함)

npm install sequelize
npm install mysql2
npm install --global sequelize-cli

초기화

sequelize init

초기화 후 디렉토리 모습

.
├── config
│   └── config.json
├── migrations
├── models
│   └── index.js
└── seeders
  • /config/config.json
    → DB의 connection 정보를 설정할 수 있다. (database, username, password, host 등)
  • /models/index.js
    → models 디렉터리 안에 있는 파일들을 읽고 그것들을 모델로 정의한다.
  • migrations
    → 마이그레이션에 필요한 파일들 (생략 가능)
  • seeders
    → 테이블에 테스트 데이터나 기본 데이터를 넣고 싶은 경우에 사용 (생략 가능)


모델 정의하기

모델을 정의하는 메소드는 define()
sequelize.define('객체이름', 스키마 정의, 테이블 설정)으로 사용함

module.exports = (sequelize, DataTypes) => {
	var User = sequelize.define('User',
		{
			id:{
				type : DataTypes.INTEGER,
				unique : true
				allowNull : false
			},
			passwd: {
				type : DataTypes.STRING,
				allowNull : false
			}
		},{
			timestamps : false
		}
	)
	User.associate = (models) => {
		//associations can be defined here
	}
	return User
}

위와 같이 모델을 작성할 수 있음.

필드 옵션

  • type : Data Type
  • primaryKey : 기본키인지
  • autoIncrement : 자동 증가 옵션(Serial Type)
  • allowNull : NOT NULL인지
  • unique : UNIQUE 한 값인지
  • comment : column에 대한 정보
  • validate : column에 대한 validation check 옵션을 설정

config 옵션

  • timestamps : 테이블이 언제 생성되었고 가장 최근에 수정된 시간이 언제인지 추적할 수 있도록 해줌
  • tablename : 실제 Table 이름
  • updatedAt
  • createdAt
  • paranoid : deletedAt 컬럼이 테이블에 추가됨



CRUD

CREATE

create()를 사용하면 내부적으로 INSERT 쿼리가 실행됨.
인자로 데이터 객체를 정의하여 전달.

User.create({
	id: 1,
	passwd : "hello"
}).then(()=>{
	console.log('success');
}.catch(error => {
	throw error
})

READ

findAll()을 사용하면 내부적으로 SELECT 쿼리가 실행됨.
인자로 where 조건문 전달할 수 있음. (생략도 가능)

User.findAll({
	where : { id : 1 }
})

이 외에도

  • findById()
  • findOne()
  • findOrCreate()
  • findAndCountAll()
    등이 있음

더 다양한 데이터 조회 문법을 알고싶다면 여기를 확인해보는 것을 추천.

UPDATE

수정할 부분을 찾기 위해 findOne() 메서드 사용 후, update() 수행

User.findOne({
	where : { id : 1 }
}).then( user => {
	if(user) {
		user.update({ passwd : "Hi" })
		.then(() => console.log('success')
	}
})

DELETE

destroy()를 사용하면 내부적으로 DELETE 쿼리 실행
where 조건문을 작성하지 않으면 모든 데이터가 삭제됨.

User.destroy({
	where : { id : 1 }
}).then(()=>{
	console.log('success');
})



관계 정의

User.associate = (models) => {
	// 관계 정의
}

1:1 매핑

  • hasOne() : 부모 테이블이 관계를 맺는 대상(자식)에게 본인의 외래키를 추가
  • belongsTo() : 자식 테이블이 관계를 맺는 대상(부모)에게 외래키를 받아 추가

1:N 매핑

  • hasOne()
  • belongsTo()

N:M 매핑

  • belongsTo() : 두 테이블을 연결, through 옵션을 사용해서 중간 테이블의 이름을 명시해주어야 함.

매핑 옵션

  • as : 상대 테이블의 이름을 지정
  • foreignKey : 외래키 이름을 지정











참조 링크
https://gngsn.tistory.com/71
https://victorydntmd.tistory.com/32
https://baeharam.netlify.app/posts/Node.js/Node.js-Sequelize-%EB%8B%A4%EB%A3%A8%EA%B8%B0
https://gmlwjd9405.github.io/2019/02/01/orm.html
profile
👩‍💻

0개의 댓글