티스토리 뷰
객체 관계 매핑(Object-relational mapping; ORM)은 관계형 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 자동으로 매핑(연결)해주는 프로그래밍 기법을 말합니다.
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하기에 객체 모델과 관계형 모델 간의 불일치가 생기게 됩니다.
1. 세분성(Granularity)
데이터베이스의 테이블수 보다 더 많은 클래스 객체 모델이 있을 수 있기 때문에 생기는 불일치 문제입니다. 객체 모델이 관계형 모델보다 더 세분화되어있기 때문입니다.
2. 상속성(Inheritance)
관계형 데이터 베이스에 상속의 개념이 없어 생기는 불일치 문제입니다.
단순히 데이터 베이스 칼럼과 클래스 필드를 매칭 하는 것은 간단합니다.하지만 상속, 연관 등이 사용되면 객체와 테이블을 매칭 하는 것이 굉장히 복잡해집니다. (많은 테이블을 조인해야 하는 경우가 다반사)
3. 동일성(Identity)
관계형 데이터베이스는 기본키(Primary Key, PK)를 이용해 동일성을 정의하지만, 객체 식별과, 객체 동일성을 모두 고려하는 경우가 있어 생기는 불일치 문제입니다.
관계형 데이터 베이스에서는 기본키가 동일하다면 같은 레코드로 정의하지만, JAVA에서는 주소 값이 같거나 내용이 같은 경우를 모두 고려해 정의하는 것을 예로 들 수 있습니다.
4. 연관성(Associations)
관계형 데이터 베이스에서는 외래 키(Foreign Key, FK)를 사용해 양방향 참조를 정의할 수 있으나 객체 지향 언어의 객체 참조는 단반향 참조로만 이루어지기 때문에 오는 불일치 문제입니다.
객체 지향 언어의 경우 양방향을 참조를 위해서는 양쪽 객체에 모두 연관을 정의해야 해야 합니다.
5. 탐색(Navigation)
데이터를 탐색하는 방법이 다르기때문에 오는 불일치 문제입니다.
관계형 데이터 베이스는 SQL을 최소화하기위해 조인(JOIN)을 통해 여러 엔티티(데이터집합)을 불러와서 데이터를 탐색합니다. 하지만 객체지향언어 자바의 경우 하나의 객체에서 출발해 연결을 따라 그래프 형태로 탐색을 합니다. 따라서 관계형 데이터 베이스의 경우 검색하고자 하는 테이블과 멤버가 있는지 확인을 하고 사용해야하는 제약이 있습니다.
이런 여러 문제 때문에 관계형 데이터 베이스를 객체로 정확히 표현할 수 없을뿐더러 객체지향적으로 설계할수록 더욱더 문제가 심화되는 경향이 있습니다.
이외에도 SQL에 의존적인 개발이 이루어져 쿼리 변경에 따라 객체를 변경해야 하는 불편함이 일어나게 됩니다.
이런 여러 문제를 보완하고 객체 지향적으로 관계형 데이터 베이스를 다룰 수 있도록 도와주는 기술이 ORM이라고 할 수 있습니다.
ORM을 사용하면 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성해 주기 때문에 객체를 통해 간접적으로 데이터베이스를 다룰 수 있게 됩니다. ORM은 사용자가 좀 더 객체지향적인 코드에 집중할 수 있으며 부수적인 코드를 줄여 가독성과 생산성이 증가한다는 장점이 있습니다. 하지만 편리한 만큼 배우기가 어려우며 제대로 사용하지 않으면 반대로 독(성능 저하, 복잡)이 될 수도 있다는 있기에
신중하게 사용해야 합니다.
[참고자료]
감사합니다.
공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.
'DB' 카테고리의 다른 글
[DB] NoSQL과 레디스(Redis) (0) | 2023.12.07 |
---|---|
[DB] 트랜잭션(Transaction)과 트랜잭션 격리 수준(Isolation Level) (0) | 2023.11.07 |
[DB] MySQL 설치하기 (0) | 2022.02.03 |
[DB]SQL Injection 이란? (0) | 2022.01.28 |
[Oracle DB] BLOB 이란 (feat. LOB타입) (0) | 2022.01.27 |