SQLAlchemy
SQLAlchemy(줄여서 SQLA)는 Python에서 독립적으로 사용할 수 있는 데이터베이스 ORM 라이브러리로 데이터베이스를 쉽게 다룰 수 있도록 도와준다.
즉, DB 쿼리를 SQL문으로 직접 작성하지 않아도 파이썬 코드로 실행이 가능하다.
Django ORM과 다르게 SQLA는 특정 프레임워크에 종속 되지 않아 Flask,FastAPI 등 다양한 프레임워크와 사용 가능하다.
ORM 이란?
ORM(Object Relational Mapping)은 객체(Object)와 관계형 데이터(Relational Data) 간의 맵핑을 제공하는 도구로
개발자들이 데이터베이스와 상호작용할 때 SQL 쿼리 대신 Python같은 프로그래밍 언어로 데이터를 처리할 수 있게 해주는 기술이다.
왜 ORM이 필요하게 되었을까?
데이터베이스와 소통하기 위한 SQL쿼리만 사용했을 때 불편함을 해결하기 위해 ORM이 등장하였다.
1. SQL 쿼리 특성상의 반복적인 작업을 ORM으로 자동화
데이터베이스 작업은 일반적으로 삽입(INSERT), 조회(SELECT), 수정(UPDATE), 삭제(DELETE)의 기본적인 작업이 많디.
이러한 작업을 매번 SQL로 작성하면 반복적이고 시간이 많이 소요된다. ORM은 이러한 기본 작업을 코드로 간단히 처리할 수 있게 도움을 준다.
2. 유지보수성 향상
SQL 쿼리는 데이터베이스 구조가 변경되면 수동으로 수정해야 한다. 하지만 ORM을 사용하면 데이터베이스 구조 변경을 코드상으로 관리하면 되므로 유지보수가 훨씬 용이해진다.
3. 객체지향 프로그래밍과의 일관성
프로그래밍 언어는 대부분 객체지향적이다. ORM은데이터베이스의 테이블을 객체로 맵핑해주어 직관적으로 데이터를 다룰 수 있게 한다.
SQLAlchemy 계층 구조
SQLAlchemy는 ORM, Core, Database API 구조로 나뉜다.
SQLAlchemy ORM
Core를 기반의 ORM 기능 제공.
SQLAlchemy Core
SQLALchemy의 기본 아키텍쳐로 데이터베이스에 대한 연결을 관리하고 쿼리 및 결과와 상호작용하며 SQL문을 프로그래밍 방식으로 구성하기 위한 도구를 제공한다.
SQLAlchemy Database API
SQLAlchemy가 데이터베이스에 명령을 전달할 때 사용되는 기본 드라이버이다.
SQLAlchemy 외부의 Python 표준 라이브러리 또는 서드파티 라이브러리를 활용한다.
• sqlite3 (SQLite용 Python 표준 라이브러리)
• psycopg2 (PostgreSQL용 드라이버)
• mysqlclient (MySQL용 드라이버)
그럼 ORM, Core 어떻게 적절하게 활용해야할까.
상황 | ORM | Core |
일반적인 CRUD 작업 | 객체 지향적으로 데이터를 다루기 쉬움 | 가능하지만 ORM보다 복잡 |
복잡한 SQL 작성이 필요할 때 | ORM으로 표현하기 어려움 | SQL 작성 가능 |
대규모 데이터 작업 | 느릴 수 있음 | Core의 bulk_insert, bulk_update로 최적화 가능 |
데이터베이스 특정 기능 사용 | ORM으로는 한계가 있을 수 있음 | 자유롭게 데이터베이스 기능 활용 가능 |
퍼포먼스가 중요한 경우 | 내부 변환 작업이 추가되므로 성능 저하 가능 | 더 적은 오버헤드로 직접 SQL 실행 |
'Programming👩🏻💻' 카테고리의 다른 글
[FastAPI] - SQLAlchemy, Postgresql 데이터 베이스 연동 시도 과정 (1) | 2024.12.15 |
---|---|
Rate Limiter 이해하기 (0) | 2024.11.22 |
[Swagger] drf-spectacular로 REST API 문서 자동 생성 (1) | 2024.10.11 |
React 벼락치기 (1) | 2024.09.22 |
MAVEN (0) | 2021.12.03 |