서비스 안내
전사 기술과 음성 보존
녹음과 비디오에서 화자별 발화 시각과 전사문을 확인하는 사내 NAS 계정 기반 서비스입니다. 화면은 기기의 라이트·다크 설정을 자동으로 따릅니다.
전사 기술
- Nemotron-3-Diarization
- 각 구간에서 누가 말했는지 구분하는 화자분리 모델입니다. 표시되는 화자 번호는 해당 파일 안에서만 사용하는 식별자이며 실제 인물의 이름을 추정하지 않습니다.
- Qwen3-ASR 1.7B
- 음성을 텍스트로 변환하는 음성 인식 모델입니다. ForcedAligner로 단어와 발화의 시각을 정렬하고 화자분리 결과와 결합합니다.
- 단일 워커·글로벌 큐
- 모든 계정의 작업은 하나의 큐에서 등록 순서대로 처리합니다. 화면에는 로그인한 계정의 작업 목록과 대기 상태만 표시합니다.
모델 추론과 음성 인코딩은 운영 서버의 Docker 컨테이너에서 수행합니다. 업로드한 음성을 외부 전사 API로 보내지 않습니다.
음성 보존과 원본 제거
- 업로드 스트림을 암호화하여 처리 대기 파일로 저장합니다.
- 메모리 기반 임시 공간에서 복호화한 후 첫 번째 오디오 트랙을 AAC 64 kbps·24 kHz·모노 M4A로 인코딩합니다. 비디오의 영상 트랙과 원본 메타데이터는 보존하지 않습니다.
- 보존 음성을 암호화하여 저장하고 저장 크기를 기록한 뒤 업로드 원본을 제거합니다. 전사는 보존한 음성을 기준으로 수행합니다.
- 전사 결과를 JSONL로 암호화하여 저장하고 작업용 평문 임시 파일을 제거합니다.
AAC는 손실 압축입니다. 원본의 음질·채널 구성을 그대로 복원할 수 없으며 원본이 이미 압축된 경우 보존 파일이 더 작아진다고 보장할 수 없습니다. 일반적인 비압축 녹음의 저장량을 줄이면서 모바일 재생과 구간 탐색을 제공합니다.
전사가 실패해도 음성 보존이 완료되었다면 소유자가 해당 음성을 재생·다운로드할 수 있습니다. 인코딩할 수 없는 파일은 보존되지 않습니다. 기능 적용 전에 원본이 제거된 기존 기록에는 보존 음성을 복구할 수 없습니다.
암호화 적용
- 전송 중 보호
- 브라우저와 서비스는 HTTPS로 통신합니다. NAS 계정 인증도 HTTPS를 사용하며 인증 정보를 보내기 전에 설정된 NAS 서버 인증서의 SHA-256 지문을 확인합니다.
- 저장 시 보호
- 업로드 대기 파일·보존 음성·전사 JSONL·기록 이름·화자 이름·파일명을 AES-256-GCM으로 암호화합니다. 파일 블록마다 별도의 무작위 nonce를 사용하고, 파일별 무작위 식별자·작업 ID·데이터 용도·블록 순서·파일 끝을 함께 검증합니다.
- 키 관리
- 256비트 서버 키를 운영 계정의 접근 권한으로 제한된 별도 키 파일에서 읽습니다. 키는 읽기 전용으로 컨테이너에 연결하며 웹 문서나 다운로드에 포함하지 않습니다.
이 방식은 서버가 복호화하는 저장 암호화입니다. 운영 서버 관리자와 키에 접근할 수 있는 관리자는 데이터를 복호화할 수 있으며 종단간 암호화는 아닙니다. 계정 이름·작업 상태·등록 시각 등의 운영 메타데이터는 데이터베이스에 평문으로 저장됩니다.
음성 재생과 다운로드 시 소유자를 확인한 뒤 요청한 블록만 복호화하여 HTTPS로 전달합니다. 내려받은 M4A와 JSONL은 평문 파일이므로 다운로드한 기기에서 별도로 관리해야 합니다.
계정과 기록 접근 권한
사내 NAS 계정으로 로그인하며 NAS 비밀번호와 NAS 인증 세션 ID를 저장하지 않습니다. 서비스는 무작위 세션 토큰의 해시만 보관합니다. 화면 열기·클릭·키보드 입력·스크롤·음성 재생 등 사용자 활동이 있으면 최대 15분 간격으로 로그인 상태를 14일 연장합니다. 자동 목록 조회만으로는 연장하지 않으며 만료되거나 로그아웃한 세션은 다시 로그인해야 합니다. NAS 인증은 로그인 시에만 수행하고 세션 갱신을 위해 비밀번호를 보관하지 않습니다. 공용 기기에서는 사용 후 로그아웃하세요.
각 기록에는 고유 URL이 있습니다. 주소를 공유해도 업로드한 계정으로 로그인해야 상세 내용·음성·전사문에 접근할 수 있습니다. 다른 계정과 비로그인 사용자는 해당 데이터를 조회하거나 다운로드할 수 없습니다.
기록을 삭제하면 보존 음성과 전사 결과도 함께 제거됩니다. 삭제된 기록의 복원 기능과 자동 만료 정책은 제공하지 않으므로 필요한 기록은 직접 보관·관리하세요.
이용 범위와 정확도
파일당 최대 2 GB·오디오 길이 2시간을 지원합니다. 계정별 업로드·대기·처리 작업은 최대 5건, 전체는 최대 50건입니다. 업로드 제한 시간은 30분입니다. 한 번에 최대 50개 파일을 선택하면 유효한 입력을 순서대로 등록하며, 계정의 미완료 작업이 5건이면 처리 완료를 기다립니다. 업로드 중 브라우저를 닫으면 아직 등록하지 않은 파일은 다시 선택해야 합니다.
잡음·동시 발화·짧은 발화·전문 용어에 따라 화자나 전사문에 오류가 생길 수 있습니다. 전사문 앞의 재생 버튼을 눌러 보존 음성을 확인하고 중요한 내용을 검토하세요. 화자 번호는 사람의 신원을 보증하지 않습니다.
기술 문서
MCP 연결과 대화 요약
로그인 후 상단의 MCP 연결에서 연결 토큰을 발급할 수 있습니다. 서버 주소는 https://stt.hanulsoft.co.kr/mcp/이며 Streamable HTTP와 Bearer 인증을 지원합니다. 토큰은 본인 기록의 조회·업로드·다운로드·삭제 권한을 부여합니다. 최대 5개를 발급할 수 있고 유효한 토큰을 사용할 때 최대 15분 간격으로 만료 시각을 14일 연장합니다. 로그인한 화면에서도 유효한 토큰의 만료 시각을 갱신하거나 언제든 폐기할 수 있습니다. 만료·폐기된 토큰은 재활성화하지 않습니다. 토큰 원문은 발급 시 한 번만 표시하고 서버에는 해시만 저장합니다.
MCP로 조회한 전사문을 연결한 AI에 전달하여 대화 요약이나 회의록을 작성할 수 있습니다. 서버의 Nemotron-3-Diarization은 화자분리 모델, Qwen3-ASR는 전사 모델이며 문장 요약 모델은 아닙니다. 대화 요약·회의록 프롬프트를 제공하며 실제 요약은 연결한 AI가 수행합니다. 생성한 요약을 이 서버에 저장하는 기능은 제공하지 않습니다.
외부 AI에 연결하면 복호화한 전사문이 해당 앱으로 전달될 수 있으며 그 앱의 데이터 처리 정책이 적용됩니다. 신뢰하는 앱에만 토큰을 전달하세요. 회의록의 결정 사항·담당자·기한은 원문 발화와 대조해야 하며 전사에 없는 정보는 미확인으로 처리해야 합니다.
직접 MCP 제출은 8 MiB까지 지원합니다. 대용량 파일은 제공된 로컬 stdio 브리지나 스트림 업로드 API로 최대 2 GB까지 제출할 수 있습니다. OAuth 자동 로그인은 제공하지 않으며 Bearer 헤더를 지원하는 클라이언트 또는 stdio 브리지가 필요합니다.
MCP 연결 방법
- 서비스에 로그인합니다. 모바일에서는 상단 메뉴를 열어 MCP 연결을 선택합니다.
- 연결 이름을 입력하고 연결 토큰 발급을 누릅니다. token.txt 다운로드로 토큰 파일을 받을 수 있습니다. 토큰 원문과 다운로드는 발급 직후에만 제공되므로 연결할 앱의 보안 설정 또는 토큰 파일에 보관합니다.
- AI 앱에서 아래 서버 주소·전송 방식·인증 헤더를 설정합니다. Bearer 헤더를 지원하는 Streamable HTTP 클라이언트가 필요합니다.
- 연결 후
service_info와list_transcriptions를 호출하여 연결 상태와 본인 기록을 확인합니다.
| 설정 | 값 |
|---|---|
| 서버 주소 | https://stt.hanulsoft.co.kr/mcp/ |
| 전송 방식 | Streamable HTTP |
| 인증 헤더 | Authorization: Bearer <발급한 토큰> |
| 토큰 관리 | 유효한 사용 시 14일 연장, 로그인한 화면에서 만료 갱신·폐기 가능 |
로컬 파일 제출을 위한 stdio 설정
Bearer 헤더를 직접 설정할 수 없거나 큰 파일을 제출하려면 로컬 브리지를 사용합니다. 브리지 파일 한 개와 uv를 설치하면 실행할 수 있습니다.
- Windows 터미널에서 아래 명령으로 uv를 설치합니다. 설치 후 터미널과 AI 앱을 다시 열고
uv --version으로 설치를 확인합니다. 다른 운영체제는 위 공식 안내를 참고합니다.winget install --id=astral-sh.uv -e - 브리지 다운로드를 눌러 파일을 받습니다. 예시에서는
C:/MCP/mcp-client-bridge.py에 저장합니다. 저장 폴더가 없다면 먼저 만듭니다. - 이 서비스의 MCP 연결에서 토큰을 발급한 직후 token.txt 다운로드를 누릅니다. 받은 파일을
C:/MCP/token.txt로 옮깁니다. 파일에는 토큰만 UTF-8 텍스트로 저장됩니다. 본인 계정만 읽을 수 있도록 관리하고 업로드할 미디어 폴더와 분리합니다. - AI 앱의 MCP 설정에 아래 내용을 추가합니다.
C:/MCP는 브리지·토큰을 보관하는 예시 폴더,D:/Media와D:/Meetings는 제출할 음성·영상 폴더입니다. 경로는 실제 저장 위치에 맞춰 바꾸고 사용하는 미디어 폴더만 허용합니다.
{
"mcpServers": {
"transcription": {
"command": "uv",
"args": [
"run",
"C:/MCP/mcp-client-bridge.py",
"--token-file", "C:/MCP/token.txt",
"--allowed-root", "D:/Media",
"--allowed-root", "D:/Meetings"
]
}
}
}AI 앱을 다시 연결한 뒤 service_info로 연결을 확인합니다. 첫 실행에서는 uv가 필요한 Python과 패키지를 준비하므로 시간이 걸릴 수 있습니다. 별도의 Python·GPU 모델 설치는 필요하지 않습니다.
uv 명령을 찾을 수 없으면 터미널에서 where.exe uv로 설치 위치를 확인하고 설정의 command를 해당 uv.exe의 전체 경로로 바꿉니다. 브리지는 --allowed-root로 지정한 로컬 폴더 안의 파일만 읽습니다. 모델은 운영 서버에서 실행하며 로컬 GPU는 사용하지 않습니다.
여러 미디어 폴더 허용
폴더마다 --allowed-root를 반복 지정합니다. 위 예시는 D:/Media와 D:/Meetings 두 폴더를 허용하며, 어느 한 폴더 안에 있는 파일이면 하위 폴더의 파일도 제출할 수 있습니다. 각 폴더는 실제로 존재해야 합니다. 여러 경로를 쉼표로 묶지 말고 인수를 각각 추가하세요.
허용 폴더를 하나도 지정하지 않으면 기록 조회·요약용 전사문 조회는 가능하지만 로컬 파일 업로드는 거부합니다. 허용 폴더 밖으로 연결되는 심볼릭 링크와 UNC 네트워크 공유 경로도 제출할 수 없습니다. 토큰 파일은 허용한 미디어 폴더 밖에 보관하세요.
MCP 사용 예시
아래 요청은 클로드(Claude Code 등), 코덱스(Codex), 안티그라비티(Antigravity), 그록 빌드(Grok Build) 등 MCP를 지원하는 AI 도구에 이 서비스를 연결한 뒤 해당 도구의 대화창에 입력합니다. 연결 메뉴와 설정 파일 형식은 앱마다 다르므로 링크의 공식 안내에 맞춰 서버 주소·Bearer 인증 또는 stdio 브리지를 설정합니다. 위 JSON은 stdio 연결의 예시이며 각 앱의 설정 형식에 맞춰 적용해야 합니다.
이 서비스는 화자별 전사문과 조회 도구를 제공하고, 요청 해석·요약·회의록 작성은 연결한 AI가 수행합니다.
기존 기록의 대화 요약
AI는 list_transcriptions로 기록 ID를 찾고 get_transcript를 반복 호출합니다. next_offset이 숫자이면 다음 호출의 offset에 전달하며, null이 될 때까지 모든 발화를 읽습니다. 한 페이지를 전체 회의로 해석하지 않습니다.
get_transcript({"job_id":"조회한 기록 ID","offset":0,"limit":100})
get_transcript({"job_id":"동일 기록 ID","offset":100,"limit":100})
새 음성·영상 전사와 회의록
로컬 브리지가 파일을 제출하면 작업 ID를 반환합니다. AI는 get_transcription_status로 상태를 확인하고 done 이후 전체 전사문을 조회합니다. 프롬프트 conversation_summary와 meeting_minutes도 제공합니다.
원문·음성 다운로드
get_download_urls는 M4A·JSONL 주소를 반환합니다. 다운로드에도 동일 Bearer 인증이 필요하며 주소 자체에는 토큰을 포함하지 않습니다. JSONL의 speaker는 고정 화자 ID, speaker_name은 화면에서 설정한 화자 이름입니다.
실제 공개 샘플 시험에서 약 182초 입력의 화자 6명·발화 23개를 모든 페이지에 걸쳐 조회하고 요약·회의록 형식을 검증했습니다. 요약은 연결한 AI에서 작성하며 원문의 전사 오류는 재생으로 확인해야 합니다. MCP 없이 사용할 때는 기록 상세의 전사문 복사로 시각·화자 ID·전체 발화가 포함된 텍스트를 복사하여 AI에 전달할 수 있습니다.