Book/스프링부트 핵심가이드

ORM과 JPA의 개념 이해

블로그 주인장 2023. 11. 1.

ORM과 JPA

객체와 데이터베이스의 테이블을 매핑하는 방법 중 하나이 ORM과 ORM의 종류 중 하나인 JPA에 대해서 알아보겠습니다.

 

 

ORM(Object Relational Mapping)


  • 자바와 같은 객체 지향 언어에서 의미하는 객체와 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법이다.
  • 클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기에 불일치가 존재할 수 밖에 없다.
  • ORM은 해당 2개의 불일치와 제약 사항을 해결하는 방법이다.

 

ORM의 장점


1. ORM을 사용하면서 데이터베이스 쿼리를 객체지향적으로 조작할 수 있다.

  • 쿼리문을 작성하는 양이 현저히 줄어 개발 비용이 줄어든다.
  • 객체 지향적으로 데이터베이스에 접근할 수 있기 때문에 코드의 가독성을 높인다.

2. 재사용 및 유지보수가 편리하다.

  • ORM을 통해 매핑된 객체는 모두 독립적으로 작성되어있어 재사용이 가능하다.
  • 객체들은 각 클래스로 나뉘어 있어, 유지보수가 수월하다.

3. 데이터베이스에 대한 종속성이 줄어든다.

  • ORM을 통해 자동 생성된 SQL문은 객체를 기반으로 데이터베이스 테이블을 관리하기에, 데이터베이스에 종속적이지 않는다.
  • 데이터베이슬르 교체하는 상황에서도 비교적 적은 리스크를 부담한다.

 

ORM의 단점


1. ORM만으로 온전한 서비스를 구현하는 것은 한계가 존재한다.

  • 복잡한 서비스의 경우 직접 쿼리를 구현하지 않고, 코드로 구현하기 어렵다.
  • 복잡한 쿼리를 정확한 설계 없이 ORM 만으로 구성하게 되면 속도 저하 등의 성능 문제가 발생할 수 있다.

2. 애플리케이션의 객체 관점과 데이터베이스의 관계 관점의 불일치가 발생한다.

  • 세분성(Granularity) : ORM의 자동 설계 방법에 따라 데이터베이스에 있는 테이블의 수와 애플리케이션의 엔티티(Entity) 클래스의 수가 다른 경우가 생긴다.(클래스가 테이블의 수보다 많아질 수 있다.)
  • 상속성(Inheritance) : RDBMS에는 상속이라는 개념이 없다.
  • 식별성(Identity) : RDBMS는 기본키(primary key)로 동일성의 정의하지만, 자바는 두 객체의 값이 같아도 다르게 판단할 수 있다. 식별과 동일성의 문제이다.
  • 연관성(Associations) : 객체지향 언어는 객체를 참조함으로써 연관성을 나타내지만, RDBMS에서는 외래키(foreign key)를 삽입함으로써 연관선을 표현한다. 또한, 객체지향 언어에서의 객체를 참조할 때는 방향성이 존재하지만, RDBMS에서 외래키를 삽입하는 것은 양방향의 관계를 가지기 때문에 방향성이 없다.
  • 탐색(Navigation) : 자바와 RDBMS는 어떤 값(객체)에 접근하는 방식이 다르다. 자바에서는 특정 값에 접근하기 위해 객체 참조 같은 연결 수단을 활용한다. 이방식은 객체를 연결하고 또, 연결해서 접근하는 그래프 형태의 접근 방식이다.

 

JPA(Java Persistence API)


  • JPA는 자바 진영의 ORM 기술 표준으로 채택된 인터페이스 모음이다.
  • ORM이 큰 개념이라면 JPA는 더 구체화적인 스펙을 포함한다.

  • JPA 매커니즘은 내부적으로 JDBC 를 사용한다.
  • 개발자가 직접 JDBC를 구현하면 SQL을 의전하는 문제가 있어 효율성이 떨어지는데, JPA는 이를 보완하여 개발자 대신 적절한 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동 매핑하는 역할을 수행한다.

대표적인 구현체로는 하이버네이트(Hibernate), 이클립스 링크(EclipsLink), 데이터 뉴클리어스(DataNucleus)가 있다.

그 중 가장 많이 사용되는 구현체는 하이버네이트(Hibernate) 이다.

 

하이버네이트(Hibernate)


자바의 ORM 프레임워크로, JPA가 정의하는 인터페이스를 구현하는 JPA 구현체 중 하나이다.

반응형

댓글