Computer Science

[DATABASE] ORM이란?

emhaki 2023. 1. 18. 08:20
728x90
반응형
SMALL

ORM이란

ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다. 우리가 OOP(object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블을 자동으로 매핑하는 것을 의미한다. 그러나 클래스와 테이블은 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다고 한다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다. 

🔎 ORM 요약

  • ORM은 Object Relational Mapping(객체-관계-매핑)의 약자이다.
  • ORM은 객체와 데이터베이스의 관계를 매핑해주는 도구이다.
  • ORM은 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 도구이자 중계자 역할을 한다.
  • ORM은 MVC 패턴에서의 모델(Model)을 기술하는 도구이다.
  • ORM은 객체와 모델 사이의 관계를 기술하는 도구이다.

ORM의 장점

ORM을 이용하면 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어, 개발자가 객체 모델만 이용해서 프로그래밍을 하는 데 집중할 수 있게 한다. SQL문을 사용하면서 같이 필요한 선언문, 할당, 종료 같은 부수적인 코드가 사라지거나 줄어들며, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높일 수 있다. 객체지향적 접근과 SQL의 절차적/순차적 접근이 혼재되어있던 기존 방식과 달리 오직 객체지향적 접근만 고려하면 되기 때문에 생산성이 증가한다.

 

또한 기존 객체와 독립적으로 작성되어있고, 객체로 작성되었기 때문에 재활용할 수 있다. 매핑하는 정보가 명확하기 때문에 ERD를 보는 의존도를 낮출 수 있다.

🔎 ORM 장점 요약

  • ORM을 이용하면 SQL Query가 아닌 메서드로 데이터를 조작할 수 있다.
  • 이로써 프로그래머가 객체 모델로 프로그래밍하는 것에 더 집중할 수 있게 도와준다.
  • 각종 객체에 대한 코드를 별도로 작성하기 때문에 코드 가독성을 높여준다.
  • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 생산성이 증가한다.

ORM의 단점

ORM을 사용하는 것은 매우 편하지만 그만큼 신중하게 설계해야한다. 프로젝트의 복잡성이 커질 수록 난이도도 올라가고 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다. 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있다.

🔎 ORM 단점 요약

  • 사용하기는 편하지만 설계는 매우 신중하게 해야한다.
  • 프로젝트의 복잡성이 커질경우 난이도 또한 올라갈 수 있다.
  • 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수 있다.

Django ORM

Django ORM을 활용해 데이터를 쉽게 다룰 수 있다. 예를 들어 book 이라는 객체에서 저자의 이름이 kim인 책 목록을 가져오고 싶을 때 SQL 쿼리문을 사용할 경우 아래와 같이 sql 쿼리문을 작성하고, 데이터를 가져오는 일련의 과정들을 코드에 적어야 한다.

book_list = new list();
sql = SELECT book FROM library WHERE author = 'kim';
data = query(sql);
while (row = data.next()){
    book = new Book();
    book.setAuthor(row.get('author'));
    book_list.add(book);
}

하지만 Django ORM을 사용할 경우

book_list = BookTable.query(author="kim")

간단하게 한 줄로 원하는 객체를 가져올 수 있다. 이는 코드 가독성을 높여줄 뿐 아니라 객체 모델로 프로그래밍하는 것에 더 집중할 수 있게 도와주며 객체지향적 접근만 고려하면 되기 때문에 생산성이 증가하게 된다.

 

참고

https://hanamon.kr/orm%EC%9D%B4%EB%9E%80-nodejs-lib-sequelize-%EC%86%8C%EA%B0%9C/

https://geonlee.tistory.com/207

http://www.incodom.kr/Django_ORM

 

728x90
반응형