ORM과 JPA의 필요성

사람·2025년 9월 12일
1

Backend

목록 보기
10/11

ORM이란?

객체와 RDB 간의 패러다임 불일치 문제

비즈니스 요구사항을 정의한 도메인 모델을 객체로 모델링하면 객체지향 언어가 가진 장점들을 활용할 수 있다.
하지만 문제는 객체 인스턴스를 생성한 후이다.

  • RDB는 데이터 중심으로 구조화되어 있고, 집합적인 사고를 요구한다.
  • 객체 지향에서의 추상화, 상속, 다형성 등의 개념이 존재하지 않는다.

이처럼 객체와 RDB는 지향점이 서로 다르므로, 둘의 기능과 표현 방법도 다르다. 그러므로 상속이나 참조 관계 등 복잡한 상태를 갖는 객체 구조를 RDB의 테이블 구조에 저장하는 데에는 어려움이 있다.
이러한 문제를 객체와 관계형 데이터베이스의 패러다임 불일치 문제라고 하며, 개발자가 중간에 이 문제를 해결해 주어야 한다. 문제는 이 불일치 문제를 해결하는 데에 너무 많은 시간과 코드가 소비된다는 것이다.

ORM을 통한 패러다임 불일치 문제 해결

ORM(Object-Relational Mapping)객체와 관계형 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크는 객체와 테이블을 매핑해서 위에 서술한 객체와 RDB 간 패러다임 불일치 문제를 개발자 대신 해결해 준다.
그래서 ORM 프레임워크를 사용하면 객체를 데이터베이스에 저장할 때라도 SQL문을 직접 작성하는 대신 객체를 자바 컬렉션에 저장하듯이 저장하면 된다. 그러면 ORM 프레임워크가 적절한 INSERT문을 생성해서 데이터베이스에 해당 객체를 직접 저장해준다.
즉, 객체와 테이블을 어떻게 매핑하고자 하는지 ORM 프레임워크에게 알려주기만 하면 ORM 프레임워크가 이후의 과정을 수행해주기 때문에, 개발자는 객체 지향 애플리케이션 개발에만 집중할 수 있게 된다.
자바 진영에서는 하이버네이트 프레임워크가 가장 많이 사용된다. 하이버네이트는 거의 대부분의 패러다임 불일치 문제를 해결해주는 성숙한 ORM 프레임워크이다.

JPA란?

JPA(Java Persistence API)자바 진영의 ORM 기술 표준이다. 즉, 자바 진영의 ORM 프레임워크 인터페이스를 모아둔 것이다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM 프레임워크 중 하나를 선택해야 하는데, 앞서 언급했듯 이 중에서 하이버네이트가 가장 대중적이다.

JPA를 통한 패러다임 불일치 문제 해결 사례

  1. 상속
    JPA를 사용하면 자동으로 부모, 자식 테이블 각각에 데이터를 저장해주며, 조회할 때도 자동으로 부모-자식 테이블 간의 조인 쿼리를 생성 및 실행해준다.
  2. 연관 관계
    객체에서는 연관 관계가 참조로 표현되며, 참조를 통해 연관 객체에 접근한다.
    반면 테이블에서는 연관 관계가 외래키로 표현되며, 조인을 통해 연관 테이블에 접근한다.
    JPA를 사용하면 개발자가 객체 간의 참조 관계를 설정하고 저장하기만 해도 JPA가 참조를 외래키로 변환하여 적절한 INSERT문을 데이터베이스에 전달한다. 그리고 조회할 때도 외래키를 참조로 변환해준다.
  3. 객체 그래프 탐색
    SQL을 직접 다루면 처음 실행하는 SQL에 따라 탐색할 수 있는 객체 그래프 범위에 제약이 생긴다.
    하지만 JPA를 사용하면 연관된 객체를 사용하는 시점에 적절한 SELECT문을 실행해주는 즉시 로딩/지연 로딩 설정이 간단하게 가능하기 때문에 자유롭고 신뢰할 수 있는 객체 그래프 탐색이 가능하다.
  4. 동일성 비교(참조 비교)
    테이블 내에서 PK 값이 동일하다면 동일한 객체로 취급되어야 할 것이다. 하지만 JPA를 사용하지 않고 테이블에서 동일한 회원 객체를 2번 조회하면 조회 메서드가 호출될 때마다 새로운 인스턴스를 생성하게 되어 동일성 비교가 실패하게 된다.
    반면 JPA를 사용하면 같은 트랜잭션일 때 같은 객체가 조회되는 것을 보장해주어 동일 컬럼에 대한 동일성 비교가 성공하게 된다.
profile
알고리즘 블로그 아닙니다.

4개의 댓글

comment-user-thumbnail
2025년 9월 13일

ORM, JPA 공부하실 때 어떤 레퍼런스 참고하시나요?

1개의 답글