[NoSQL] ORM, ODM이란?

Hyunjun Kim·2025년 9월 25일
0

Data_Engineering

목록 보기
153/153

NoSQL ORM/ODM 정리

1. ORM(Object-Relational Mapping) 이란 무엇인가

ORM은 객체와 관계형 데이터베이스(RDBMS)의 테이블을 매핑하는 기술이다. 개발자는 SQL을 직접 작성하지 않고 객체 지향적으로 데이터를 조작할 수 있다. 예를 들어, Python 클래스 User와 데이터베이스 테이블 users를 매핑하여 객체 생성, 조회, 수정, 삭제를 수행할 수 있다. ORM은 엄격한 스키마(Strict Schema)를 기반으로 동작한다.

대표적인 ORM 라이브러리:

  • SQLAlchemy
  • Django ORM

2. ODM(Object-Document Mapping) 이란 무엇인가

ODM은 문서 기반 NoSQL 데이터베이스에 특화된 객체 매핑 기술이다. JSON이나 BSON 같은 문서를 Python 객체와 매핑하여 데이터베이스 작업을 수행할 수 있다. 즉, ORM이 관계형 데이터베이스의 테이블과 객체를 매핑한다면, ODM은 문서(Document)와 객체를 매핑한다.

대표적인 ODM 라이브러리:

  • MongoEngine (Python)
  • Mongoose (Node.js)

ODM은 스키마가 유연(Flexible Schema)하여 다양한 형태의 데이터를 저장할 수 있다는 장점이 있다.


3. NoSQL - ODM의 활용

ETL 파이프라인데이터 아키텍처 설계 과정에서 ODM은 다음과 같은 역할을 한다.

  1. 데이터 수집(Extract)
    외부 API, 로그, IoT 센서 등에서 들어오는 비정형 JSON 데이터를 ODM 모델에 바로 매핑 가능

  2. 데이터 변환(Transform)
    ODM 모델에서 유효성 검증과 스키마 제약 조건을 활용하여 데이터 품질 관리

    • 예: age 필드는 반드시 정수형, email은 문자열 패턴 검사
  3. 데이터 저장(Load)
    MongoDB 같은 문서형 데이터베이스에 적재할 때 ODM을 통해 객체 단위로 저장 및 조회 가능

즉, ODM은 파이프라인에서 데이터 정합성을 지키는 애플리케이션 레벨 추상화 계층으로 작동한다.


4. Python ODM 및 MongoDB 코드 예시

4.1 MongoEngine ODM 예시

from mongoengine import Document, StringField, IntField, connect

# MongoDB 연결
connect('mydb')

# ODM 모델 정의
class User(Document):
    name = StringField(required=True)
    age = IntField()

# 데이터 삽입
user = User(name="Alice", age=25)
user.save()

# 데이터 조회
for u in User.objects:
    print(u.name, u.age)

4.2 PyMongo Raw 접근 예시 (non ODM)

from pymongo import MongoClient

# MongoDB 연결
client = MongoClient("mongodb://localhost:27017/")
db = client["mydb"]
collection = db["users"]

# 데이터 삽입
collection.insert_one({"name": "Alice", "age": 25})

# 데이터 조회
for user in collection.find():
    print(user["name"], user["age"])

PyMongo는 스키마 유효성 검증이 없으므로 동일 컬렉션에 필드명이 다른 문서가 들어가도 에러가 발생하지 않는다. ODM은 클래스 정의 기반 스키마 제약을 제공하여 데이터 일관성을 유지할 수 있다.


5. 스키마 유연성의 장단점

NoSQL은 스키마가 유연하여 빠른 개발과 확장에 유리하다.
그러나 이는 데이터 일관성 문제를 유발할 수 있다. 예: 동일 컬렉션에 필드명이 다른 문서가 저장되면, 쿼리나 집계 시 오류나 누락 발생 가능

대응 방법:

  • 애플리케이션 레벨에서 JSON Schema 기반 유효성 검증
  • ODM 사용으로 클래스 수준에서 스키마 정의 및 일관성 유지

6. ORM vs ODM 비교

구분ORM (RDBMS)ODM (NoSQL, Document DB)
데이터 모델테이블 기반. 행(Row)과 열(Column) 구성문서 기반. JSON/BSON 형태의 자유로운 구조
스키마엄격한 스키마 필요유연한 스키마 가능
관계JOIN 가능일반적으로 JOIN 없음, Embedded Document 또는 Reference 사용
쿼리SQL 자동 생성, GROUP BY, 트랜잭션 지원객체/문서 직접 조작, 배열/중첩 문서 조회, 제한적 트랜잭션 지원
개발/확장성데이터 구조 안정적, 복잡 쿼리 적합빠른 프로토타입 및 비정형 데이터 적합

핵심: ODM은 RDBMS + ORM과 사용 방식은 유사하나, 데이터 구조와 처리 로직이 NoSQL에 맞춰져 있음. 데이터 정합성은 ODM과 JSON Schema 검증으로 확보한다.


7. 정리

  • ORM은 RDBMS에 적용되는 객체-테이블 매핑 기술이다.
  • ODM은 문서형 NoSQL 데이터베이스에 적용되는 객체-문서 매핑 기술이다.
  • 데이터 엔지니어링 파이프라인에서는 ODM이 데이터 정합성을 보장하는 중요한 역할을 한다.
  • NoSQL 스키마 유연성은 빠른 개발에 유리하나, 데이터 일관성 문제를 유발할 수 있다.
  • ODM과 JSON Schema 검증을 통해 일관성을 유지하는 것이 중요하다.
profile
Data Analytics Engineer 가 되

0개의 댓글