ORM 정의
ORM 이란 ?
→ Object Relational Mapping 의 약자로, 데이터베이스와 Python 객체의 상호작용을 쉽게 할 수 있도록 해주는 것
ORM 기능
→ SQL 쿼리를 작성하지 않고, 데이터베이스 작업 수행 가능
ORM 예시
django 모델 생성
from django.db import models
class orm_test(models.Model):
title = models.CharField(max_length=100)
body = models.CharField(max_length=200)
migration 하게 되면 아래의 구조를 가진 테이블이 생성 됨
CREATE TABLE orm_test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(100) NOT NULL,
body VARCHAR(200) NOT NULL
);
ORM 장, 단점
장점
- 생상성 향상
- DB 와 상호 작용하는 코드를 자동으로 만들어, 개발 속도가 증가 된다.
- SQL 쿼리를 직접 작성하지 않아도 된다.
- 간편한 유지보수
- 코드가 간결하고 가독성이 높아짐에 따라 유지 보수가 쉽다.
- 데이터베이스 스키마를 변경하는 경우, migration 명령어를 사용하여 간편하게 적용 가능하다.
- 데이터베이스 독립성
- django ORM 은 다양한 데이터베이스의 백엔드를 지원하므로, 코드의 변경 없이 다른 데이터베이스로 쉽게 전환 가능 하다.
- MySQL, PostgreSQL, SQLite, Oracle 등
- 보안
- SQL 인젝션 공격에 대한 방어가 내장되어 있으므로 보안성이 높다.
- ORM이 자동으로 쿼리를 안전하게 처리하므로 오류의 발생 가능성을 줄일 수 있다.
- 통합된 보안관리
- 데이터베이스 스키마와 검증 로직을 한번에 관리할 수 있다.
- 자동으로 생성되는 admin 페이지를 통해 데이터를 쉽게 관리할 수 있다
단점
- 성능 문제
- 추상화 레이어가 추가됨에 따라, 복잡한 쿼리와 대량의 데이터를 처리하기 부적합하다.
- 직접 작성하는 쿼리에 비해, 상대적으로 덜 최적화될 수 있다.
- 제한된 기능
- 모든 SQL 기능을 지원하지 않으며, 특정 기능을 사용할 때 제약이 발생할 수 있다.
- 학습 곡선
- ORM 자체를 이해하고, 사용하는데 시간이 다소 소요된다.
- 복잡한 쿼리와 특정 기능을 사용할 때, ORM 동작 방식을 이해하고 있어야 한다.
- 디버깅 문제
- ORM 이 자동으로 생성한 쿼리로, 디버깅이 어려울 수 있다.
- 추상화의 단점
- 추상화로 인해, 코드는 간단해지지만 데이터베이스의 내부 동작을 이해하는데는 도움이 되지 않는다.