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 | |---|---| | Python | SQLAlchemy, Django ORM | | Java | Hibernate, JPA | | JavaScript | Prisma, TypeORM, Sequelize | | Ruby | ActiveRecord |