[Spring boot JPA] 12/01

jjade·2025년 12월 1일

ORM(Object Relational Mapping) 정리

ORM이란?

  • 객체지향 언어에서 사용하는 객체와 관계형 DB의 테이블을 서로 연결해주는 기술
  • 자바의 객체 구조와 관계형 DB는 구조가 다르기 때문에 그대로 사용하면 객체지향적인 코드의 장점을 살리기 어렵다
  • ORM은 이 문제를 해결하기 위해 객체 중심 설계가 가능하도록 매핑 기능을 제공하는 기술

MyBatis는 SQL과 인터페이스를 매핑하지만,
ORM은 객체(클래스)DB 테이블을 매핑한다는 점이 가장 큰 차이


Hibernate

  • ORM 기술을 직접 구현해놓은 대표적인 오픈소스 프레임워크
  • JPA를 기반으로 동작하는 실질적인 구현체 역할

JPA(Java Persistence API)

  • 자바 진영에서 ORM을 사용하기 위한 표준 명세
  • JPA는 직접 기능을 제공하는 것이 아니라 인터페이스(규약) 만 제공하며
    실제 동작은 Hibernate 같은 ORM 프레임워크가 수행

프론트에서 jQuery 의존성이 제거되면서 React 기반으로 전환된 사례와 유사
특정 구현체에 의존하지 않도록 추상화된 표준을 두는 방식


Spring Data JPA

  • JPA 기반의 모듈
  • Repository 인터페이스만 구현하면 기본적인 CRUD 기능이 자동 제공
  • DB 접근 코드가 간단해지는 장점이 있지만 내부 동작이 추상화되어 있어
    문제가 발생하면 원리를 모르면 해결하기 어려움
    ORM 개념 먼저 학습하는 것이 안전

JPA를 사용하는 이유

1. 객체와 관계형 DB 패러다임 불일치 문제

자바는 객체지향 언어지만, 데이터베이스는 절차적으로 데이터를 저장
구조가 다르다 보니 객체지향의 장점인 상속, 다형성, 캡슐화를 제대로 활용하기 어려움

예를 들어 사람 데이터를 확장해보면

공통 속성(슈퍼 테이블)

번호(PK)이름생년월일

학생 테이블

| 번호(FK, PK) | 학년 | 등급 |

직장인 테이블

| 번호(FK, PK) | 경력 | 직급 |

  • DB에서는 슈퍼 엔터티와 서브 엔터티로 나누어 관리해야 함
  • insert 시 두 테이블에 값을 저장해야 하는 경우도 생김
  • 하지만 자바에서는 Student extends Person 방식으로 상속 후 업캐스팅만 하면 해결
    JPA는 이 패러다임 차이를 줄여주는 역할

2. 연관관계 처리 방식 차이

RDB의 연관관계

  • FK(외래키)를 통해 관계를 맺음
  • JOIN으로 다른 테이블의 데이터를 연결해 조회

객체의 연관관계

  • 객체는 참조를 통해 접근
class Board {
    User user; // 작성자
}

자바에서는 new Board().getUser()는 가능하지만
반대로 User에서 Board로 바로 접근할 수 있는 구조는 자동 제공되지 않음

→ JPA는 이러한 관계를 객체스럽게 표현할 수 있도록 매핑 기능을 제공


3. 객체 그래프 탐색

  • 객체 지향의 핵심은 참조를 따라가며 객체를 탐색하는 것

예시 구조

File → Board → User → UserProfile
           |
         Reply
new Board().getUser().getUserProfile();
  • SQL 중심 개발에서는 쿼리를 어디까지 작성했는지(XML mapper 확인) 알지 못하면
    어느 객체까지 탐색 가능한지 알 수 없다
  • 결과적으로 예상치 못한 NullPointerException이 발생하기 쉬움
  • JPA는 이 객체 그래프 탐색을 자연스럽게 지원

정리

  • ORM은 객체와 DB 테이블 간의 괴리를 줄여주는 기술
  • Hibernate는 ORM의 대표 구현체
  • JPA는 ORM 사용을 위한 표준
  • Spring Data JPA는 이를 더 쉽게 사용할 수 있도록 한 모듈
  • JPA를 사용하면 상속, 연관관계, 객체 그래프 탐색 등 객체지향적인 설계를 유지하면서 DB와 연동 가능
ORM = 객체 중심 설계 + SQL 의존성 감소 + 유지보수성 증가
profile
끊임없는 에너지를 공유하는 핫스팟 같은 개발자 최준서입니다!

0개의 댓글