ORM이란 무엇이며 어떻게 작동하며 어떻게 사용해야합니까? [닫은]


230

누군가 내가 설계하고있는 프로젝트에 ORM을 사용하라고 제안했지만, 그것이 무엇인지 또는 어떻게 작동하는지에 대한 정보를 찾는 데 어려움을 겪고 있습니다.

누구든지 ORM의 정의와 작동 방식 및 사용 방법에 대해 간단히 설명해 줄 수 있습니까?


8
나는이 질문을 찾았지만 2009 년부터 왔으며 이미 ORM을 마스터했는지 모르지만 CodePlex C # ( entityframework.codeplex.com ) 에서 Entity Framework를 찾으 십시오. 여기에서 배울 수있는 소스 코드가 있습니다. 또한 이것을 읽을 수 있습니다. ( dbtechnet.org/labs/dae_lab/Orm.pdf )
막시무스 데시 무스

1
ORM 캠은 Object-Role Modeling 과도 관련이 있습니다. en.wikipedia.org/wiki/Object-role_modeling
O-9

1
이것은 유용한 질문이며 최상위 답변에 대한 투표가이를 확인하는 것으로 보입니다. ORM이 무엇인지에 대한 간단한 설명은 의견이 필요하지 않습니다. 사용자가 시작하기 위해 링크를 요청하기 때문에 질문은 주제를 벗어난 것으로 표시됩니다. 나는 이것이 중재자의 빈번한 과도한 반응이라고 생각합니다.
NeilG

3
@NeilG 비공개 질문은 질문이 주제에 맞지 않음을 의미합니다. 답변에 유용한 정보가있을 수 있지만, 주제에 관한 질문은 아닙니다. 또한 삭제되지 않고 여기에 유지되지만 최상의 상태로 작동하도록 SO를 깨끗하고 주제별로 유지해야합니다. 따라서 첫 번째 의견에 대답하려면 다음과 같이하십시오. 이것은 유용한 질문이 아니며 유용한 답변이 있습니다.
M--

1
@NeilG 문제는 질문에 리소스 요청 (제목과 질문 모두)이 포함된다는 것입니다. 이러한 요청은 주제에 맞지 않습니다. 주로 사람들이 좋아하는 리소스에 대한 링크를 게시하기 때문에 많은 답변이 여기에 있습니다. 질문에서 리소스 요청을 제거하면 기존 답변이 무효화됩니다. 일반 사용자로서 답변을 무효화하기 위해 질문을 편집 할 수 없습니다 . 따라서 닫혀 있어야합니다. 질문에 대한 답변이 없으면 해당 요청을 제거하고 열린 상태로 유지하도록 편집 할 수 있습니다.
Makyen

답변:


483

소개

ORM ( Object-Relational Mapping )은 객체 지향 패러다임을 사용하여 데이터베이스에서 데이터를 쿼리하고 조작 할 수있는 기술입니다. ORM에 관해 이야기 할 때, 대부분의 사람들은 객체 관계형 매핑 기술을 구현 하는 라이브러리 , 즉 "ORM"이라는 문구를 언급합니다.

ORM 라이브러리는 데이터를 조작하는 데 필요한 코드를 캡슐화하여 선택한 언어로 작성된 완전히 일반적인 라이브러리이므로 더 이상 SQL을 사용하지 않습니다. 사용중인 언어와 동일한 언어로 개체와 직접 상호 작용합니다.

예를 들어 의사 언어를 사용하는 완전히 가상의 사례는 다음과 같습니다.

당신은 책 클래스를 가지고 있으며, 저자가 "Linus"인 모든 책을 검색하려고합니다. 수동으로 다음과 같은 작업을 수행합니다.

book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
     book = new Book();
     book.setAuthor(row.get('author');
     book_list.add(book);
}

ORM 라이브러리를 사용하면 다음과 같습니다.

book_list = BookTable.query(author="Linus");

기계 부품은 ORM 라이브러리를 통해 자동으로 관리됩니다.

장점과 단점

ORM을 사용하면 다음과 같은 이유로 많은 시간이 절약됩니다.

  • DRY : 데이터 모델을 한 곳에만 작성하므로 코드를 업데이트, 유지 관리 및 재사용하기가 더 쉽습니다.
  • 데이터베이스 처리에서 I18N에 이르기까지 많은 작업이 자동으로 수행됩니다 .
  • 결국 MVC 코드 를 작성 하여 결국 코드를 ​​좀 더 깨끗하게 만듭니다.
  • 형식이 잘못된 SQL을 작성할 필요는 없습니다 (실제로 매우 강력하고 복잡한 언어 인 경우 SQL은 "하위"언어로 취급되므로 대부분의 웹 프로그래머는 실제로 그것을 suck습니다).
  • 살균; 준비된 명령문이나 트랜잭션을 사용하는 것은 메소드를 호출하는 것만 큼 쉽습니다.

다음과 같은 이유로 ORM 라이브러리를 사용하는 것이 더 유연합니다.

  • 자연스럽게 코딩하는 방식에 맞습니다 (귀하의 언어입니다).
  • DB 시스템을 추상화하므로 언제든지 원할 때 변경할 수 있습니다.
  • 모델이 나머지 응용 프로그램에 약하게 바인딩되어 있으므로 모델을 변경하거나 다른 곳에서 사용할 수 있습니다.
  • 두통없이 데이터 상속과 같은 OOP 양호를 사용할 수 있습니다.

그러나 ORM은 고통 스러울 수 있습니다.

  • 이를 배워야하며 ORM 라이브러리는 간단한 도구가 아닙니다.
  • 설정해야합니다. 같은 문제입니다.
  • 일반적인 쿼리의 경우 성능은 정상이지만 SQL 마스터는 대규모 프로젝트의 경우 자체 SQL로 항상 더 잘 수행됩니다.
  • DB를 추상화합니다. 배후에서 무슨 일이 일어나고 있는지 알면 괜찮지 만, for루프 에서 큰 타격과 같은 매우 욕심 많은 진술을 쓸 수있는 새로운 프로그래머에게는 함정입니다 .

ORM에 대해 배우는 방법?

글쎄, 하나를 사용하십시오. 어떤 ORM 라이브러리를 선택하든 모두 동일한 원칙을 사용합니다. 여기에는 많은 ORM 라이브러리가 있습니다 :

웹 프로그래밍에서 ORM 라이브러리를 사용하려면 다음과 같은 전체 프레임 워크 스택을 사용하는 것이 좋습니다.

  • 심포니 (PHP, Propel 또는 Doctrine 사용).
  • 장고 (파이썬, 내부 ORM 사용).

무언가를 배우려고하지 않는 한, 자신의 ORM을 쓰려고하지 마십시오. 이것은 거대한 작업이며, 오래된 작업은 많은 시간과 작업이 필요하기 때문에 시간이 많이 걸렸습니다.


50

누구든지 간단한 설명을 해 줄 수 있습니까?

확실한.

ORM은 "Object to Relational Mapping"을 나타냅니다.

  • 개체 부분은 당신이 당신의 프로그래밍 언어를 사용하는 하나 (이 경우 파이썬)입니다

  • 관계 부분은 관계형 데이터베이스 관리 시스템입니다 (데이터베이스)가 다른 유형의 데이터베이스가 있지만 가장 인기가 관계형입니다 (당신이 알고있는 테이블, 열, PK FK 등의 예를 들어 오라클의 MySQL, MS-SQL)

  • 마지막으로 매핑 부분은 객체와 테이블을 연결하는 곳입니다.

ORM 프레임 워크를 사용하지 않는 응용 프로그램에서는이 작업을 직접 수행합니다. ORM 프레임 워크를 사용하면 솔루션을 만드는 데 필요한 상용구를 줄일 수 있습니다.

이 객체가 있다고 가정 해 봅시다.

 class Employee:
      def __init__( self, name ): 
          self.__name = name

       def getName( self ):
           return self.__name

       #etc.

그리고 테이블

   create table employee(
          name varcar(10),
          -- etc  
    )

ORM 프레임 워크를 사용하면 해당 객체를 자동으로 db 레코드로 매핑하고 다음과 같이 작성할 수 있습니다.

   emp = Employee("Ryan")

   orm.save( emp )

그리고 직원을 DB에 삽입하십시오.

죄송 합니다만, 다른 기사를 읽을 수있을 정도로 간단하기를 바랍니다.



4

모든 두문자어와 마찬가지로 모호하지만 객체 관계형 매퍼 를 의미한다고 가정 합니다. 눈을 가리고 아래에 SQL이 없다는 것이 아니라 오히려 모든 객체입니다 .-). 물론 사실도 아니고 문제도 없습니다. 항상 화려한 Jeff Atwood는 ORM 을 CS의 베트남 이라고 설명했습니다 . ;-) 그러나 SQL을 거의 또는 전혀 알지 못하고 매우 간단하고 소규모의 문제가 있으면 시간을 절약 할 수 있습니다!-)


2

개체 모델은 다음 세 가지 개념과 관련됩니다. 데이터 추상화 캡슐화 상속 관계형 모델은 관계 또는 테이블의 기본 개념을 사용했습니다. 객체 관계형 매핑 (OR 매핑) 제품은 객체 프로그래밍 언어 기능을 관계형 데이터베이스와 통합합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.