FastAPI 데이터베이스와 ORM

예찬예찬·2024년 6월 27일

FastAPI

목록 보기
8/10
post-thumbnail

데이터 베이스란?

정보의 집합

DBMS

구조화된 데이터를 효율적으로 저장, 검색, 수정 관리하는 시스템

  • 안전하고 빠름
  • 관리를 위한 기능이 이미 많이 구현되어 있음.

종류

  • RDBMS - 관계형 데이터 베이스 관리 시스템
    • 테이블 형태로 데이터 저장
    • 데이터 무결성을 유지하는 데 탁월함
    • 데이터가 일반적으로 정형 데이터이기 때문에 일관성, 격리, 지속성, 트랜지션이 있어서 강점을 보이고 쿼리를 좀 복잡하게 넣을 수 있음.
  • NoSQL
    • 다양한 데이터 구조 - 문서, 키값, 그래프 등
    • 분산 데이터 처리에 적합
    • 데이터 구조가 유연하고 읽기, 쓰기 속도가 좀 빠름
    • 스케일 아웃이 용이함
    • 머신러닝에 많이 있음

ORM이란?

Object-Relational Mapping의 줄임말로 객체지향 언어와 관계형 데이터베이스의 연결 고리이다.

  • 테이블을 파이썬 클래스처럼 다룰 수 있음
  • 간단히 말하면 데이터베이스 테이블을 객체로 변환하는 매핑 기능을 제공함
  • 라이브러리
    • SQLAlchemy
      • 파이에서 가장 인기 있는 ORM 중 하나
      • 강력하고 유연함
      • 데이터베이스와의 상호작용을 추상화하여 쿼리 없이 데이터 작업을 수행할 수 있게 해줌
    • Django ORM
      • Django 에서 사용되는 ORM

FastAPI ORM은 없나?

  • 없음 왜? 파이썬에서 제공되는 ORM을 편한게 사용 가능하기 때문
  • 오히려 확장성이 좋다는 장점을 가짐

→ 서비스에 따라 최적화된 DB를 사용하고, 여러 개의 DB를 사용하는 것이 일반적임

SQLAlchemy Core

SQL 표현 언어를 사용하여 데이터베이스와 직접 상호작용 하는 기능을 제공

  • 쿼리 작성, 결과 처리, 스키마 정의 등을 낮은 레벨에서 가능함
    • SQL 쿼리를 직접 작성하고 실행하여 세밀한 제어가 가능
    • 쿼리 결과를 파이썬 객체를 활용하여 쉽게 조작 가능
  • 저수준 API라 상세한 제어가 가능함

SQLAlchemy Core 구성요소

  • 엔진
    • 데이터베이스와 의 연결 관리, 모든 상호작용
    • 연결과 SQL 실행
    • 내부적으론 커넥션 풀 사용
    • 연결 설정 정보를 포함하고 데이터베이스 특화된 상호작용
  • 터넥션 풀
    • 데이터베이스 연결을 재사용 가능하게 하는 관리 시스템
    • 여러 개의 데이터베이스와 연결 관리
  • 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 + 객체지향 다 공부해야 함
profile
나는 오예찬

0개의 댓글