Object-Relational Mapping(ORM)

업데이트:

Object-Relational Mapping(ORM)

  • Object-Oriented Programming(OOP)1에서 사용되는 객체라는 개념을 구현한 클래스와 Relational Database(RDBMS)에서 쓰이는 데이터인 테이블을 자동으로 연결해주는 것이다.

Persistence, 영속성

  • 프로그램이 종료되더라도 생성한 데이터가 사라지지 않는 데이터의 특성을 말한다.

Object Persistence

  • 메모리 상의 데이터를 파일 시스템, 데이터베이스 등을 활용하여 영구적으로 저장시켜서 영속성을 부여한다.

Persistence Layer

  • 시스템 아키텍처에서 데이터에 영속성을 부여해주는 계층을 말한다.

Persistence Framework

  • JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업으로 데이터베이스와 연동되는 시스템을 균등한 수준의 개발과 안정성을 보장한다.

Hibernate

  • Java Persistence API(JPA) 사양의 구현으로, 데이터베이스와 상호 작용하는 Java 애플리케이션의 개발을 단순화하는 Java Persistence Framework이다.
  • 거의 모든 주요 RDBMS를 지원하며, 코드를 작성하지 않고 XML 파일을 사용하여 Java 클래스를 데이터베이스 테이블에 매핑하는 작업을 처리한다.

MyBatis

  • MyBatis는 사용자 지정 SQL, 저장 프로시저 및 고급 매핑을 지원하는 Persistence Framework이다.
  • 데이터베이스 레코드에 기본 자료형, Map, Plain Old Java Objects(POJO)를 설정해서 매핑하기 위해 XML과 어노테이션을 사용할 수 있다.

장점

  • 라이브러리가 SQL 쿼리를보다 간단한 메서드로 캡슐화하므로 SQL Query를 크게 보완하여 객체와 직접 상호 작용할 수 있다.
    • 반복적인 SQL Query의 시간을 절약하기 때문에 매우 유용하다.
    • SQL을 잘 알 필요는 없지만, RDBMS가 작동하는 방식을 이해하면 ORM 내부에서 일어나는 동작을 이해하는데 도움이 된다.
  • 시간을 크게 절약 할 수있는 낙관적 잠금 및 비관적 잠금 기능을 기본 제공한다.
  • 클래스 및 객체에 명확한 데이터 구조를 제공하여 코드의 유지보수성을 향상하고 데이터 유형을 확인할 수 있다.
  • DBMS에 대한 종속성이 줄어들어 양 쪽에서 변경사항을 구현하기 쉽다.

단점

  • ORM에 익숙해지는 데 러닝커브가 존재하여, 익숙하게 설정 및 활용하는데 시간이 약간 걸릴 수 있다.
  • 프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기 어렵다.

Object-Relational Impedance Mismatch, 객체-관계 패러다임 불일치

Granularity, 세분성

  • 경우에 따라서 데이터베이스에 있는 테이블 수 보다 더 많은 클래스를 가진 모델이 생길 수 있다.

Inheritance, 상속성

  • 상속은 객체 지향 프로그래밍 언어의 자연스러운 패러다임이다.
  • 일부 RDBMS에서는 하위 유형을 지원하지만, 완전히 표준화되지 않았다.

Identity, 일치

  • RDBMS는 정확히 하나의 동일성의 개념인 기본 키(Primary Key)를 정의한다.
  • 그러나 Java는 객체 식별과 객체 동등성을 모두 정의한다

Associations, 연관성

  • 연관은 객체 지향 언어에서 단방향 참조로 표시되는 반면 RDBMS는 외래 키(Foreign Key) 개념을 사용한다.
  • Java에서 양 방향 관계가 필요한 경우 참조를 두 번(양 방향으로) 정의해야한다.
  • 마찬가지로 객체 도메인 모델을보 고 관계의 다중성을 확인할 수 없다.
  • Java에서 데이터에 액세스하는 방법은 관계형 데이터베이스에서 수행하는 방법과 근본적으로 다르다.
  • Java에서는 하나의 연결에서 다른 연결로 개체 네트워크를 탐색한다.
  • 일반적으로 데이터베이스에서는 SQL 쿼리 수를 최소화하여 JOIN을 통해 여러 엔터티를 로드하고 원하는 대상 엔터티를 선택하는 방식으로 탐색한다.

Reference

댓글남기기