SpeakUp (AI 모의 면접 플랫폼)

Backend

Python과 FastAPI를 사용하여 확장 가능하고 안전한 RESTful API 서버를 구축했습니다.

FastAPIPythonPostgreSQLSQLAlchemyAlembicPydanticPasslib (bcrypt)

핵심 기여 사항

  • 데이터베이스 모델링 및 마이그레이션: SQLAlchemy를 사용하여 사용자, 이력서, 직무 카테고리 등 핵심 데이터를 정규화하고, 1:N 및 N:M 관계를 명확히 정의했습니다. Alembic을 통해 데이터베이스 스키마 버전을 안전하게 관리합니다.
  • 보안 중심의 인증 시스템 구축: Access Token과 HttpOnly Refresh Token 패턴을 도입하여 XSS 공격으로부터 Refresh Token을 보호하고, CSRF 공격은 SameSite 쿠키 속성으로 방어하는 등 웹 보안 표준을 준수했습니다.
  • 계층화된 아키텍처 설계: API 엔드포인트, 비즈니스 로직(CRUD), 데이터 모델을 명확히 분리했습니다. 제네릭 CRUDBase 클래스를 구현하여 반복적인 데이터베이스 작업을 추상화하고 코드의 일관성을 유지했습니다.
  • 타입-세이프 API 설계: Pydantic을 사용하여 API 요청/응답 스키마를 엄격하게 정의하고, 데이터 유효성 검사를 자동화하여 백엔드와 프론트엔드 간의 안정적인 데이터 계약을 보장했습니다.

도전 과제: 안전하고 확장 가능한 백엔드 시스템 구축

백엔드의 핵심 과제는 사용자의 민감한 면접 이력 데이터를 안전하게 관리하고, 향후 기능 확장에 유연하게 대응할 수 있는 안정적인 서버를 구축하는 것이었습니다. 이를 위해, 체계적인 데이터베이스 모델링, 보안이 강화된 인증 시스템, 그리고 유지보수성이 높은 계층화된 아키텍처를 설계하는 것이 필수적이었습니다.

해결 전략: 계층화된 아키텍처와 보안 중심의 인증 시스템 설계

`FastAPI`를 기반으로 API 엔드포인트, 비즈니스 로직(Service), 데이터 접근(Repository) 계층을 명확히 분리하여 코드의 결합도를 낮추고 테스트 용이성을 높였습니다. `SQLAlchemy`와 `Alembic`을 사용하여 데이터베이스 스키마를 체계적으로 관리했으며, `HttpOnly` Refresh Token 패턴을 도입하여 웹 보안 표준을 준수하는 인증 시스템을 구축했습니다.

다이어그램을 불러오는 중...

[그림 1] FastAPI 기반 계층화 아키텍처

모든 API 요청은 Pydantic 스키마를 통해 유효성이 검증되며, 비즈니스 로직은 서비스 계층에 집중되어 있습니다. 데이터베이스 작업은 제네릭 `CRUDBase` 클래스로 추상화하여 반복적인 코드를 최소화하고 일관성을 유지했습니다.

# 예시: Pydantic과 의존성 주입을 활용한 API 엔드포인트
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from . import schemas, services
router = APIRouter()
# Pydantic 스키마를 사용하여 요청 본문과 응답 데이터의 타입을 정의
@router.post("/users/", response_model=schemas.User)
def create_user(
user: schemas.UserCreate,
db: Session = Depends(services.get_db)
):
# 비즈니스 로직은 서비스 계층에 위임
return services.create_user(db=db, user=user)

결과 및 성과

계층화된 아키텍처 설계를 통해 코드의 유지보수성과 테스트 커버리지를 크게 향상시켰습니다. 또한, 보안 표준을 준수하는 인증 시스템을 구축하여 사용자의 데이터를 안전하게 보호하는 신뢰성 있는 서비스를 만들었습니다. 이 경험을 통해 단순한 API 개발을 넘어, 확장성과 보안을 모두 고려하는 백엔드 시스템을 설계하는 실전 역량을 확보했습니다.