데이터 베이스란?
정보의 집합
DBMS
구조화된 데이터를 효율적으로 저장, 검색, 수정 관리하는 시스템
- 안전하고 빠름
- 관리를 위한 기능이 이미 많이 구현되어 있음.
종류
- RDBMS - 관계형 데이터 베이스 관리 시스템
- 테이블 형태로 데이터 저장
- 데이터 무결성을 유지하는 데 탁월함
- 데이터가 일반적으로 정형 데이터이기 때문에 일관성, 격리, 지속성, 트랜지션이 있어서 강점을 보이고 쿼리를 좀 복잡하게 넣을 수 있음.
- NoSQL
- 다양한 데이터 구조 - 문서, 키값, 그래프 등
- 분산 데이터 처리에 적합
- 데이터 구조가 유연하고 읽기, 쓰기 속도가 좀 빠름
- 스케일 아웃이 용이함
- 머신러닝에 많이 있음
ORM이란?
Object-Relational Mapping의 줄임말로 객체지향 언어와 관계형 데이터베이스의 연결 고리이다.
- 테이블을 파이썬 클래스처럼 다룰 수 있음
- 간단히 말하면 데이터베이스 테이블을 객체로 변환하는 매핑 기능을 제공함
- 라이브러리
- SQLAlchemy
- 파이에서 가장 인기 있는 ORM 중 하나
- 강력하고 유연함
- 데이터베이스와의 상호작용을 추상화하여 쿼리 없이 데이터 작업을 수행할 수 있게 해줌
- Django ORM
FastAPI ORM은 없나?
- 없음 왜? 파이썬에서 제공되는 ORM을 편한게 사용 가능하기 때문
- 오히려 확장성이 좋다는 장점을 가짐
→ 서비스에 따라 최적화된 DB를 사용하고, 여러 개의 DB를 사용하는 것이 일반적임
SQLAlchemy Core
SQL 표현 언어를 사용하여 데이터베이스와 직접 상호작용 하는 기능을 제공
- 쿼리 작성, 결과 처리, 스키마 정의 등을 낮은 레벨에서 가능함
- SQL 쿼리를 직접 작성하고 실행하여 세밀한 제어가 가능
- 쿼리 결과를 파이썬 객체를 활용하여 쉽게 조작 가능
- 저수준 API라 상세한 제어가 가능함
SQLAlchemy Core 구성요소
- 엔진
- 데이터베이스와 의 연결 관리, 모든 상호작용
- 연결과 SQL 실행
- 내부적으론 커넥션 풀 사용
- 연결 설정 정보를 포함하고 데이터베이스 특화된 상호작용
- 터넥션 풀
- 데이터베이스 연결을 재사용 가능하게 하는 관리 시스템
- 여러 개의 데이터베이스와 연결 관리
- SQL 표현 언어
- 스키마 정의
- Python 코드를 통해 데이터베이스를 정의, 데이터베이스 테이블의 구조를 Python 클래스로 표현
- 데이터 타입, 제약 조건(예: primary key, foreign key) 등을 명시적으로 지정할 수 있음
- 결과 처리기
- 결과 처리기는 SQL 쿼리의 결과를 Python에서 사용 가능한 형태로 변
SQLAlchemy Core를 쓰는 이유
- 직접적인 쿼리 작성이 가능함 → 다양한 데이터 요청에 대한 처리가 가능
- 플랫폼에 독립적인 확장성 → 다양한 데이터베이스 시스템에 대해 코드가 일관됨
- 성능 최적화 → 단순 데이터만 읽어오는게 아닌 세밀한 데이터베이스 제어가 가능해 유연한 대처가 가능
- 데이터베이스 고급 기능 → 서브쿼리 등의 기능 사용 가능
ORM과 Core의 차이?
ORM
- 데이터베이스 테이블을 클래스로 매핑
- 이 클래스 인스턴스 를 사용하여 데이터베이스 작업을 수행할 수 있다.
- 객체지향과 잘 어울림
- SQL 쿼리 없이 Python 코드로 데이터베이스와 상호 작용이 가능
- 복잡한 쿼리에는 적합하지 않음
Core
- 저수준으로 추상화 되어있음
- 직접적인 SQL 쿼리작성과 함께 데이터베이스와의 상호작용이 더 세밀하게 가능함
- 복잡한 데이터베이스 작업과 쿼리에 적합함
ORM (Object-Relational Mapping) 장점
생산성 향상
- ORM을 사용하면 복잡한 SQL 쿼리 대신 직관적인 객체 지향 코드로 데이터베이스 작업을 수행할 수 있어 개발 시간을 단축시킴
코드의 가독성 및 유지 관리
- 데이터베이스 작업을 위한 코드가 더 간결하고 이해하기 쉬워짐
데이터베이스 독립성
- ORM은 특정 데이터베이스 시스템에 종속되지 않는 코드를 작성하게 해줌
- 이를 통해 다른 데이터베이스 시스템으로의 이전이 용이해짐
보안 강화
- SQL 인젝션과 같은 보안 위험을 줄이는 데 도움을 줌
- 데이터는 객체를 통해 처리되기 떄문에, 원시 SQL 쿼리를 작성하는 것보다 안전함.
ORM 단점
- 복잡한 쿼리는 제한적으로 처리됨
- 일부 ORM의 경우 비효율적인 SQL쿼리를 생성함
- 데이터베이스 + ORM + 객체지향 다 공부해야 함