ORM???
ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말 입니다. OOP에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB에 써 쓰이는 데이터인 테이블을 자동으로 연결(매핑)하는 것을 의미합니다. 하지만 SQL문법과 벡엔드 코드는 서로 호환이 되지않습니다. 그렇기 때문에 기존에는 서버 소스코드에 SQL문법을 작성해서 연결을 했지만 ORM을 이용하면 따로 SQL문법을 쓸 필요없이 기존의 서버 소스코드로 연결이 가능합니다.
ORM을 사용하지 않는 코드 (java - class)
CREATE TABLE t_member (
id varchar2(10) PRIMARY KEY,
pwd varchar2(10),
name varchar2(50),
email varchar2(50),
joinDate DATE DEFAULT sysdate
);
SELECT*
FROM t_member
;
INSERT INTO t_member values('hong', '1212', '홍길동', 'hong@gmail.com', sysdate);
INSERT INTO t_member values('lee', '1212', '이순신', 'lee@test.com', sysdate);
COMMIT; -- 커밋을 해야함.
SELECT* FROM t_member;
ORM을 사용한 코드 (Node.js - sequelize)
module.exports = (sequelize, DataTypes) => {
const Comment = sequelize.define('Comment', {
// 스키마 정의
comment_id: {
type: DataTypes.BIGINT,
allowNull: false,
unique: true,
primaryKey: true,
autoIncrement: true,
},
content: {
type: DataTypes.STRING(255),
allowNull: false,
},
}, {
charset: "utf8", // 한국어 설정
collate: "utf8_general_ci", // 한국어 설정
tableName: "Comment", // 테이블 이름
timestamps: true, // createAt & updateAt 활성화
paranoid: true, // timestamps 가 활성화 되어야 사용 가능 > deleteAt 옵션 on
})
return Comment
}
ORM의 장점
ORM을 사용하면 SQL문이 아닌 서버소스코드 문법으로 사용이 가능하며 데이터 베이스를 조작할 수 있습니다. SQL문법을 몰라도 사용이 가능하기 부수적인 코드의 수가 줄어들며 생산성도 올릴 수 있는 장점이 있으며 ERD를 보는 의존도를 낮출 수 있으며 객체로 만들어진 코드기 때문에 재활용이 가능하며 유지보수가 용이 합니다.
ORM의 단점
ORM을 사용하면 유지보수, 생산성 향상등 많은 부분에서 장점이 있지만 프로젝트가 커지면 속도 저하 및 모델들 간 관계성 과 일관성을 무너뜨리기 때문에 생각지도 못했던 버그가 생길 수 있습니다.