[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 테스트 문제를 만들 때 참고할 만한 자료와 영문 도서를 추천합니다.
✅ 온라인 리소스
- Mensa - 세계적인 멘사의 공식 웹사이트에서 샘플 테스트 제공
- Raven’s Progressive Matrices - 패턴 인식 기반 문제
- 123test - 다양한 무료 IQ 테스트 제공
- Open Psychometrics - 심리 및 인지 테스트 데이터베이스
✅ 논문 및 연구 자료
- Cambridge Brain Sciences - 인지 테스트 기반 연구
- Psychometrics Centre (University of Cambridge) - IQ 및 심리 측정 연구
✅ 기존 IQ 테스트 참고
- 웩슬러 성인지능검사(WAIS)
- 스탠포드-비네 지능검사
- 캐틀 문화공평 지능검사
7. 추천 영문 도서
📚 IQ 테스트 및 문제 개발 관련 도서
- "The Ultimate IQ Test Book" - Philip Carter, Ken Russell
- "Test Your IQ" - Philip Carter
- "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 테스트 형식을 참고하면 더욱 신뢰할 수 있는 콘텐츠를 개발할 수 있습니다. 🎯
댓글
댓글 쓰기