Skip to main content

O2O 플랫폼, 왜 FastAPI인가

O2O(Online to Offline) 플랫폼은 온라인에서 고객과 전문가를 연결하고, 오프라인에서 실제 서비스가 이루어지는 비즈니스 모델입니다. 법률 상담, 인테리어, 과외, 청소 서비스 등 다양한 분야에서 이 모델이 확산되고 있습니다. 이러한 플랫폼의 핵심은 매칭, 예약, 실시간 커뮤니케이션 세 가지 기능입니다.

저희 팀은 실제 법률 O2O 플랫폼을 개발하면서 FastAPI를 선택했습니다. 비동기 처리 성능이 뛰어나고, 타입 힌트 기반의 자동 문서화가 가능하며, WebSocket 지원이 기본 내장되어 있기 때문입니다. 이 글에서는 실제 개발 경험을 바탕으로 핵심 기능 구현 방법을 공유합니다.

전문가-고객 매칭 시스템 설계

매칭 알고리즘의 핵심 요소

효과적인 매칭 시스템은 단순한 카테고리 필터링을 넘어섭니다. 법률 플랫폼의 경우, 다음 요소들을 종합적으로 고려해야 합니다.

  • 전문 분야 일치도: 고객의 요청 내용과 전문가의 전문 분야 매칭
  • 지역 기반 필터링: 대면 상담이 필요한 경우 거리 계산 적용
  • 가용성 확인: 전문가의 실시간 예약 가능 시간 조회
  • 평점 및 리뷰: 기존 고객 만족도 반영
  • 응답률: 전문가의 평균 응답 시간 및 수락률

가중치 기반 점수 산정

FastAPI의 Pydantic 모델을 활용하면 매칭 요청과 응답 구조를 명확하게 정의할 수 있습니다. 각 요소에 가중치를 부여하고 종합 점수를 산정하여 최적의 전문가 리스트를 반환합니다. 전문 분야 일치도에 40%, 평점에 25%, 거리에 20%, 응답률에 15% 정도의 가중치를 적용하는 것이 실제 서비스에서 효과적이었습니다.

예약 시스템 구현 전략

동시성 문제 해결

예약 시스템에서 가장 까다로운 부분은 동시 예약 충돌 처리입니다. 두 명의 고객이 동시에 같은 시간대를 예약하려 할 때, 데이터 정합성을 보장해야 합니다. 이를 위해 데이터베이스 레벨의 락(Lock) 또는 Redis를 활용한 분산 락을 적용합니다.

예약 상태 관리

예약은 여러 상태를 거치며 진행됩니다. 명확한 상태 머신을 설계하는 것이 중요합니다.

  • PENDING: 고객이 예약 요청을 보낸 상태
  • CONFIRMED: 전문가가 예약을 수락한 상태
  • CANCELLED: 어느 한쪽이 취소한 상태
  • COMPLETED: 서비스가 완료된 상태
  • NO_SHOW: 예약 불이행 상태

각 상태 전이 시 관련 당사자에게 알림을 발송하고, 필요한 경우 결제 처리나 환불 로직을 연동합니다. FastAPI의 백그라운드 태스크 기능을 활용하면 알림 발송을 비동기로 처리하여 API 응답 속도를 유지할 수 있습니다.

실시간 채팅 기능 구현

WebSocket 기반 아키텍처

FastAPI는 WebSocket을 기본 지원하므로 실시간 채팅 구현이 수월합니다. 고객과 전문가 간의 1:1 채팅방을 생성하고, 메시지를 실시간으로 주고받을 수 있습니다. 연결 관리를 위한 ConnectionManager 클래스를 구현하여 활성 연결을 추적하고, 특정 채팅방에 메시지를 브로드캐스트합니다.

메시지 영속성과 읽음 처리

채팅 메시지는 데이터베이스에 저장하여 사용자가 재접속했을 때 이전 대화 내역을 불러올 수 있어야 합니다. 또한 읽음 표시 기능을 구현하여 상대방이 메시지를 확인했는지 알 수 있게 합니다. 이 기능은 서비스 신뢰도를 높이는 데 중요한 역할을 합니다.

확장성을 위한 고려사항

사용자가 증가하면 단일 서버로는 WebSocket 연결을 감당하기 어렵습니다. Redis Pub/Sub을 도입하여 여러 서버 인스턴스 간 메시지를 동기화하는 구조로 확장할 수 있습니다. 초기 설계 단계에서 이러한 확장 가능성을 고려해두면 나중에 대규모 리팩토링 없이 스케일아웃이 가능합니다.

실제 운영에서 얻은 교훈

법률 O2O 플랫폼을 운영하면서 몇 가지 중요한 교훈을 얻었습니다.

  • 알림 시스템의 중요성: 예약 리마인더, 메시지 알림 등이 없으면 노쇼율이 급격히 증가합니다.
  • 관리자 대시보드: 매칭률, 예약 전환율, 평균 응답 시간 등 핵심 지표를 실시간으로 모니터링할 수 있어야 합니다.
  • 에러 핸들링: WebSocket 연결 끊김, 결제 실패 등 예외 상황에 대한 견고한 처리가 필수입니다.
  • 테스트 자동화: 매칭 알고리즘 변경 시 기존 로직이 깨지지 않는지 검증하는 테스트 코드가 반드시 필요합니다.

문의하기

더 자세한 상담이 필요하시면 코드벤터로 문의해주세요.

코드픽 - 외주 전문 AI 바이브 코딩 글로벌 진출

댓글 남기기