ORM이란?

오해성·2019년 12월 21일
15

기술 상점

목록 보기
1/10
post-thumbnail

이 포스트에서는 ORM의 기본적인 개념과 장단점을 설명하고 SequelizePrisma의 장단점에 대한 내용을 다룹니다.

🤔ORM이란??

ORM(Object-relatinal mapping)이란 객체(클래스)와 관계(관계형 데이터 베이스)와의 설정을 의미 합니다. 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터 베이스는 테이블을 사용합니다. 여기서 객체 모델과 관계형 모델간에 불일치가 존재 하는데 이 객체간의 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결 하는 것ORM입니다.

Object <= 매핑 => DB데이터 에서 매핑의 역할을 하는 것이 ORM이라 할 수 있습니다.


😀ORM 장점

  • 객체 지향적 코드로 인해 더 직관적이고 비즈니스 로직에 집중할 수 있도록 도와준다.
    • CRUD을 위한 긴 SQL 문장을 작성할 필요가 없다. (여전히 쿼리작성은 필요하지만)
    • 각 객체(Model)별로 코드를 작성하여 가독성을 높여 준다.
    • SQL의 절차적 접근이 아닌 객체적인 접근으로 생산성을 높여 준다.
  • 재사용 및 유지보수의 편리성이 증가한다.
    • 매핑 정보가 명확하여, ERD를 보는 것에 대한 의존도를 낮출 수 있다.
    • ORM은 독립적으로 작성이 되어 있고 해당 객체들은 재사용이 가능 하다.
  • DBMS에 대한 종속성이 줄어든다.
    • 대부분의 ORM은 DB에 종속적이지 않다.
    • 개발자는 Object에 집중함으로 DBMS를 교체하는 극단적인 작업에도 비교적 적은 리스크와 시간이 소요된다.
    • 종속적이지 않다는 것은 구현 방법 뿐만 아니라 많은 솔루션에서 자료형 타입까지 유효하다.
    (*종속성: 프로그램 구조가 데이터 구조에 영향을 받는 것을 의미함.)

🤨ORM 단점

  • 완벽한 ORM만으로는 구현하기가 어렵다.
    • 사용하기에는 편하지만 설계에는 매우 신중해야 한다.
    • 프로젝트의 복잡성이 높아질 경우 난이도 또한 올라갈 수 있다.
    • 잘못 구현된 경우 속도 저하 및 심한 경우 일관성이 무너지는 문제점이 생길 수 있다.
  • 프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기 어렵다.
    • 이미 프로시저가 많은 시스템에서는 다시 객체로 바꿔하 하며, 그 과정에서 생산성 저하 혹은 리스크가 발생할 수 있다.

(*프로시저: 특정작업을 위한 프로그램의 일부. 함수와 같은 의미)


앞에서는 ORM의 개념과 장단점을 알아보았습니다. 그렇다면 ORM Framework의 종류로는 무엇이 있고 어떤 장단점들을 가지고 있는지 알아봅시다. 제가 소개할 ORM Framework는 제가 직접 사용을 해보고 가장 보편적으로 사용이 되고 있는 Sequelize와 최근에 한창 성장을 이루고 있는 Prisma에 대해 소개 하겠습니다.


📕Sequelize

먼저 소개드릴 ORM은 Sequelize입니다. Sequelize는 Node.js에서 가장많이 사용되고 있는 ORM이며 MySQL, PostgreSQL, MariaDB, SQLite, MSSQL을 지원합니다. 그 외에도 트랜잭션이나 relation, read replication등을 지원합니다. Sequelize의 가장 큰 특징은 Promise(비동기작업 제어방식)를 기본으로 지원 해준다는 점입니다.
Promise의 장점은 다음과 같습니다.

1) 복잡한 비동기 코드를 깔끔하고 쉽게 만들 수 있도록 한다.
2) Chaining을 통해 값을 전달하거나 연속된 일련의 작업을 처리 할 수 있다.
3) Error handling에 대한 처리를 깔끔하게 할 수 있다.

다음과 같은 이유들로 Node.js를 사용하는 사람들은 Sequelize를 가장 많이 사용을 하며 실제 Sequelize 또한 Node.js에 가장 특화된 ORM이라고 할 수 있습니다.

📘Prisma

다음으로 소개드릴 ORM은 Prisma입니다. Prisma는 저도 아직 제대로 사용해본적이 없고 한글로 쓰인 자료도 많지 않은 기술입니다. Prisma는 제가 진행중인 도담도담이라는 프로젝트의 Version2 작업을 하며 알게 된 ORM이며 Prisma가 기존에 사용하던 Sequelize와 어떤 차이점과 장단점이 있는지 찾아 보게 되었습니다. Prisma의 특징은 GraphQL스키마를 기반으로 DB를 자동생성 해준다는 것입니다. GraphQL이란 facebook에서 만든 Graph Query Language로 어플리케이션 쿼리 언어로써 기존의 REST API의 한계점을 극복하고자 나온 통신 규약으로 REST API를 대체할 수 있습니다.

GraphQL의 장점으로는 다음과 같습니다.

1) 요청메세지가 값이 없는 JSON과 비슷하며 받는 데이터는 JSON형태 이다.
2) 단일요청으로 원하는 데이터를 한번에 가져올 수 있다.
3) type system을 지원한다.
4) GraphiQL 등의 강력한 도구를 사용 할 수 있다.
5) 확장성이 좋다.

다음과 같이 GraphQL의 장점이 있으며 이를 기반으로한 Prisma가 요즘 뜨고 있는 ORM입니다. GraphQL이 성장을 하고는 있지만 아직 까지는 REST API를 완전히 대체하진 못할 것 이고 개발자들 사이에서도 여러 의견 분분하지만 전체적으로는 GraphQL의 장점을 부인하지 않는 추세입니다.
현재 Prisma가 지원하는 데이터베이스와 추가된 데이터베이스는 https://www.prisma.io/features/databases에서 확인이 가능 합니다.
Prisma 공식문서 보러가기 => https://www.prisma.io/docs/understand-prisma/prisma-introduction-what-why-how-j9ff/


🚩마치며

처음 써보는 블로그라 보기에도 좋지는 못할 것이고 내용도 정확하지 않을 수도 있습니다. 이번에 제가 처음 블로그를 써보며 느꼈던 점들은 확실히 정리가 잘된다는 점입니다. 평소에 어렴풋히 알고 있던 지식들도 실제로 정리를 하려 하니 막막하기도 하였고 의외로 몰랐던 부분이 많아 당황하기도 하였습니다. 블로그를 작성하면서 몰랐던 부분과 확실하지 않은 내용은 자료를 찾아보며 다시 공부하는 계기가 되었고 그것을 다시 정리하는 과정을 거치며 단단히 익힐 수 있었던 것 같습니다.

2개의 댓글

comment-user-thumbnail
2021년 4월 1일

좋은 자료 감사합니다:)

답글 달기
comment-user-thumbnail
2021년 7월 28일

좋은 자료 감사합니다~

답글 달기