1. ORM(Object-Relational Mapping)의 정의
ORM은 객체지향 언어의 객체와 관계형 데이터베이스(RDBMS)의 테이블을 자동으로 매핑해주는 기술입니다.
즉, 개발자가 SQL을 직접 작성하지 않고도 객체 조작만으로 DB 연동이 가능하게 해줍니다.
2. 개념적 배경: 객체지향과 관계형 모델의 불일치
2.1 객체지향 (OOP)의 특징
- 단위: 클래스와 객체
- 구성: 속성(필드) + 메서드(행위)
- 관계: 참조 기반
- 구조: 계층적, 캡슐화, 상속, 다형성
2.2 관계형 데이터베이스(RDB)의 특징
- 단위: 테이블, 컬럼, 레코드
- 관계: 외래키(Foreign Key)
- 구조: 정규화된 평면 구조
- 접근: SQL 기반
2.3 패러다임 불일치 (Impedance Mismatch)
항목 | 객체지향 | 관계형 DB |
---|
구조 | 계층, 참조 기반 | 테이블 기반 |
관계 | 객체 참조 | 외래 키 |
상속 | 지원됨 | 직접 지원 안 됨 |
컬렉션 | List, Set 등 | JOIN |
타입 | 복합 타입, 사용자 정의 | 기본 타입 중심 |
→ ORM은 이 불일치를 자동 매핑과 추상화 계층으로 해결합니다.
3. ORM의 작동 원리 및 매핑 구조
3.1 매핑 기본
객체지향 | 관계형 데이터베이스 |
---|
클래스 (Class) | 테이블 (Table) |
인스턴스 (Object) | 행 (Row) |
필드/속성 (Field) | 컬럼 (Column) |
참조(Association) | 외래키(FK) |
컬렉션(List) | 다대다/조인 테이블 |
3.2 타입 매핑 (Type Mapping)
ORM은 객체의 데이터 타입과 DB 컬럼 타입을 자동 변환합니다.
Java 타입 | SQL 타입 (예: Oracle) | 설명 |
---|
String | VARCHAR , TEXT | 문자열 |
int , Integer | INTEGER , NUMBER | 정수형 |
boolean | CHAR(1) , BOOLEAN | 논리형 |
Date , LocalDateTime | DATE , TIMESTAMP | 날짜/시간 |
Enum | VARCHAR , INT | Enum 매핑 가능 |
※ 복잡한 타입은 @Embeddable
, @Converter
등으로 세밀하게 제어
4. ORM의 구성 요소
- Entity 클래스: 테이블과 매핑되는 클래스
- Persistence Context: 객체의 상태를 추적 및 동기화
- Query Generator: 객체 조작 → SQL 자동 생성
- Transaction Manager: DB 트랜잭션 관리
- Mapping Metadata: Annotation 또는 XML로 정의
5. ORM의 장단점
5.1 장점
- 생산성: SQL 작성 최소화, 빠른 개발 가능
- 유지보수성: 도메인 중심 설계로 구조 명확
- DB 독립성: 다양한 DBMS 간 이식성 확보
- 추상화: 비즈니스 로직에 집중 가능
5.2 단점
- 성능 이슈: N+1 쿼리, 불필요한 JOIN 발생
- 복잡한 쿼리 한계: 집계, 분석 쿼리는 비효율
- 학습 비용: 내부 동작 이해 필요
- 예측 불가능한 SQL: 자동 생성 쿼리의 최적화 한계
6. ORM 설계 시 고려사항 (기술사 관점)
6.1 적합성 평가
- 단순 CRUD 중심 시스템 → ORM 적합
- 복잡 트랜잭션, 고성능 필요 시스템 → SQL Mapper 병행 고려
6.2 성능 최적화 전략
- Fetch 전략 (Lazy vs Eager)
- JPQL 튜닝, QueryDSL 등 사용
- 1차 캐시 활용 및 Dirty Checking 최소화
6.3 타입 매핑 정확성
- DB 정밀도(type precision), null 여부, 제약조건 주의
- Enum, Date 등 매핑 시 변환 방식 명확히 정의
6.4 하이브리드 전략
- Spring Data JPA + Native Query
- ORM + SQL Mapper(MyBatis) 병행
7. 대표 ORM 프레임워크
언어 | ORM 프레임워크 |
---|
Java | Hibernate, JPA (Spring Data JPA) |
Python | SQLAlchemy, Django ORM |
C# | Entity Framework |
JavaScript | TypeORM, Sequelize |
8. 실무 적용 예시
- 공공기관: JPA 도입, 유지보수 편의성 확보 → 보고서, 통계는 Native SQL 사용
- 쇼핑몰 플랫폼: QueryDSL + JPA로 동적 쿼리 처리 → 성능 + 생산성 확보
- 핀테크: ORM + 고정 정밀도(BigDecimal), 암호화 컬럼 커스터마이징 활용
9. 어린이 요약
- ORM은 개발자가 직접 SQL을 쓰지 않아도, 자동으로 컴퓨터와 데이터베이스가 대화하게 도와주는 기술이에요.
- "사람"이라는 클래스를 만들면 ORM이 "사람 테이블"에 이름, 나이 같은 걸 알아서 넣고 꺼내줘요!
- 그래서 개발자는 더 빨리, 더 쉽게 프로그램을 만들 수 있어요.