블로그 목록으로
Case Study13분 읽기 

회의지옥에서 탈출 — Bob이 바꾼 미팅의 풍경

매주 수십 개의 회의, 끝나고 나면 아무것도 남지 않는 기억, 누가 무슨 말을 했는지 두고두고 싸우는 팀. Bob이 이 세 가지 문제를 동시에 해결한 방법 — 100% 온디바이스 AI 미팅 코파일럿의 기술과 실제 경험을 공유합니다.

작성NEXUS AI Labs

회의지옥에서 탈출 — Bob이 바꾼 미팅의 풍경 대표 이미지

NEXUS AI Labs는 작은 팀입니다. 그런데도 회의는 많았습니다. 제품 방향 논의, 기술 검토, 외부 파트너 미팅까지 — 한 주에 가볍게 20개를 넘겼습니다. 문제는 회의 자체가 아니었습니다. 회의가 끝난 뒤 아무것도 남지 않는다는 것이었습니다.

회의가 끝나면 각자 노트 앱을 열었습니다. 누군가는 Notion, 누군가는 Apple Notes, 누군가는 아무것도. 다음 날 '어제 회의에서 결정된 게 뭐였지?' 물으면 세 사람이 세 가지 답을 내놓습니다. '내가 그 말을 한 게 아니라 네가 먼저 제안했잖아'라는 대화는 피곤했습니다. 회의를 위한 회의가 생겨났습니다. 이게 회의지옥입니다.

Bob 홈 화면 — 회의 세션 목록
Bob 홈 화면. 모든 회의가 세션 단위로 저장되고, 화자별 발언 시간과 요약이 함께 기록된다.

회의록 문제의 실체 — 기억이 아니라 구조의 문제다

처음에는 '회의록을 더 잘 쓰면 된다'고 생각했습니다. 회의 중에 노트 담당을 정했습니다. 결과는 더 나빠졌습니다 — 노트 담당자가 적느라 바빠서 회의에 제대로 참여를 못했고, 적은 내용은 반쪽짜리였습니다. 녹음을 해봤습니다. 회의 후 1시간짜리 녹음 파일을 누가 다시 듣나요? 아무도 안 들었습니다.

AI 기반 회의 솔루션을 써봤습니다. 여러 SaaS 제품이 있습니다. 음성을 클라우드로 올려 전사해주는 서비스들 — 품질은 나쁘지 않았지만 두 가지가 걸렸습니다. 첫째, 누가 말했는지 모릅니다. '어': 'CEO가 다음 분기 방향을 확정했다'는 회의록과 '누군가: CEO가 다음 분기 방향을 확정했다'는 회의록은 완전히 다른 문서입니다. 둘째, 회의 내용이 외부 서버로 나갑니다. 파트너사와 NDA 맺고 진행하는 미팅의 내용이 어딘가의 클라우드에 저장된다는 것은 받아들일 수 없었습니다.

Bob — 맥 안에서만 돌아가는 미팅 AI

Bob은 macOS 데스크톱 앱입니다. Wails v2(Go + React) 위에 Python 음성 처리 서버를 내장해, 실행 파일 하나로 모든 AI 기능이 로컬에서 구동됩니다. 음성 인식(FunASR SenseVoice), 화자 임베딩(CAM++), 요약(llama.cpp + Qwen3 4B) — 이 세 AI가 모두 맥 위에서 돌아갑니다. 클라우드 API를 단 하나도 호출하지 않습니다.

100%
온디바이스 처리 — 클라우드 API 0건
실시간
음성 전사 레이턴시
1.5GB
첫 실행 시 자동 다운로드 모델 크기
0
추가 설정 — 실행하면 바로 시작

첫 실행 시 ./app.sh 하나로 Python 환경 구성과 모델 다운로드가 자동으로 진행됩니다. 약 1.5GB의 모델을 내려받는 이 과정이 끝나면, 그 이후부터는 인터넷 연결 없이도 완전히 동작합니다. 설정 화면도 없습니다. 마이크를 켜고 회의를 시작하면 됩니다.

실제 회의에서 어떻게 작동하는가

Bob과 함께하는 첫 회의 경험은 약간 어색합니다. 화면 한켠에 실시간으로 텍스트가 흘러내려오는 걸 보면서 회의를 하는 게 익숙하지 않기 때문입니다. 3분이면 익숙해집니다. 이후부터는 말하는 대신 행동합니다 — 노트 앱을 닫고, 회의에 집중합니다.

Bob 실시간 전사 화면 — 화자별 색상 구분
실시간 전사 화면. 화자별로 색이 다른 발언 블록이 스크롤되며, 이름 태그를 저장하면 이후 회의에서 자동 재인식된다.

화자 구분이 작동하는 방식을 처음 보면 놀랍습니다. 회의 시작 몇 분 후, 왼쪽 화자 패널에 '화자 A', '화자 B' 같은 자동 레이블이 붙기 시작합니다. 여기에 이름을 입력하면 — '이 목소리는 김대표' — Bob이 해당 음성의 임베딩 벡터를 저장합니다. 다음 회의에서는 같은 목소리를 즉시 재인식해서 '김대표'로 표시합니다. 한 번 등록하면 끝입니다.

회의가 끝나면 두 가지가 자동으로 생성됩니다. 첫째, 화자명이 붙은 완전한 전사 기록. 둘째, Qwen3 4B 모델이 작성한 구조화된 회의록 — 논의 요약, 결정 사항, 액션 아이템, 한 줄 결론 순서로 정리됩니다. 이 두 문서는 회의 종료 버튼을 누르는 순간 완성됩니다. 추가 편집 없이 팀에 공유할 수 있는 상태로.

Bob 세션 결과 화면 — 회의록 자동 생성
회의 종료 직후 생성된 회의록. 논의 요약 → 결정 사항 → 액션 아이템 → 한 줄 결론 순으로 Qwen3 4B가 로컬에서 작성한다.

기술 내부 — 세 개의 AI가 하나의 흐름으로

Bob의 음성 처리 파이프라인은 세 레이어로 구성됩니다. CoreAudio가 마이크를 캡처하고, Python 서버가 실시간 스트리밍 ASR을 돌리고, 회의 종료 시 Go 코어가 요약을 트리거합니다. 각 레이어가 왜 해당 기술을 선택했는지를 설명합니다.

  1. CoreAudio (마이크 캡처) — macOS 네이티브 오디오 API. 16kHz PCM 스트림을 Python 서버 소켓으로 전달합니다. 시스템 오디오(Zoom, Teams 등)도 함께 캡처 가능해, 원격 미팅에서도 작동합니다.
  2. FunASR SenseVoice (음성 인식) — 알리바바 연구소의 오픈소스 ASR 모델. Whisper 대비 한국어 인식 정확도가 높고, 스트리밍 전사를 네이티브로 지원합니다. Python 서버 내에서 실시간으로 구동됩니다.
  3. CAM++ 화자 임베딩 (화자 구분) — 음성 세그먼트에서 192차원 화자 벡터를 추출하고 코사인 유사도로 같은 화자를 클러스터링합니다. 등록된 화자 프로필과 매칭해 이름을 붙입니다. 새 화자가 나타나면 새 클러스터를 생성합니다.
  4. llama.cpp + Qwen3 4B (요약) — 회의 종료 시 전체 전사 텍스트를 컨텍스트로 Qwen3 4B에 제공하고 구조화된 요약을 생성합니다. 4비트 양자화된 모델이 M-시리즈 맥에서 초당 40~60 토큰으로 구동됩니다.
Bob 파이프라인 개념 흐름 (Go 코어)go
// 회의 종료 시 요약 트리거 — Go → Python 서버 → llama.cpp
func (s *Session) Finalize(ctx context.Context) (*MeetingRecord, error) {
    // 1. 전사 세그먼트 + 화자 레이블 취합
    transcript := s.transcript.Export() // []Segment{Speaker, Text, StartMs, EndMs}

    // 2. Python 서버에 요약 요청 (로컬 소켓 — 외부 네트워크 없음)
    req := SummaryRequest{
        Transcript: transcript,
        Prompt:     buildSummaryPrompt(s.lang),
    }
    summary, err := s.pythonBridge.Summarize(ctx, req)
    if err != nil {
        return nil, err
    }

    // 3. 회의록 구조화: 요약 / 결정 사항 / 액션 아이템 / 한 줄 결론
    return &MeetingRecord{
        Session:    s.meta,
        Transcript: transcript,
        Summary:    summary, // Qwen3 4B 로컬 생성
    }, nil
}

화자 인식이 바꾸는 것 — '누가 말했는가'의 가치

단순 전사와 화자 구분 전사의 차이를 과소평가하기 쉽습니다. 실제로 회의록을 사용하는 맥락을 생각해봐야 합니다. '다음 분기 목표를 Metric X로 정한다'는 발언이 회의록에 있을 때, 그 발언의 주체가 누구인지에 따라 이후 책임 소재가 달라집니다. 화자 없는 회의록은 발생한 것의 기록이고, 화자 있는 회의록은 누가 책임지는가의 기록입니다.

NEXUS AI Labs에서 Bob을 쓰기 시작한 후 달라진 가장 큰 것은 '그때 우리가 뭘 결정했지?' 논쟁이 사라진 겁니다. 이제 누군가가 '그 회의에서 내가 그 말을 한 게 아닌데'라고 하면, Bob의 세션 기록을 열면 됩니다. 화자 레이블이 붙은 전사 기록이 7개월치 쌓여 있습니다. 논쟁이 5초 안에 끝납니다.

보안의 문제 — 클라우드 AI와 온디바이스 AI 사이에서

기업 미팅, 투자자 미팅, 파트너사와의 기밀 논의. 이런 회의에서 클라우드 기반 AI 도구를 쓰면 법적 리스크가 생깁니다. 많은 SaaS 회의 도구의 개인정보처리방침을 읽어보면 '서비스 개선을 위해 음성 데이터를 사용할 수 있다'는 조항이 있습니다. NDA를 체결한 파트너사와의 대화를 그 조항이 커버하는 서버로 보내는 것은 계약 위반의 소지가 있습니다.

Bob의 구조는 이 문제를 원천 차단합니다. 음성 데이터는 맥의 CoreAudio에서 로컬 Python 서버로, 로컬 Python 서버에서 로컬 SQLite 데이터베이스로만 이동합니다. 네트워크 패킷 캡처를 켜고 Bob을 실행해도 외부로 나가는 음성 관련 트래픽이 없습니다. 회의 내용이 외부 서버에 도달하는 경로 자체가 없습니다.

Bob 히어로 이미지 — 로컬 AI 미팅 코파일럿
Bob — 맥 안에서만 돌아가는 미팅 AI
Bob 데모 화면
실제 회의 진행 중 화면. 화자별 발언이 실시간으로 분리 기록된다.

Bob을 쓰고 7개월 — 달라진 것들

정량적으로 측정한 것들과 정성적으로 느낀 것들을 솔직하게 기록합니다. 부풀리지 않겠습니다.

7개월+
Bob 팀 내 사용 기간
~300건
기록된 회의 세션 수
0회
'그때 무슨 결정을 했지' 논쟁 (7개월 간)
~40분
회의당 절약 추정 (노트 작성 + 사후 정리)
  • 회의 참여도 향상 — 노트 담당자가 없어지면서 모두가 회의에 집중합니다. '방금 한 말 다시 해줘'가 줄었습니다.
  • 액션 아이템 이행률 상승 — 회의록에 '누가 무엇을 한다'가 명시되면서, 다음 주 '그거 어떻게 됐어?'라는 추적이 쉬워졌습니다.
  • 온보딩 자료로 활용 — 신규 팀원이 입사하면 Bob의 과거 회의 세션을 훑어보는 것이 컨텍스트 파악의 첫 단계가 됐습니다. 7개월 치 의사결정 기록이 다 있습니다.
  • 한국어 + 영어 혼용 회의도 OK — SenseVoice는 언어 감지가 내장되어 있어, 코드스위칭(한국어와 영어를 섞는 것)도 잘 처리합니다.

한계와 앞으로

솔직히 말하겠습니다. Bob이 완벽하지 않은 부분들이 있습니다. 배경 소음이 심한 카페나 개방형 오피스에서는 전사 정확도가 떨어집니다. Qwen3 4B는 맥 M1/M2/M3에서 충분히 빠르지만, Intel 맥에서는 요약 생성이 1~2분 걸릴 수 있습니다. 화자 수가 5인 이상인 큰 회의에서는 임베딩 클러스터링이 간혹 오분류합니다.

다음 목표는 두 가지입니다. 첫째, 실시간 요약 인터페이스 — 회의 중 '지금까지 나온 결론 요약해줘'를 말로 물어보면 Bob이 답하는 기능. 둘째, Zoom/Teams 통합 — 원격 참여자의 음성도 시스템 오디오로 캡처해 화자 패널에 통합하는 파이프라인 개선.

회의의 목적은 결정을 내리는 것입니다. Bob의 목적은 그 결정이 기억되게 하는 것입니다.

NEXUS AI Labs

회의지옥에 있다면 — 끝난 회의의 내용을 둘러싸고 팀이 싸운다면, 회의록 담당자가 지쳐있다면, 중요한 대화의 내용이 클라우드로 올라가는 게 불안하다면 — Bob을 써보세요. macOS에서 ./app.sh 하나면 시작됩니다.

더 읽어보기