[Python] FastAPI + SQLite/PostgreSQL로 웹 기반 IQ 테스트 사이트 개발하기

FastAPI + SQLite/PostgreSQL로 웹 기반 IQ 테스트 사이트 개발하기

1. 개요

웹 기반 IQ 테스트 사이트를 개발하려면 백엔드와 데이터베이스 선택이 중요합니다. 초기 비용 없이 개발하려면 Firebase가 좋은 선택이지만, 확장성과 제약을 고려하면 FastAPI + SQLite/PostgreSQL 조합이 더 유연한 대안이 될 수 있습니다. 이 글에서는 FastAPI와 SQLite를 사용하여 IQ 테스트 사이트를 구축하는 방법을 설명하고, 나중에 PostgreSQL로 확장하는 방법도 다뤄보겠습니다.


2. 기술 스택 선택

IQ 테스트 사이트의 백엔드로 FastAPI + SQLite/PostgreSQL을 선택한 이유는 다음과 같습니다:

  • FastAPI: 비동기 지원, 빠른 속도, 자동 문서화 (Swagger UI)
  • SQLite: 로컬 개발에 적합한 가벼운 데이터베이스
  • PostgreSQL: 확장성이 뛰어난 관계형 데이터베이스 (배포 시 활용)

비교: Firebase vs FastAPI + SQLite/PostgreSQL

항목 Firebase FastAPI + SQLite/PostgreSQL
초기 비용 무료 (제한 있음) 무료 (로컬 개발)
백엔드 로직 서버리스 (Cloud Functions) 직접 구현 가능
데이터베이스 Firestore (NoSQL) SQLite (SQL, 가벼움)
확장성 Google Cloud로 확장 PostgreSQL로 확장

3. FastAPI 프로젝트 설정

먼저 FastAPI 환경을 설정합니다.

1️⃣ FastAPI 설치

pip install fastapi uvicorn sqlalchemy sqlite3

2️⃣ 프로젝트 구조

fastapi-iq-test/
├── main.py  # FastAPI 앱 진입점
├── models.py  # 데이터베이스 모델 정의
├── database.py  # SQLite/PostgreSQL 연결
├── routes/
│   ├── iq_questions.py  # IQ 테스트 관련 API
│   ├── users.py  # 사용자 인증 API
└── requirements.txt  # 필요한 패키지 목록

4. 데이터베이스 설정 (SQLite → PostgreSQL 확장 가능)

FastAPI에서 SQLAlchemy를 사용해 SQLite 데이터베이스를 설정합니다.

1️⃣ SQLite 연결 설정 (database.py)

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker

DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

2️⃣ IQ 문제 모델 정의 (models.py)

class IQQuestion(Base):
    __tablename__ = "iq_questions"
    
    id = Column(Integer, primary_key=True, index=True)
    question = Column(String, nullable=False)
    answer = Column(String, nullable=False)

3️⃣ 데이터베이스 테이블 생성

from database import engine, Base
Base.metadata.create_all(bind=engine)

SQLite로 먼저 개발한 후, 배포할 때 PostgreSQL로 변경하려면 DATABASE_URL을 다음과 같이 수정하면 됩니다:

DATABASE_URL = "postgresql://user:password@localhost/dbname"

5. FastAPI API 엔드포인트 개발

IQ 문제를 추가하고 조회하는 API를 생성합니다.

1️⃣ IQ 문제 추가 API (routes/iq_questions.py)

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from database import SessionLocal
from models import IQQuestion

router = APIRouter()

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@router.post("/questions/")
def create_question(question: str, answer: str, db: Session = Depends(get_db)):
    new_question = IQQuestion(question=question, answer=answer)
    db.add(new_question)
    db.commit()
    return {"message": "IQ 문제 추가 완료"}

2️⃣ IQ 문제 조회 API

@router.get("/questions/")
def get_questions(db: Session = Depends(get_db)):
    return db.query(IQQuestion).all()

6. IQ 테스트 문제 아이디어 얻는 방법

IQ 테스트 문제를 만들 때 참고할 만한 자료와 영문 도서를 추천합니다.

온라인 리소스

논문 및 연구 자료

기존 IQ 테스트 참고

  • 웩슬러 성인지능검사(WAIS)
  • 스탠포드-비네 지능검사
  • 캐틀 문화공평 지능검사

7. 추천 영문 도서

📚 IQ 테스트 및 문제 개발 관련 도서

  1. "The Ultimate IQ Test Book" - Philip Carter, Ken Russell
  2. "Test Your IQ" - Philip Carter
  3. "IQ and Psychometric Tests: Assess Your Personality, Aptitude and Intelligence" - Philip Carter

📚 인지과학 및 두뇌 훈련 관련 도서 4. "Thinking, Fast and Slow" - Daniel Kahneman 5. "The Intelligence Trap: Why Smart People Make Dumb Mistakes" - David Robson 6. "The Psychology of Intelligence" - Jean Piaget


8. 결론

Firebase 대신 FastAPI + SQLite/PostgreSQL을 사용하면 백엔드를 직접 관리하면서 더 확장성 있는 IQ 테스트 사이트를 개발할 수 있습니다. SQLite로 빠르게 시작하고, 나중에 PostgreSQL로 확장하면 비용을 절감하면서도 탄탄한 시스템을 구축할 수 있습니다! 🚀

또한, IQ 테스트 문제를 만들 때는 멘사 테스트, 연구 자료, 기존 IQ 테스트 형식을 참고하면 더욱 신뢰할 수 있는 콘텐츠를 개발할 수 있습니다. 🎯

댓글

이 블로그의 인기 게시물

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

[PLC] PLC 아날로그 입출력 기본

[농사] 실내 식물 재배 조명, 어떤 걸 선택해야 할까?

제너 다이오드에 저항을 연결하는 이유

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)

공압 속도 제어: 미터인 vs 미터아웃

[스마트팜] 아쿠아포닉스에서 pH 제어를 자동화해보자! (Python 활용)

커패시터에 저장된 에너지 계산

[아두이노] 74HC595 시프트 레지스터 연동

[PLC] 릴레이와 전자 접촉기 (MC)