객체 관계 매핑
객체 관계 매핑(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은 작성해야 하는 코드의 양을 줄이는 경우가 많다.[1]
ORM 도구의 단점은 일반적으로 구현 코드에서 실제로 일어나는 일을 모호하게 만드는 높은 수준의 추상화에서 비롯된다. 또한 ORM 소프트웨어에 대한 과도한 의존은 잘못 설계된 데이터베이스를 생성하는 주요 요인으로 언급되었다.[2]
같이 보기
[편집]각주
[편집]- ↑ 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.
- ↑ Josh Berkus, "Wrecking Your Database", Computer, Aug. 2009, https://www.toolbox.com/tech/data-management/blogs/wrecking-your-database-080509/