Oh-Manager (신인 배우 오디션 중계 플랫폼)

FastAPI SQLAlchemy Clean Architecture Domain-Driven Design Dependency Injector MySQL Docker

목차

  1. 프로젝트 개요
    1. 팀 구성 및 정보
  2. 기술 구현 상세
    1. 기술 스택 및 개발 환경
    2. 주요 기능
    3. 핵심 성과 및 의사결정 이력
      1. 1. APIRoute 상속 Custom TransactionRoute 개발을 통한 트랜잭션 수명 주기 일괄 통제 (커넥션 누출 차단)
      2. 2. dependency-injector 기반 DI 패턴 도입으로 외부 SDK/인프라 변동 리스크 격리

프로젝트 개요

서비스 소개기획사 소속이 없는 무소속 신인 및 지망생 배우들에게 공정하고 안전한 오디션 매칭과 중계 기회를 제공하는 매칭 플랫폼임.
핵심 목표 1배우 지망생 정보(신체조건, 프로필 이미지, 포트폴리오 등)를 통합 관리하고, 기획사와 안전하게 매칭을 조율할 수 있는 신뢰성 있는 채널을 확보하는 것을 목표로 함.
핵심 목표 2무소속 지망생들을 위해 불공정 거래나 사기/유해 오디션 유입을 사전 감지 및 필터링할 수 있는 규격화된 스크리닝 기능 제공을 목표로 함.

팀 구성 및 정보

항목내용
참여 인원총 2명 (PO/PM 1명, BE 1명)
진행 기간2024.02 ~ 2024.04 (약 2개월)
담당 역할백엔드 API 개발 및 오디션 매칭 코어 비즈니스 도메인 설계 수행
협업 도구Slack: 팀 내부 소통 및 실시간 알림 연동
Jira: Sprint 기반 일정 및 세부 태스크 관리
Notion: 기획 안, 스펙 명세, 개발 및 API 문서 통합 관리

기술 구현 상세

기술 스택 및 개발 환경

항목내용
담당 역할백엔드 API 개발 및 오디션 매칭 코어 비즈니스 도메인 설계 수행
기술 스택Python 3.x, FastAPI, SQLAlchemy, MySQL, Docker, Slack SDK
InfrastructureDocker 가상화 및 AWS 환경을 활용함
FastAPI: Docker를 도입하여 런타임 환경 일관성을 확보하고 배포 자동화를 수립함
RDS: MySQL 인스턴스를 통해 오디션 및 프로필 데이터베이스 관리 효율성을 제고함
RepositoryOh-Manager-API Repo

주요 기능

기능상세 내용
관심 분야 기반 공고 추천유저 관심사(연령대, 성별, 역할 등) 조건에 특화된 오디션 정보 필터링 및 매칭 조회 기능을 개발함
지망생 프로필 및 포트폴리오 관리배우 지망생의 신체조건 정보, 주소지 및 SNS 채널 링크, 프로필 이미지를 체계적으로 업로드 관리하는 기능을 제공함
오디션 지원 및 지원 상태 관리온라인 오디션 원스톱 접수 및 지원서 작성, 실시간 접수 현황 상태 가공 API를 구축함
이메일 인증 및 JWT 세션 관리회원가입 시 이메일 유효 코드를 검증하고, bcrypt 암호화 알고리즘과 JWT 기반 안전한 세션 인증 수명 주기를 제어함

핵심 성과 및 의사결정 이력

1. APIRoute 상속 Custom TransactionRoute 개발을 통한 트랜잭션 수명 주기 일괄 통제 (커넥션 누출 차단)

  • 배경 & 제약사항: 각 API 엔드포인트(라우터 함수)마다 DB 세션 관리(세션 시작, 커밋, 예외 시 롤백, 세션 종료) 코드가 반복적으로 들어가 코드의 가독성이 훼손되었습니다. 만약 특정 API에서 예외 처리 누수가 발생할 경우 DB 커넥션 풀이 고갈되거나 트랜잭션 오염이 생길 위험이 상존했습니다.
  • 의사결정 (Why TransactionRoute 데코레이터?):
    • FastAPI의 APIRoute 클래스를 오버라이드하여, HTTP Request의 생성 및 Response 반환 라이프사이클을 가로채는 커스텀 TransactionRoute를 구현했습니다.
    • 이를 통해 API 호출 시작 시 세션을 바인딩하고, Response가 정상 반환되면 자동으로 커밋하며, 예외가 던져질 경우 자동으로 롤백을 수행하는 전역 미들웨어성 데코레이터 단에서 일괄 통제하도록 구조화했습니다.
  • 성과: 비즈니스 로직(Usecase/Service) 레이어에서 데이터베이스 영속성 트랜잭션에 관련된 코드를 완전히 제거하여 오직 순수 비즈니스 로직에만 집중하게 하였고, 커넥션 누수를 원천 차단했습니다.

2. dependency-injector 기반 DI 패턴 도입으로 외부 SDK/인프라 변동 리스크 격리

  • 배경 & 제약사항: 오디션 매칭 도메인의 유스케이스 코드가 DB 라이브러리(SQLAlchemy)와 알림 발송용 외부 SDK(Slack SDK)에 밀결합되어 있어, 기술 스펙이 변경될 경우(예: Slack을 알림 전용 큐로 변경 등) 비즈니스 로직을 모두 뜯어고쳐야 하는 유지보수 리스크가 있었습니다.
  • 의사결정 (Why Dependency Injector?):
    • dataclasses를 사용해 핵심 비즈니스 도메인 규칙을 보호하는 독립 엔티티를 구성했습니다.
    • 파이썬 환경의 고성능 DI 컴포넌트인 dependency-injector 컨테이너를 도입하여, 런타임에 인프라 어댑터(Slack 연동 모듈, DB 리포지토리)를 동적으로 주입하게 설정했습니다.
    • 테스트 환경에서는 patch_ioc 패턴을 적용하여 DB 연결 없이 Mock 리포지토리를 자동 바인딩하여 실행할 수 있도록 검증 환경을 구축했습니다.
  • 성과: 외부 프레임워크나 외부 API 규격이 변경되어도 오디션 코어 비즈니스 코드는 단 한 줄도 손대지 않는 구조적 유연성을 확보하고, 전체 테스트 커버리지를 비약적으로 높였습니다.