ORM/ODM은
프로그래밍시 데이터베이스를 객체 처럼 사용할 수 있게 해주는 놈이다.
이게 무슨 말이냐면..
job테이블(컬렉션)이 있다고 치면,
job.insert({ title: "개발자" });
job.delete({ id: 3 });
이런식으로 DB연산을 메서드 호출처럼 다룬다.
ORM과 ODM 개념은 유사한데, orm은 Rdbms, odm은 몽고 db에서 쓰인다고 이해했다.
여기서 나오는 개념이 스키마이다.
먼저 db연결과 더불어 데이터 구조를 어떻게 가져갈 것인지(타입 등) 스키마를 통해서 정의해준다.
그리고 이 스키마를 가지고 모델을 만든다.
클래스와 객체랑 비슷하다고 대략적으로 생각하자.
스키마는 붕어빵 틀! 모델은 붕어빵을 실제 사용할 수 있는 붕어빵 사장님!
모델을 가지고 인스턴스를 만들어야 비로소 우리가 먹고 즐길 수 있는 붕어빵
흐름은
스키마=>모델=>인스턴스 이다.
모델을 가지고 실제 DB 를 조작한다.
그렇기 때문에 사용 흐름을 보면
1. 스키마를 정의한다.
2. 스키마 기반 모델을 생성한다. (이 스키마대로 컬렉션을 다루겠다고 선언)
3.생성 모델을 가지고 인스턴스를 생상하고 db 연산을 진행한다.
**스키마를 바로쓰면안되는가 ?
안됨 .스키마는 definition 일 뿐이고 우리는 요 스키마로부터 모델을 만들어서 사용해야함!
1.먼저 스키마를 정의한다.
블로그 글을 예시로 들어본다 .
const blogSchema = new Schema({
title: String, // String is shorthand for {type: String}
author: String,
body: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
2.모델을 만든다.
위의 블로그 스키마 정의를 한 것을 사용해서 바로 Blog라는 모델을 생성
const Blog = mongoose.model('Blog', blogSchema);
// ready to go!
3. 사용한다 .
ODM model 을 이용해서 실 사용 인스턴스를 생성한다.
const post = new Blog({
title: "ODM 헷갈려도 괜찮아",
content: "스키마 -> 모델 -> 문서 순서로 이해하면 됩니다!",
author: "Yoon"
});
await post.save();
4.질문. 인스턴스 말고 모델을 직접 건드는 경우도 있던데요?
// 조건에 맞는 "여러 문서"를 한꺼번에 업데이트
await Blog.updateMany(
{ author: "Yoon" },
{ $set: { author: "혜윤" } }
);
그렇다. 객체 생성을 하지 않고 모델을 건드리면 해당 모델에 해당하는 여러 인스턴스가 한번에 업데이트된다.
=>결론 :
하나의 인스턴스만 개별로 조작할 것이라면 인스턴스 생성.
같은 모델 전체 데이터 업데이트 일괄 진행시는 모델을 조작!
'DB' 카테고리의 다른 글
| DB의 “snapshot” 필드란? (DB의 버전관리) (1) | 2025.09.13 |
|---|