객체 관계 매핑

객체 관계 매핑(Object-relational mapping, ORM)은 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다. 객체 지향 언어에서 사용할 수 있는 "가상" 객체 데이터베이스를 구축하는 방법이다. 객체 관계 매핑을 가능하게 하는 상용 또는 무료 소프트웨어 패키지들이 있고, 경우에 따라서는 독자적으로 개발하기도 한다.

 개요 
스토리지 드라이버의 구현별 세부 사항은 일반적으로 사용 중인 프로그래밍 언어의 API에 래핑되어 더 간단하고 주변 코드의 패러다임에 더 부합하는 방식으로 스토리지 매체와 상호 작용하는 방법을 노출한다.

다음은 데이터베이스 엔진을 사용하여 SQL로 작성된 쿼리를 실행하기 위해 C# 코드로 작성된 간단한 예이다.

var sql = "SELECT id, first_name, last_name, phone, birth_date, sex, age FROM persons WHERE id = 10";
var result = context.Persons.FromSqlRaw(sql).ToList();
var name = result[0]["first_name"];

이에 비해 다음에서는 언어의 기능을 자연스럽게 활용하는 코드 작성이 가능한 ORM-job API를 사용한다.

var person = repository.GetPerson(10);
var firstName = person.GetFirstName();

위의 사례에서는 저장소 저장소를 나타내는 개체와 해당 개체의 메서드를 사용한다. 다른 프레임워크는 아래 예제와 같이 코드를 정적 메서드로 제공할 수 있지만 다른 메서드는 객체 지향 시스템을 전혀 구현하지 않을 수도 있다. 종종 ORM이 주변 언어의 디자인 원칙에 가장 잘 맞도록 패러다임을 선택한다.

var person = Person.Get(10);

 전통적인 데이터 액세스 기술과 비교 
객체 지향 언어와 관계형 데이터베이스 간의 전통적인 교환 기술과 비교할 때 ORM은 작성해야 하는 코드의 양을 줄이는 경우가 많다.Douglas Barry, Torsten Stanienda, "Solving the Java Object Storage Problem," Computer, vol. 31, no. 11, pp. 33-40, Nov. 1998, Excerpt at https://www.service-architecture.com/articles/object-relational-mapping/transparent-persistence-vs-jdbc-call-level-interface.html Lines of code using O/R are only a fraction of those needed for a call-level interface (1:4). For this exercise, 496 lines of code were needed using the ODMG Java Binding compared to 1,923 lines of code using JDBC.

ORM 도구의 단점은 일반적으로 구현 코드에서 실제로 일어나는 일을 모호하게 만드는 높은 수준의 추상화에서 비롯된다. 또한 ORM 소프트웨어에 대한 과도한 의존은 잘못 설계된 데이터베이스를 생성하는 주요 요인으로 언급되었다.Josh Berkus, "Wrecking Your Database", Computer, Aug. 2009, https://www.toolbox.com/tech/data-management/blogs/wrecking-your-database-080509/

 같이 보기 
 코바
 데이터베이스
 객체 관계 데이터베이스
 하이버네이트

 각주 

 외부 링크 
 About ORM by Anders Hejlsberg
 Mapping Objects to Relational Databases: O/R Mapping In Detail by Scott W. Ambler


분류:데이터베이스
분류:객체 지향 프로그래밍
분류:데이터 매핑