<목차>
1. ORM이란?
2. sequelize
1. ORM이란?
Object Relational Mapping, 객체-관계 매핑
데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
따라서, 객체 모델과 관계형 모델 간에 불일치가 존재하게 된다.
이러한 불일치를 ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
2. sequelize
자바스크립트를 사용하는 ORM
시퀄라이즈는 데이터베이스의 테이블과 객체 지향 프로그램의 객체를 매핑시켜 주는 ORM 중 하나다.
사용법
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'
}
});
참고자료
'Node.js' 카테고리의 다른 글
Node.js - jwt(Json Web Token) (0) | 2024.08.19 |
---|---|
Node.js - bcrypt (0) | 2024.07.11 |
Node.js - MySQL 연결하기 (0) | 2024.07.01 |
Node.js - ejs (0) | 2024.06.30 |
Node.js - REST란? (0) | 2024.06.29 |