ORM

agnusdei·약 21시간 전
0

Database

목록 보기
29/30

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)설명
StringVARCHAR, TEXT문자열
int, IntegerINTEGER, NUMBER정수형
booleanCHAR(1), BOOLEAN논리형
Date, LocalDateTimeDATE, TIMESTAMP날짜/시간
EnumVARCHAR, INTEnum 매핑 가능

※ 복잡한 타입은 @Embeddable, @Converter 등으로 세밀하게 제어


4. ORM의 구성 요소

  1. Entity 클래스: 테이블과 매핑되는 클래스
  2. Persistence Context: 객체의 상태를 추적 및 동기화
  3. Query Generator: 객체 조작 → SQL 자동 생성
  4. Transaction Manager: DB 트랜잭션 관리
  5. 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 프레임워크
JavaHibernate, JPA (Spring Data JPA)
PythonSQLAlchemy, Django ORM
C#Entity Framework
JavaScriptTypeORM, Sequelize

8. 실무 적용 예시

  • 공공기관: JPA 도입, 유지보수 편의성 확보 → 보고서, 통계는 Native SQL 사용
  • 쇼핑몰 플랫폼: QueryDSL + JPA로 동적 쿼리 처리 → 성능 + 생산성 확보
  • 핀테크: ORM + 고정 정밀도(BigDecimal), 암호화 컬럼 커스터마이징 활용

9. 어린이 요약

  • ORM은 개발자가 직접 SQL을 쓰지 않아도, 자동으로 컴퓨터와 데이터베이스가 대화하게 도와주는 기술이에요.
  • "사람"이라는 클래스를 만들면 ORM이 "사람 테이블"에 이름, 나이 같은 걸 알아서 넣고 꺼내줘요!
  • 그래서 개발자는 더 빨리, 더 쉽게 프로그램을 만들 수 있어요.

0개의 댓글