← 프로젝트 목록04 / CASE STUDY

PRIVATE SERVICE / DISCUSSION

사유의 사유화

긴 토론을 한 번의 모임으로 흘려보내지 않고, 다시 읽고 생각할 수 있게 만드는 도구.

v0.1.2 · 개발·검증 진행 중 · 모임 전용 비공개 서비스
MOBILE SCREEN / CURRENT WORK

모바일에서 구현한 사유의 사유화

로그인 후 보이는 홈 화면입니다. 토론 캘린더, 마크다운 기록, 전사·요약, 녹음, 운영 페이지로 이동하는 구성을 확인할 수 있습니다. 화면이 구현되어 있어도 각 기능의 안정성과 권한 동작은 계속 검증하고 있습니다.

사유의 사유화 모바일 홈 화면. 상단 메뉴와 토론 캘린더, 기록 작성, 전사·요약, 녹음, 운영 메뉴가 보입니다.
모바일 화면 캡처
01 / 만든 기록

토론이 끝나면 이야기는 어디에 남을까?

사유는 한 달에 한 번 만나 여러 이야기를 나누는 토론 모임입니다. 두세 시간씩 이야기하다 보면 정작 중요한 말이 무엇이었는지 나중에는 기억이 흐릿해지기도 합니다.

모임에서 나눴던 이야기를 다시 확인하고 싶어 하는 사람들도 있었습니다. 그렇다면 토론 내용을 녹음하고 글로 옮겨서 날짜별로 정리해 두면 어떨까 생각했습니다.

제가 실제로 참여하고 있는 모임이니 무엇이 불편하고 어떤 기능이 필요한지 먼저 생각해 볼 수 있었습니다.

02 / 만든 기록

누구나 쓰는 서비스는 아니었습니다

처음부터 많은 사람이 사용하는 서비스를 만들 생각은 없었습니다. 사유 회원 약 10명이 쓰는 작은 웹서비스로 시작했습니다.

날짜를 선택해 기록을 남기고, 녹음을 전사해서 그날의 이야기를 다시 읽는 구조였습니다. 기록은 회원들이 함께 보되, 녹음 원본은 승인된 운영진만 접근하도록 구분했습니다.

녹음에는 다른 사람의 목소리가 담깁니다. 편하다고 아무에게나 공개할 수 있는 정보는 아니기 때문에 누가 무엇을 볼 수 있는지부터 나눠야 했습니다.

03 / 만든 기록

녹음 하나에도 생각할 것이 많았습니다

기록과 회원 정보는 D1에, 녹음 파일은 비공개 R2에 보관하는 방식으로 구성했습니다. 회원 인증에는 Google 로그인을 사용하고, 허용된 회원만 들어올 수 있도록 설계했습니다.

녹음한 말을 글로 옮기기 위해 Whisper와 요약 기능도 연결해 봤습니다. 필요한 기능이 늘어날수록 파일은 어디에 저장하는지, 처리에 실패하면 어떻게 되는지, 중간에 녹음이 끊기면 무엇이 남는지를 따져봐야 했습니다.

처음에는 토론 내용을 기록하기 위한 간단한 앱을 생각했는데, 실제로 구현하면서 가장 오래 들여다본 것은 녹음과 저장 과정이었습니다.

04 / 만든 기록

몇 시간을 녹음해도 괜찮을까?

잠깐 녹음해서 파일을 저장하는 것과 실제 토론 시간 내내 안정적으로 녹음하는 것은 다릅니다. 화면이 꺼지거나 브라우저가 백그라운드로 이동했을 때도 잘 될까요?

현재는 녹음 구간 저장과 전사·요약에 관한 코드를 구현하고 테스트하는 중입니다. 실제 모임에서의 장시간 녹음, 목소리를 사람별로 구분하는 기능 등은 더 확인해야 합니다.

제가 원하는 것은 기능 목록이 많은 앱이 아니라, 모임이 끝난 뒤 기록을 꺼내 봤을 때 그날의 이야기가 제대로 남아 있는 도구입니다. 그 부분을 확인할 때까지 계속 손을 보려 합니다.

DEVELOPMENT LOG / CURRENT v0.1.2 · 2026.10.20

현재까지의 업데이트 기록

모임의 토론 기록을 남기는 작은 웹 도구에서 출발해, 회원별 권한과 녹음 보존, 전사·요약, 모바일 이용까지 범위를 넓히고 있습니다. 현재 기록 버전은 v0.1.2이며, 아래 날짜는 저장소 변경 이력에 따른 것입니다. 각 날짜별 수정에 별도의 버전 번호를 임의로 붙이지 않았습니다.

2026.10.20 / 모바일 사용과 저장 방식 보완

  • PWA 설치 구성: 홈 화면에 앱처럼 설치할 수 있도록 아이콘·매니페스트를 추가했습니다. 인증과 네트워크는 계속 필요합니다.
  • 녹음 중단 대응: 마이크 또는 브라우저 녹음이 중단되면 저장된 구간을 먼저 확정하고, 별도의 녹음으로 재개하는 흐름을 만들었습니다. 중단 중 소리나 전송되지 않은 구간은 복구할 수 없습니다.
  • 화면 잠금 방지 시도: Screen Wake Lock 요청과 해제 알림을 추가했습니다. OS의 잠금·절전 정책을 강제로 막지는 못합니다.
  • 기록 파일 보관: 마크다운 기록·전사·요약을 브라우저에서 PDF로 만들어 다운로드하거나 지원 기기의 공유 메뉴로 전달할 수 있게 했습니다. 이미지형 PDF여서 본문 텍스트 검색·선택은 제한됩니다.
  • 모바일 앱 개발: Android/iOS용 녹음·업로드 앱과 기존 Google 계정 연결, 계정별 업로드 재시도·분석 상태 확인 코드를 추가했습니다. Android 디버그 빌드 검증은 수행했지만, iOS 실제 설치 및 양쪽 기기의 백그라운드 사용 검증은 남아 있습니다.

2026.10.19 / 녹음·기록·권한 QA

마크다운 입력 지연 처리, 녹음 구간 누락·중복 검사, 중단된 녹음의 복구 경로, 전사 타임스탬프 정리, 긴 전사의 단계별 AI 요약 실패 후 재시도를 다듬었습니다. 회원 등록과 관리자 권한을 구분하는 회귀 테스트도 진행했습니다.

2026.10.13~14 / 회원 화면과 음성 분석 구조

Google 로그인과 회원 허용 목록, 날짜별 기록·캘린더, 관리자 회원 등록, 비공개 원본 보관, 전사·요약 열람 화면과 PDF 출력 동선을 정리했습니다. 녹음 분석은 Modal GPU의 faster-whisper 전사와 pyannote 화자 분리, Cloudflare Workers AI 요약으로 구성하고 단어 시간값 검사를 강화했습니다.

검증 상태와 남은 과제

코드·모의 테스트: 모바일 API와 브라우저 녹음, PDF 생성, 음성 구간 처리에 대해 Python·Node·Chromium 기반 검사를 진행했습니다. 일부 테스트는 합성 마이크·대체 API를 사용합니다.

실사용 검증 전: 실제 사유 모임의 2~4시간 녹음, iPhone/Android 화면 잠금 및 통화 중 동작, 운영 서버와 Modal GPU를 통과하는 전사·화자 분리·요약의 완전한 연결과 정확도는 별도 확인이 필요합니다.

USED TECHNOLOGIES

사용한 기술과 역할

회원만 쓰는 작은 모임 서비스라서 로그인, 녹음 파일 보관, 권한 구분을 함께 고민했습니다.

백엔드
Python · FastAPI · Cloudflare Python Workers회원과 기록, 녹음 관련 요청을 받는 서버 코드를 구성했습니다.
기록 저장
Cloudflare D1회원 허용 목록, 날짜별 Markdown 기록, 녹음 세션과 전사·요약 데이터를 저장합니다.
녹음 파일
Cloudflare R2녹음 구간 파일과 등록된 음성 샘플을 비공개로 보관합니다.
로그인
Google OAuthGoogle 계정으로 로그인하고 허용된 회원인지 확인합니다.
녹음
브라우저 MediaRecorder API마이크 음성을 여러 구간으로 나눠 업로드하도록 만들었습니다.
음성 처리
Modal GPU · faster-whisper · pyannote Community-1 · Workers AI전사·화자 분리와 명시적으로 요청한 AI 요약을 담당합니다. 음성 모델 품질과 운영 연동은 실데이터 검증이 남았습니다.
모바일·PDF
PWA · Screen Wake Lock · Android/iOS 앱 코드 · Canvas PDF설치형 웹, 녹음 중단 대응, 문서 저장, 네이티브 백그라운드 전송을 위한 작업을 추가했습니다. 실기기 운영 검증 전입니다.