-
Day 15: 데이터베이스 설정 및 통합 – SQLite와 FastAPI21일오블완챌린지_vue.js와fastapi로 만드는 웹 주문 시스템 2024. 11. 21. 09:52
이번 주는 데이터 통합이 주제입니다. 오늘은 SQLite를 사용하여 FastAPI 서버에 영구적인 데이터 저장소를 설정합니다. 이를 통해 서버를 재시작해도 주문 데이터가 유지되도록 구현합니다.
1. SQLite와 SQLAlchemy 설치
FastAPI와 함께 데이터베이스를 사용할 때, SQLAlchemy는 데이터베이스 작업을 관리하기 위한 훌륭한 도구입니다.
설치 명령어
bash코드 복사pip install sqlalchemy sqlite3
2. 데이터베이스 설정
FastAPI에서 SQLAlchemy를 설정하고 SQLite 데이터베이스를 연결합니다.
디렉토리 구조 설정
server 폴더 안에 database.py 파일을 생성합니다.
css코드 복사server/ ├── main.py ├── database.py
database.py 작성
SQLite 데이터베이스를 연결하고, 주문 데이터를 저장하기 위한 테이블을 설정합니다.
from sqlalchemy import create_engine, Column, Integer, String, Text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # SQLite 데이터베이스 URL DATABASE_URL = "sqlite:///./orders.db" # 데이터베이스 엔진 생성 engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) # 데이터베이스 세션 생성 SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # 베이스 클래스 생성 Base = declarative_base() # 주문 모델 정의 class Order(Base): __tablename__ = "orders" id = Column(Integer, primary_key=True, index=True) name = Column(String, nullable=False) item = Column(String, nullable=False) quantity = Column(Integer, nullable=False) notes = Column(Text, nullable=True) status = Column(String, default="대기 중")
데이터베이스 테이블 생성
데이터베이스 테이블을 생성하기 위해 main.py에 다음 코드를 추가합니다.
from database import Base, engine # 데이터베이스 테이블 생성 Base.metadata.create_all(bind=engine)
3. FastAPI에서 데이터베이스 통합
FastAPI 엔드포인트에서 SQLAlchemy를 사용해 데이터를 데이터베이스에 저장하고 조회하도록 변경합니다.
main.py 수정
SessionLocal을 사용해 데이터베이스 세션을 관리하고 주문 데이터를 저장합니다.
from fastapi import FastAPI, Depends, HTTPException from sqlalchemy.orm import Session from database import SessionLocal, Order app = FastAPI() # 데이터베이스 세션 종속성 설정 def get_db(): db = SessionLocal() try: yield db finally: db.close() @app.post("/order") def create_order(order: Order, db: Session = Depends(get_db)): db_order = Order( name=order.name, item=order.item, quantity=order.quantity, notes=order.notes, ) db.add(db_order) db.commit() db.refresh(db_order) return {"message": "Order created successfully", "order": db_order} @app.get("/orders") def get_orders(db: Session = Depends(get_db)): orders = db.query(Order).all() return {"orders": orders}
4. 테스트
FastAPI 서버 실행
bash코드 복사uvicorn main:app --reload테스트 시나리오
- /order 엔드포인트로 POST 요청을 보내 데이터를 저장.
- /orders 엔드포인트로 GET 요청을 보내 저장된 데이터를 확인.
- 서버를 재시작한 후에도 데이터가 유지되는지 확인.
5. 클라이언트와 데이터베이스 연동 확인
Vue 클라이언트에서 주문을 생성하고, 서버에서 주문 데이터를 저장하고 조회하는 흐름이 정상적으로 작동하는지 확인합니다.
오늘의 마무리
오늘은 FastAPI와 SQLite를 통합하여 주문 데이터를 영구적으로 저장하는 기능을 구현했습니다. 데이터베이스 설정을 통해 앱이 실질적인 사용자 데이터를 처리할 수 있는 기반이 마련되었습니다.
내일은 주문 상태를 데이터베이스에서 업데이트하고, 이를 클라이언트에서 확인하는 작업을 진행하겠습니다. 🚀
'21일오블완챌린지_vue.js와fastapi로 만드는 웹 주문 시스템' 카테고리의 다른 글
Day 17: 주문 기록 조회 기능 구현 – 클라이언트에서 과거 주문 데이터 확인하기 (0) 2024.11.23 Day 16: 주문 상태를 데이터베이스에서 업데이트하기 (0) 2024.11.22 Day 14: 새로운 기능들에 대한 리뷰와 문제 해결 (0) 2024.11.20 Day 13: CSS 또는 CSS 프레임워크를 사용한 기본 스타일링 (1) 2024.11.19 Day 12: 기본 오류 처리와 유효성 검사 추가 (0) 2024.11.18