[BE] ORM을 사용하는 이유

홍종훈·2023년 7월 11일
0

BE

목록 보기
1/9

ORM의 장점

과거에는 MySQL을 사용하려 할때, ORM을 사용하지 않고, 모든 코드를 SQL을 사용하는 Raw Query 형태로 구현하여 사용하였습니다. 하지만 Sequelize와 같은 ORM이 생기게 되면서 위와 같은 상황들이 많이 줄어들게 되었습니다.

그러면 프로젝트를 구현할 때, Raw Query로 구현하지 않고, ORM을 사용하는 이유가 무엇일까요?
Sequelize와 같은 ORM을 사용하는 가장 큰 이유는 대표적으로 2가지가 있습니다.

  • 1️⃣  : 프로덕션에서 사용하는 데이터베이스가 언제바뀔 지 알 수 없습니다.

    하나의 스타트업을 예를 들어 보겠습니다.

    처음은 가장 보편적으로 사용하는 MySQL을 사용하고 있었습니다.

    그러나 시간이 지날수록 개발자들의 유지보수 만으로 DB를 관리하기 어려워져 기술지원이 활발한 Oracle로 DB를 변경하려할 때 ORM을 사용하지 않는 개발자들은 두가지의 선택의 기로에 서게되는데요.

    1. 서비스 중인 프로덕션의 모든 Raw Query코드를 MySQL에서 Oracle변경하는 것을 고려하거나,

    2. Oracle로 변경하지 않고, 어려운 현재 상황을 감내하고 계속 MySQL을 쓴다거나 말이죠. 하지만, ORM을 도입하였을 경우 여러분들은 이런 상황을 겪지 않고, 단순히 ORM의 속성값만 변경할 경우 언제든지 자유롭게 DB를 변경할 수 있게 되어 개발할 때 선택의 폭이 넓어지게 됩니다.

  • 2️⃣  : 데이터베이스에서 사용하는 DB 또는 Table 속성이 변경되었을 때 빠르게 수정이 가능합니다.

    DB를 사용하는 코드를 모두 Javascript에서 Raw Query로 구현하였다고 가정해보겠습니다.

    프로덕션에서 서비스를 진행 중 갑작스럽게 클라이언트의 요구사항으로 게시글을 생성할 때 공개, 비공개 속성을 추가하게 되었을 경우 아래와 같은 SQL이 생성되게 됩니다.

    INSERT INTO Posts (title, content)
           VALUE ("제목", "내용");
    INSERT INTO Posts (title, content, visibility)
           VALUE ("제목", "내용", "visible");
    # 게시글의 visivility Column이 추가되었습니다.

    우선 Javascript 코드 만으로는 게시글을 관리하는 테이블이 어떤 테이블을 나타내는지 인지하기도 어려울 뿐더러, 모든 API에서 사용하는 Raw Query에서 visibility Column에 대한 내용을 하나씩 수정해야됩니다.

    단순히 조회를 하는 API 뿐만 아니라 생성, 수정, 삭제에 해당하는 모든 API를 해당하는 쿼리에 맞게 수정해야하는 불상사가 발생하게 됩니다.
    (프로젝트를 시작한지 얼마되지 않았다면 API를 수정하기 쉽겠지만, 사용하는 API가 수십, 수백개가 된다고 했을 때, 모든 코드를 수정하는 것이 쉽지 않겠죠?)

    하지만, 여기서 ORM을 사용하였을 경우 여러분들은 테이블을 나타내는 Sequelize의 Model을 수정하기만 하더라도 수많은 API에서 Raw Query를 수정하지 않고도 visibility Column 값에 대한 정보를 추가할 수 있습니다.

profile
Search Engineer

0개의 댓글