예전에는 SQL 쿼리문을 직접 작성하여 DB의 데이터를 관리하였는데 요즘은 ORM이나 ODM이라는 매핑 방식으로 DB를 관리한다고 한다. 먼저 ORM과 ODM에 대해 찾아보았다.
ORM = Object Relational Mapping/Mapper(객체 관계 매핑)
객체와 관계형 데이터베이스를 자동으로 매핑해주는 것이다. 자바스크립트의 객체에 반해 관계형 데이터베이스는 테이블을 사용하면서 이 두 모델 간의 불일치가 존재하는데, 이것을 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다.
ORM방식은 관계형 데이터베이스 즉 표로 이루어진 DB를 위한 방식이라고 보면 될 것 같다.
대표적으로 아래와 같은 DB들이 ORM방식을 사용한다.
ODM = Object Document Mapping/Mapper(객체 문서 매핑)
객체와 문서형 데이터베이스를 자동으로 매핑해주는 것이다. ORM과 마찬가지로 객체와 문서형 데이터베이스 간의 모델 불일치가 존재하는데, DB에서 문서를 조회할 때 자바스크립트 객체로 바꿔주어 불일치를 해결한다.
ODM방식은 문서형 데이터베이스 즉 문서로 이루어진 DB를 위한 반식이라고 보면 될 것 같다.
MondoDB를 사용하기위해 Mongoose라이브러리를 사용해봤는데 Collection이라는 DB문서가 담긴 서류봉투를 사용하여 데이터를 관리하였다.
대표적으로 아래와 같은 DB들이 ODM방식을 사용한다.
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
firstName: string
@Column()
lastName: string
@Column()
age: number
}
const userRepository = MyDataSource.getRepository(User)
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.age = 25
await userRepository.save(user)
const allUsers = await userRepository.find()
const firstUser = await userRepository.findOneBy({
id: 1,
}) // find by id
const timber = await userRepository.findOneBy({
firstName: "Timber",
lastName: "Saw",
}) // find by firstName and lastName
await userRepository.remove(timber)