ORM이 뭐야?

박성재·2021년 1월 16일
0

웹 백엔드

목록 보기
1/1
post-thumbnail

참고:
stack overflow - What is an ORM, how does it work, and how should I use one?

위 글을 참고하여 번역하였습니다.

배너: godori님이 만드신 배너 메이커 활용


ORM(Object Relational Mapping)

ORM(Object Relational Mapping)이란, 객체지향 패러다임을 이용하여 데이터베이스로부터 데이터를 쿼리하고 조작할 수 있도록 해주는 기술이다.

즉, 객체와 데이터베이스를 연결(매핑)해주는 역할을 한다.

ORM에 대해서 말할 때, 대부분의 사람들은 ORM 기술을 구현하는 '하나의' 라이브러리를 지칭하고 있는 것이다. 그러므로 '하나의' ORM('an' ORM)으로 표현하는 것이다.

ORM 라이브러리는 우리가 사용하는 언어로 쓰인 완전히 평범한 라이브러리로, 데이터를 조작하기 위해 필요한 코드를 캡슐화 하고 있기 때문에 데이터를 조작하기 위해 더 이상 SQL 쿼리문을 사용하지 않아도 된다.

우리가 사용하고 있는 그 언어를 통해서 객체와 직접적으로 상호작용하게 되는 것이다. SQL 쿼리문 작성의 기술적인 부분은 ORM 라이브러리가 맡아준다.


ORM을 쓰면 좋은 이유

1) 시간을 많이 절약할 수 있다

  • 중복 배제(Don't Repeat Yourself; DRY): 우리는 데이터 모델을 오직 한 곳에서만 작성하게 되고, 이는 코드의 유지보수와 재사용을 보다 쉽게 한다.
  • DB 핸들링부터 국제화와 현지화(i18N)까지 많은 일들이 자동적으로 처리된다
  • ORM은 우리가 MVC 코드를 쓰도록 강제하고, 이는 결국 우리의 코드를 조금 더 클린하게 만든다.
  • SQL문을 형편없이 작성할 필요가 없다.
    - 대부분의 웹 프로그래머들은 SQL문 작성에 젬병이라고 한다. 이는 SQL이 마치 "서브" 언어처럼 다뤄지기 때문인데, 사실 SQL은 굉장히 강력하고 복잡한 언어이다.
  • 코드를 무해하게 만들어 준다(Sanitazation): 미리 준비된 표현이나 트랜잭션은 메소드를 호출하는 것만큼이나 쉽다.
    - 참고로 Sanitization은 형식은 올바르지만, 실제로 DB에 전달되어 실행될 때 DB에 악영향을 미칠 수 있는 내용이 inject 되어 있는 경우 이를 걸러내는 작업과 같이, 코드를 '무해'하게 하는, 즉 코드에 대한 위생처리라고 할 수 있다.
    - 이와 달리, Validation은 사용자의 입력이 올바른 '형식'으로 되어 있는지를 확인하는 작업이다.

2) 더 유연하다

  • 우리가 코딩하는 자연스러운 방식에 잘 맞는다(원래 주로 사용하는 언어로!)
  • DB 시스템을 추상화하기 때문에 언제든 우리가 원할 때 변경할 수 있다.
  • 모델이 애플리케이션의 나머지 부분에 느슨하게 묶여있기 때문에, 다른 어디서든 이를 변경하거나 사용할 수 있다.
  • 데이터 상속과 같은 객체 지향 프로그래밍의 장점을 이용할 수 있게 해준다.

하지만 ORM이 고통이 될 수도 있는 이유

  • 일단 배워야 하고, 세팅해야 한다. ORM 라이브러리들은 가벼운 툴이 아니다.
  • 일반적인 쿼리들의 경우 성능이 괜찮은 수준이지만, 큰 프로젝트에서는 직접 SQL 문을 작성하는 SQL 마스터가 항상 더 나을 것이다.
  • ORM은 DB를 추상화한다.
    - 그 이면에서 어떤 일들이 일어나는지를 알고 있다면 괜찮지만, 굉장히 탐욕적인 표현들을 작성할 수 있는 프로그래밍 입문자들에게는 함정이 될 수 있다.

Cf) Python 사용자들의 경우 Django 프레임워크에서 내부적으로 제공하는 ORM을 사용하거나, sqlalchemy 라이브러리를 통해 ORM 기술을 이용할 수 있다.

0개의 댓글