AI 음성 인식

[OpenNote]시스템 설계 및 서버 구조

yc7764 2025. 2. 24. 14:00

OpenNote: https://opennote.duckdns.org/

(비용 문제로 GPU 서버를 구축하지 못해 화자 분할 및 STT 처리에 다소 시간이 걸림)

OpenNote 시스템 구성도

1. 기술 스택

  • Django
    • 오픈 소스 기반 웹 프레임워크
    • 반응형 웹 UI를 위해 bootstrap 사용을 고려했으나 직접 UI 디자인 및 개발 진행
    • 계정 로그인 시 개인 정보 문제와 편의성을 위해 소셜 계정 로그인 기능 추가(네이버, 카카오톡, github, google)
    • Django ORM 활용 시 내장 DB인 SQLite가 아닌 PostgreSQL 사용
  • RabbitMQ
    • AMQP를 구현한 오픈 소스 기반 메시지 브로커 소프트웨어
    • 사용자가 웹서버를 통해 데이터를 업로드 시, AI를 활용한 처리를 위해 활용
    • GPU 서버 부족으로 사용량에 따라 consumer를 추가할 수 있도록하여 추후 AI 서버 추가 가능
    • durable을 True로 설정하여 queue의 데이터를 디스크에 저장하여 안정성 및 지속성 향상
  • PostgreSQL
    • 객체-관계형 데이터베이스 관리 시스템
    • 안정성 및 효율을 위해서 Django의 내장 DB가 아닌 PostgreSQL을 사용
  • AI
    • Whisper
      • OpenAI에서 개발한 STT(Speech To Text) 모델
      • 성능과 처리속도를 고려하여 가장 최근에 배포된 "large-v3-turbo"모델 활용
      • 추후 파인튜닝 진행 예정
    • Pyannote
      • 화자 분할을 위한 오픈 소스 툴킷
      • 화자 분할(Speaker Diarization) 분야에서 SOTA 모델에 속하는 Pyannote 활용
      • 가장 최근에 배포된 "pyannote/speaker-diarization-3.1" 모델 활용
    • Mitral AI
      • 오픈 소스 기반 LLM 모델을 활용할 수 있는 서비스
      • 웹 기반 서비스 이외에도 API 서비스를 제공하기 때문에 API 키 발급 후 무료로 API 활용 가능
      • 서비스에서 제공된 모델 중 "mistral-medium"를 활용

2. 서버 구조

  • WEB 서버
    • Django 기반 웹 서버로 사용자 정보 및 음원 데이터를 DB서버에 저장
    • 새로운 노트 생성 시 RabbitMQ의 큐에 AI 처리 요청 메시지 전송
  • AI 서버
    • RabbitMQ의 큐에서 요청 메시지 수신 후 AI 모델 로딩 후 데이터 처리
    • 음원 파일을 STT 처리하고, 화자 분할하여 json 결과 생성
    • mistral AI의 API를 활용해 json 결과를 전송하고 요약 및 키워드 추출 결과 수신
    • 가용 서버 자원 부족으로 요약 및 키워드 추출 API 활용 중이지만 추후 수정 예정
    • 처리된 결과를 순차적으로 DB 서버에 전송
  • Database 서버
    • PostgreSQL 기반의 DB 서버로 사용자 및 노트 정보 저장
    • 비밀번호를 비롯한 개인 정보는 암호화되어 저장
    • Oauth2를 활용한 소셜 계정 로그인 시 최소한의 정보 활용으로 개인 정보 최소화
  • RabbitMQ 서버
    • STT 및 화자 분할 요청 메시지 큐와 요약을 위한 요청 메시지 큐 분리
    • 큐의 지속성을 부여하기 위해 durable을 True로 설정
    • 메시지의 유실 방지 및 안정적인 처리를 위해 큐의 메타데이터를 디스크에 저장하도록 설정