SQL? ORM 쓰면 끝 아닌가?

황성민·2025년 5월 19일
post-thumbnail

SQL의 중요성과 백엔드 개발자와의 관계

백엔드 개발자와 SQL과는 떼려야 뗄 수 없는 존재라 생각한다.
백엔드 개발 과정에서 필수로 만나게 되는 것이 데이터베이스기 때문이다.
이 데이터베이스와 소통하는 핵심 도구가 SQL이기 때문에 백엔드 개발자의 필수 역량으로는 SQL이 꼭 필요하다고 생각한다.

ORM의 장점과 사용 이유

ORM : Object Relational Mapping, 객체 관계 매핑

먼저 ORM에 대해 알아보자.
ORM객체(Object)와 데이터베이스 테이블(Relation) 사이의 데이터를 매핑해주는 도구다.
ORM을 통해서 개발자는 SQL을 직접 작성하지 않고, 객체 지향적인 방식으로 데이터를 조작할 수 있다.

ORM의 주요 개념

객체와 테이블 매핑 : ORM은 프로그래밍 언어의 객체를 데이터베이스의 테이블에 매핑, 각 객체는 데이터베이스의 한 행, 객체의 속성은 테이블의 열에 대응

SQL 자동 생성 : ORM은 데이터베이스와의 상호작용을 위해 필요한 SQL 쿼리를 자동으로 생성, 이 덕분에 SQL 쿼리를 직접 작성하지 않고도 데이터를 관리할 수 있음

추상화 : ORM은 데이터베이스와의 상호작용을 추상화, 데이터베이스의 특정 구현에 종속되지 않고 데이터 조작을 수행할 수 있도록 함.
이는 데이터베이스 변경 시 코드의 수정 범위를 최소화할 때 도움이 됨.

트랜잭션 관리 : ORM은 트랜잭션을 관리하여 데이터의 일관성을 보장
여러 데이터 조작 작업을 하나의 트랜잭션으로 묶어 원자성을 유지할 수 있음

ORM의 장점

ORM의 장점에는 다음이 있다.

  • 생산성 : 복잡한 SQL 없이도 CRUD 작업이 쉬움
  • 유지보수성 : 비즈니스 로직과 DB 작업을 하나의 언어로 관리 가능
  • DB 독립성 : 다양한 DB 시스템을 지원, 특정 DBMS에 종속되지 않고 쉽게 다른 DBMS로 전환 가능
  • 보안 : SQL 인젝션 방지 등 기본적인 보안 기능 제공

ORM 예시

Java: JPA (Hibernate)

Python: SQLAlchemy, Django ORM

예: userRepository.save(user) 한 줄로 회원 정보를 DB에 저장할 수 있음.

ORM의 한계와 단점

ORM의 한계와 단점은 3가지로 분류해서 알아보자.

성능 문제

  • N+1 문제 : 연관된 엔티티를 조회할 때 예상보다 많은 SQL이 실행됨
  • 복잡한 JOIN 쿼리 : ORM이 비효율적인 SQL을 생성할 수 있음

디버깅의 어려움

  • 실행되는 SQL을 추적하기 어려움
  • 로직은 객체 기반, 실행은 SQL 기반이라 중간 지점에서 오류 추적이 복잡

ORM으로 처리하기 어려운 상황

  • 복잡한 통계, 집계 쿼리, 서브쿼리, 윈도우 함수
  • Stored Procedure 활용이 필요한 상황

    따라서 실무에서는 복잡한 로직은 SQL 또는 Native Query로 직접 작성하는 경우가 많음

SQL과 ORM을 균형있게 사용하는 법

마지막으로 각자 장단점이 존재하는 SQL과 ORM을 균형있게 사용하는 법을 알아보자.

함께 사용하는 전략

  • JPQL (Java) : 객체지향 쿼리 언어

  • Native Query : SQL을 직접 작성하여 성능 최적화

  • SQLAlchemy Core (Python) : ORM 위에 SQL 문법을 섞어 사용

업무에 맞는 활용 전략

  • 단순 CRUD : ORM 사용

  • 복잡한 통계/보고서 : SQL 직접 작성

  • 성능이 중요한 기능 : SQL 튜닝 및 인덱스 설계

백엔드 개발자는 SQL을 얼마나 잘 알아야 한다고 생각하는가?

개인적은 생각으로 백엔드 개발자는 SQL이 ORM보다 효율적일 상황을 구분해야 하고,
ORM의 단점을 알고 ORM 보다 효율적인 쿼리를 짤 수 있을 정도까지 알아야 한다고 생각한다.

출처

자바 ORM 표준 JPA 프로그래밍 1 - SQL 중심적인 개발의 문제점
Java ORM의 탄생, SQL 중심적인 개발의 문제점
ORM(JPA)를 왜 사용할까?
포스코x코딩온 KDT-Web-8 6주차 회고2 - ORM
ORM이란? - 크림새우

profile
개발자 지망생

0개의 댓글