learn

ORM (Object-Relational Mapping)

ORM (Object-Relational Mapping)

객체(Object)와 관계형 DB(Relational)를 연결해주는 레이어. 코드에서는 데이터를 객체로 다루고, DB는 테이블·행으로 저장하는데, 이 둘의 구조적 불일치를 Object-Relational Impedance Mismatch라고 한다. ORM은 이 간극을 메워준다.

동작 원리

클래스 하나 = 테이블 하나, 인스턴스 하나 = 행 하나로 대응시킨다. 메서드 호출이 내부적으로 SQL로 번역되어 실행되고, 결과가 다시 객체로 변환되어 돌아온다.

# ORM 없이
cursor.execute("SELECT * FROM users WHERE id = 1")
row = cursor.fetchone()
user = User(id=row[0], name=row[1])  # 직접 매핑

# ORM 사용
user = User.find(1)  # 객체가 바로 돌아옴

트레이드오프

장점

  • SQL을 직접 작성하지 않아도 된다
  • DB가 바뀌어도 코드 변경 최소화 (MySQL → PostgreSQL 등)
  • 코드 가독성 향상

단점

  • 복잡한 쿼리일수록 ORM이 생성하는 SQL이 비효율적일 수 있다
  • 내부에서 어떤 SQL이 나가는지 모르면 성능 문제 원인 찾기 어려움

실무에서는 ORM을 기본으로 쓰되, 성능 크리티컬한 쿼리는 raw SQL로 직접 작성하는 방식이 일반적이다.

대표 ORM

언어ORM
PythonSQLAlchemy, Django ORM
JavaHibernate, JPA
JavaScriptPrisma, TypeORM, Sequelize
RubyActiveRecord