본문 바로가기
Web 개발/FAST API (인프런 강의 내용)

2 데이터베이스

by yororing 2024. 4. 24.

00 개요

  • 앞서 ToDo 프로젝트에서 ToDo를 새로 생성하거나 ToDo의 완료 여부 수정 시 데이터를 영구적으로 저장하기 위해 데이터베이스가 필요

01 데이터베이스란

1. 정의

  • 대량의 데이터를 영구적으로 저장/관리하기 위한 시스템

2. 분류

1) 관계형 데이터베이스 (Relational Database, RDB)

  • 관계형 모델에 기반해서 데이터를 테이블, 행, 열 구조 (스키마 구조)로 관리 (Schemaful)
  • Microsoft Excel을 떠올리면 됨
  • 데이터의 일반성 유지가 용이하여 법명적으로 많이 이용됨
  • 예) Oracle, MySQL, PostgreSQL, Sqlite, etc.
  • 실습에서는 MySQL 사용할 것

2) 비관계형 데이터베이스 (NoSQL)

  • 관계형 데이터베이스가 아닌 데이터베이스
  • 종류가 다양하며 각각의 용도 및 장단점이 명확함
  • 특정 목적에 맞게 관계형 데이터베이스와 조합하여 사용됨
  • 예)
    • Key-Value → Redic, etcd
    • Document →  MongoDB
    • Wide-column →  Cassandra, ScyllaDB
    • Timeseries →  Apache Druid, InfluxDB
    • Graph Neo4j

02 sqlalchemy 소개

  • FastAPI에서 데이터베이스를 사용하기 위해선 sqlalchemy라는 Python 라이브러리 필요

1. 정의

  • 관계형 데이터베이스를 사용하기 위한 High-level 인터페이스를 제공하는 Python 라이브러리
  • sqlalchemy 사용 시 ORM, Query, Transaction, Connection Pooling 기능 활용 가능

2. ORM (Object-Relational Mapping)

  • 관계형 데이터베이스를 객체 지향 프로그래밍 (OOP)에 대응하여 사용하는 프로그래밍 기술
  • ORM 사용 시 다음과 같이 사용 가능
    • 하나의 테이블 = 하나의 클래스
    • 하나의 행(레코드) = 하나의 객체
데이터베이스 Python
id | username
1  | qu3vipon
user = User(id=1, username='qu3vipon')
  • 따라서, Python 객체를 조작하여 데이터를 읽거나 쓰는 작업을 손쉽게 대체 가능
  • 즉, 개발자는 Python 코드를 통해서 직접 SQL을 적지 않아도 sqlalchemy에 의해 SQL이 생성되고 데이터베이스와 데이터를 주고 받게 됨