본문 바로가기
NodeJS

Sequelize

by 개발자doc 2024. 6. 29.
목차
1. 시퀄라이즈?
2. 사용법

 

1. 시퀄라이저?
  • 자바스크립트를 사용하는 ORM

시퀄라이즈는 데이터베이스의 테이블과 객체 지향 프로그램의 객체를 매핑시켜주는 ORM 중 하나다. 객체 지향 프로그램이 대새인 현재 NodeJS를 사용하여 서버를 만드는데 express와 더불어 백앤드 한 축을 차지하고 있다. 

 

3. 사용법

1 ) 시퀄라이즈 다운로드

시퀄라이즈는 외부 라이브러리로 패키지 매니저를 통해 다운 받아야 사용할 수 있다.

npm install sequelize

 

2 ) 시퀄라이즈 객체 생성하기 

데이터베이스에 연결하기 위해서는 당연하게도 접속정보가 필요하고 그 정보를 시퀄라이즈 객체를 생성할 때 지정을 해주어야 한다.

const sequelize = new Sequelize(
                        [데이터베이스 이름], 
                        [데이터베이스 접속 유저], 
                        [데이터베이스 접속 패스워드], 
                        [데이터베이스의 접속정보]
);

 

3 )  객체와 테이블 연결하기

class 클래스명 extends Sequelize.Model{
    static init(sequelize) {
        super.init({
            // 객체의 이름과 속성
           속성1:{
               속성의 타입과 옵션
           }
        },{
            // 매핑할 테이블의 속성 내용
        })
    }
}
Users.init([시퀄라이즈객체]);
ex)
class User extends Sequelize.Model {
    static init(sequelize) {
        return super.init({
            id: {
                type: Sequelize.STRING(20),
                unique: true
            },
            name: {
                type: Sequelize.TEXT
            },
            age: {
                type: Sequelize.INTEGER
            }
        }, {
            sequelize: sequelize,         // sequelize 키값으로 시퀄라이즈객체를 추가
            timestamps: true,             // 생성, 변경시간에 대한 컬럼 추가여부
            underscored: false,           // 스네이크 표기법을 카멜표기법으로 변경할지 여부
            modelName: "Users",           // join등에 사용되는 model 이름설정
            tableName: "users",
            paranoid: false,              // 삭제된 속성의 시간을 남겨둘지 여부
            charset: "utf8mb4",           // 인코딩 방식
            collate: "utf8mb4_general_ci" // 인코딩 방식
        });
    }
}

Users.init(sequelize);

해당 객체와 매핑되는 테이블이 없다면 새로 생성하는데 아래 쿼리와 같다.

create table user(
    id int auto_increment unique,
    name text,
    age int,
)

여기까지 하면 매핑은 되었다. module.exports를 통해 외부로 내보내기를 하면 다른 파일에서 해당 객체를 통해 테이블의 데이터를 조작할 수 있다.

 

4) CRUD

데이터 조작을 하는 부분에 대해서는 모두 promise로 이루어져있어 then/catch 또는 async/await를 사용하여야 한다.

 

데이터 추가

await 모델객체.create({
    속성1 : 데이터1
});

// ex)
await User.create({
    id : 'user1'
});

 

데이터 조회

// 전체 조회
await 모델객체.findAll({
    where : {
        조건
    }
});

// 특정 데이터 조회
await 모델객체.findOne({
	where : {
         조건
    }
    attributes : [속성1, 속성2]
});


// ex)
await User.findAll({
    where : {
        id : 'user1'
    }
});

await User.findOne({
	where : {
        id : 'user1'
    }
    attributes : ['id','name']
});

 

데이터 변경

where이 없다고 에러가 발생하는 것은 아니지만 주어진 컬럼에 대한 모든 데이터가 변경되기에 유의해야 한다.

await 모델객체.update(
    {
        변경할 속성 : 새로 저장될 데이터
    },
    {  
        where : {
            조건 속성 : 조건 값
    }
});

// ex)
await User.update(
    {
        name : '홍길동'
    },
    {  
        where : {
            id : 'user1'
    }
});

 

데이터 삭제

where이 없다고 에러가 발생하는 것은 아니지만 주어진 컬럼에 대한 모든 데이터가 삭제되기에 유의해야 한다.

await 모델객체.destroy({
    where : {
        조건 속성 : 조건 값
    }
});

// ex)
await User.destroy({
    where : {
        id : 'user1'
    }
});

'NodeJS' 카테고리의 다른 글

웹소켓  (0) 2024.06.30
JWT로 권한 인증하기  (0) 2024.06.23
내 비밀번호 나도 모르게 만드는 법 bcrypt  (0) 2024.06.22
cors  (0) 2024.06.21
form태그로 REST FUL 가능할까?  (0) 2024.06.15