ORM

Kyoungchan Cho·2022년 12월 1일
0
post-thumbnail

intro

지난 두번의 프로젝트에서는 SQL-query의 학습 목적으로 ORM의 기능을 사용하지 않고 raw-query를 사용하며 디비 풀링만의 목적으로 typeORM을 사용했었다. 그래서 새롭게 시작한 프로젝트에서는 typeORM보다 좀 더 대중적인 Sequelize를 사용하고 ORM의 기능을 활용해보고자 한다. 그전에 ORM이 뭔지 이해하고 넘어가자.

ORM ?

  • Object-realational mapping(객체 관계 매핑)
  • 객체지향 프로그래밍과 관계형 데이터베이스(RDB) 사이의 호환되지 않은 데이터를 변환하는 기술
  • 객체는 객체대로 설계, 관계형 데이터베이스는 관계형 데이터베이스대로 설계
  • ORM 프레임워크가 중간에서 객체와 RDBS를 매핑
  • 대중적인 언어에는 대부분 ORM 기술이 존재

ORM을 사용하면...

대부분의 객체 지향 언어에서 개발을 할때 객체를 RDB에 저장하고 관리하는 상황에서 SQL 중심적으로 개발을 하게 된다면 매번 기능을 추가할 때 마다 개발 언어에서의 객체를 SQL 쿼리문으로.. SQL을 받은 데이터를 객체로 변경하는 과정을 반복해야 한다.

장점

  • SQL raw query를 사용하는 대신 메서드로 DB에 접근 가능하고, 객체 지향적인 프로그래밍이 가능해진다
  • 문법 실수 없이 잘 짜여진 SQL 쿼리문을 ORM의 힘을 빌려 사용하기 떄문에 버그와 실수가 감소하고, 개발자 친화적인 간결하고 직관적인 코드 작성이 가능해진다.
  • 코드 속에서 다루어야 하는 데이터 객체 위주로 집중하여 개발할 수 있고, 그 객체를 재활용할 수 있다.
  • ORM은 특정 RDBMS에 종속되는 것이 아니라 다양한 DB에 유연하게 연결이 가능해 재사용 및 유지보수의 편리성이 증가한다.

단점

  • 초기 설계의 어려움이 있다.
  • ORM은 데이터를 다룰 때 raw-query보다 리소스가 많이 드는 경우가 있다.
  • 잘 못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생긴다.
  • 일부 쿼리는 ORM 작업으로 표현할 수 없어 SQL쿼리를 직접 작성해야 될 때가 있다.

summary

ORM은 객체와 RDB 두 기둥위에 있는 기술이다. 객체와 RDB를 매핑하여 비즈니스 로직에 집중하여 코드를 짤 수 있게 해주고, 다양한 기능을 통해 SQL 쿼리문을 문법 실수나 버그 없이 동작할 수 있게 해준다. 특정 RDBMS에 종속되지 않고 다양한 DB에 유연하게 연결이 가능해 재사용 및 유지보수의 편리성도 가지고 있다. 하지만 ORM은 SQL Query를 직접 사용할 때 보다 성능 저하 이슈가 발생할 수 있고 일부 쿼리는 구현할 수 없을 때도 있다.
실무에서는 장애의 대부분은 DB에서 발생하기 때문에 ORM 사용에 있어서 초기 설계에 각별히 신경을 써야되며 상황에 따라 SQL Query를 사용하는 것을 고려해봐야한다. 그리고 객체 지향과 RDB에 대해 전문적인 지식을 가지고 ORM을 사용해야 한다.




참조 :
https://yceffort.kr/2021/07/dont-use-nodjs-orm
https://gmlwjd9405.github.io/2019/02/01/orm.html
https://www.youtube.com/watch?v=_tMJPysViNU

profile
https://lying-lettuce-69f.notion.site/KyoungchanCho-Blog-f9f150b9e3be4467a67cf2a21932650d (게시글 자동 비공개 현상으로 일단 노션으로 이동합니다. 소개에서 URL 링크 클릭으로 연결됩니다.)

0개의 댓글