SQL과 ORM의 장단점과 활용방안

    SQL 과 ORM 모두 Database에 있는 데이터에 접근하기 위해서 사용하는 수단입니다. 이번 글에서는 두 방식의 차이와 각각의 장단점과 활용방안에 대해 알아보도록 하겠습니다.

    SQL이란?

    SQL(Structured Query Language)는 RDBMS에 데이터에 관련한 명령을 내리기 위해 사용하는 언어입니다. SQL은 크게 세가지 분류로 나눌 수 있으며 DDL, DML, DCL 이라 부룹니다. 이들은 각각 데이터를 정의하고, 조작하고, 제어합니다.

    직접적으로 RDBMS에 데이터와 관련한 명령을 처리하도록 하기 때문에 더 디테일하고 효과적인 명령을 내릴 수 있습니다. 예를 들자면 몇백만 줄의 대용량 csv 데이터를 데이터베이스에 업로드하더라도 SQL 명령을 최적화하면 30초 남짓한 시간에 업로드 할 수 있습니다. (Postgresql 에 대용량 csv를 업로드하는 방법)

    ORM이란?

    ORM(Object Relational Mapping)은 RDBMS에 저장된 표 형태의 데이터를 객체로 연결시켜주는 툴입니다. 즉 SQL언어를 작성하지 않고도 객체를 사용하여 개발중인 언어로 데이터에 접근할 수 있도록 하는 것이 ORM입니다.

    flowchart LR
    subgraph ORM이란?
    direction LR
    DB[(DB)] <--> ORM <--> Object([Object])
    end

    이 ORM을 사용하면 SQL과 같은 추가적인 언어를 공부할 필요 없이 개발 언어를 그대로 사용하여 데이터베이스를 관리할 수 있기에 개발 효율과 가독성이 증가하는 효과를 가질 수 있습니다.

    ORM을 사용했을 때의 문제점

    1. 성능 문제
      모든 게시글 정보만을 가져오려 했지만, 모든 사용자 정보가 같이 가져와 지는 등 조회된 데이터 N개 만큼 조회 쿼리가 추가적으로 발생하는 N+1 문제 등이 발생할 수 있습니다.
      또한 ORM이 자동으로 생성하는 SQL은 최적화되지 않아 성능 문제를 일으킬 수 있습니다.
    2. 데이터베이스 특화 기능 사용불가
      Postgresql 에서 제공하는 JSONB 형태의 자료형이나 배열 자료형은 모든 DB를 지원해야 하는 ORM입장에서 지원하기 어려운 기능입니다.
    3. 디버깅 문제
      ORM이 자동으로 SQL을 생성하고 쿼리하기에 실제 실행되는 SQL을 알기 어렵고 문제를 분석하기 어렵습니다.
    4. 통계 작성
      ORM을 사용하면 대용량의 데이터가 모두 객체 형태로 변환되어 SQL과 같은 형태의 통계 작성이 어렵습니다.

    언제 ORM을 사용하고 언제 SQL을 사용할까?

    ORM 을 사용하면 개발 속도와 가독성, 유지보수성에 있어 효율적입니다. 오늘날 컴퓨터의 성능이 증가함에 따라 기존에는 개발자가 하던 일도 컴퓨터가 도와주는 측면에 많이 있습니다. 그럼에도 가끔은 SQL을 직접 사용해야 하는 일이 발생합니다.

    오늘날 대부분의 프로젝트에서 단순하고 가벼운 데이터는 ORM을 사용하면 편리하게 처리할 수 있지만, 단순한 CRUD 작업이 아닌, 시계열 데이터를 다루고, 그래프를 그리는 등 통계를 작성하거나, 대용량 데이터를 전송하는 등의 작업에서는 ORM이 SQL보다 비효율적인 경우가 있습니다.

    필자 또한 Grafana 에 시계열 데이터를 시각화할 때 SQL의 WITH 키워드를 사용하는 등 고급 SQL기능을 사용하여 ORM없이 기능을 더 효율적으로 구현한 경험이 있습니다.

    기본적으로는 ORM을 사용하는 것이 프로젝트 진행에 좋겠지만, 복잡한 쿼리를 직접 다뤄야 할 필요가 있을 때는 SQL을 사용하는 것이 적합합니다.

    마치며

    이처럼 오늘날에는 새로운 신기술들이 계속해서 등장하고, AI 기술 또한 발전하여 사람보다 더 나은 코드를 작성하는 경우도 있습니다. 이러한 시대에도 여러 신기술들의 장단점을 파악하고 효율적인 설계를 하는 것은 여전히 사람으로, 이러한 능력이 더욱 중요해 질 것으로 판단됩니다.

    참고문헌


    게시됨

    카테고리

    작성자

    태그:

    Obtuse의 테크 블로그 더 알아보기

    이 블로그에 새 글이 나올 때 마다 이메일로 알림을 받아보는 건 어때요?


    ※구독 버튼을 클릭하면 obtuse.kr의 개인정보 처리방침의 광고성 정보 수신에 동의하는 것으로 간주합니다.

    댓글

    답글 남기기

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

    이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.