개발/Backend

SQL ORM 장단점 리서치

아르카눔 2025. 5. 30. 15:43

 

ORM이 SQL injection 말고 어떤 장단점이 있는지 찾아서 간략하게 정리해보았다. 

 

 

ORM 장점:

 

  • 추상화를 통한 개발 효율성 향상
  • 더 쉬운 유지 관리 
  • 서로 다른 여러가지 DB에 적용 가능 
  • SQL injection 방지 가능

 

ORM 단점:

 

  • 성능문제 - 추상화로 인한 오버헤드와 N+1 문제
  • 복잡한 쿼리 적용의 어려움과 쿼리 최적화의 어려움
  • DB에 대한 세밀한 제어 상실

 

 

 

SQL Injection (인젝션)

웹 애플리케이션 보안 취약점 중 하나로, 공격자가 악의적인 SQL 코드를 사용자 입력 필드에 삽입하여 데이터베이스를 조작하는 행위다.

 

즉 쿼리문을 임의로 변경해서 데이터를 탈취하려는 행위다.

 

이를 방지하는 방법으로는 Prepared Statement와 ORM 적용이 있다.

 

 

1. ORM

 

ORM은 객체지향적인 방식이라 애초에 SQL 코드를 중간에 넣을 수가 없다.

 

 

2. Prepared Statement

 

사전에 쿼리를 준비한 다음에 특정한 값만을 받아오는 방법이다.

 

여기다가 추가로 input validation 입력 유효값 검사를 통해서 다른 값이 나오면 오류를 반환하는 방법도 있다.

 

예를 들어서 username이 str이라고 할 때, 입력으로 int나 float가 들어오면 에러를 리턴한다.

(username에 "abc123" 등이 허용되지 않는다고 할 때 )

from sqlalchemy import text
# ...
username = request.form['username']
# 안전한 방식
stmt = text("SELECT * FROM users WHERE username = :username")
result = session.execute(stmt, {'username': username})

# ORM의 객체 모델을 사용하면 더욱 안전합니다.
# user = session.query(User).filter_by(username=username).first()

 

 

 

 

References:

https://okky.kr/questions/490004

https://f-lab.kr/insight/orm-database-management-20240522

https://rastalion.dev/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%93%A4%EC%9D%B4-orm%EC%9D%84-%EC%93%B0%EB%8A%94-%EC%9D%B4%EC%9C%A0%EC%99%80-dba%EA%B0%80-orm%EC%9D%84-%EC%8B%AB%EC%96%B4%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0/