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에서 양 방향 관계가 필요한 경우 참조를 두 번(양 방향으로) 정의해야한다.
- 마찬가지로 객체 도메인 모델을보 고 관계의 다중성을 확인할 수 없다.
Navigation, 탐색
- Java에서 데이터에 액세스하는 방법은 관계형 데이터베이스에서 수행하는 방법과 근본적으로 다르다.
- Java에서는 하나의 연결에서 다른 연결로 개체 네트워크를 탐색한다.
- 일반적으로 데이터베이스에서는 SQL 쿼리 수를 최소화하여 JOIN을 통해 여러 엔터티를 로드하고 원하는 대상 엔터티를 선택하는 방식으로 탐색한다.
댓글남기기