클로드(Claude)와 오픈AI(OpenAI) 받아쓰기로, 진료 중 손목 버튼을 누르고 말하면 차트가 정리되는 시스템을 만들었습니다. 2026년 10월 13일 기준 3개월 넘게 실제 진료에 쓰고 있어요.
처음에는 "알렉사"라고 불러서 녹음을 시작했습니다. 이걸 버튼 하나로 바꾼 날이 이 프로젝트의 전환점이었어요. 음성 인식, 음성 기록, 진료 기록 자동화를 고민하는 분께 그 과정을 그대로 남깁니다.
진료 중 차트를 말로 남기고 싶었다
지피터스 24기 사업장자동화 멤버 김재욱이에요. 개원한 50대 치과의사예요. 코딩은 할 줄 모르고, 그래서 진료하면서 떠오른 소견을 그 자리에서 말로 남기고 싶었습니다.
지금 흐름은 이렇습니다. 버튼을 한 번 누르고 "2번 체어. 16번 팔라탈 쪽 균열이 치은연하까지 진행됐고요, 예후 불확실하다고 설명드렸어요"라고 말한 뒤 다시 누릅니다. 몇 초 뒤 진료실 화면에 이렇게 뜹니다.
11:52 | 김원장 | 2번체어 홍길동(예시)
O: #16 palatal 균열, 치은연하까지 진행
Memo: 예후 불확실함 설명드림환자 이름은 예시로 바꿨습니다. 화면의 줄을 한 번 클릭하면 줄 전체가 선택돼서 덴트웹(전자차트)에 바로 붙여넣습니다.
실제로 돌아가는 모습은 영상으로 찍어 두었습니다: 음성차팅 실연 영상
맥미니와 오픈AI로 도는 다섯 단계
원장실 맥미니 한 대가 다섯 단계를 차례로 처리합니다.
듣기: 무선 마이크(DJI MIC MINI)로 소리를 받고, 손목의 플릭(Flic 2) 버튼으로 녹음을 시작하고 끝냅니다.
글로 옮기기: 1초가 넘는 무음은 잘라낸 뒤 오픈AI 받아쓰기(gpt-4o-transcribe)로 보냅니다. 치과 용어 목록을 힌트로 같이 줍니다.
정리하기: GPT가 먼저 "차팅인지 환자 설명인지"를 구분합니다. 차팅이면 S, PI, Plan, Memo로 나누고, 설명이면 한 줄씩 요약합니다.
환자 붙이기: 제가 부른 체어 번호로 덴트웹에서 "진료중"인 환자를 찾아 연결합니다. 없으면 마지막 환자를 붙이고 (확인요망)을 답니다.
화면에 띄우기: 치과 용어 사전으로 표기를 다듬은 뒤 병원 안 화면에만 띄웁니다.
체어 번호를 부르지 않은 말은 저장하지 않습니다. 진료실 잡담과 개인정보를 거르는 첫 관문입니다. 이 화면은 그날 하루 보는 메모이고, 영구 기록은 제가 덴트웹에 직접 남깁니다.
"이가 아파요"가 진단서로 바뀐 날
7월 4일 아침, 기록을 보다가 멈칫했어요. 환자분이 "이가 아파요" 한마디만 했는데 화면에는 이렇게 저장돼 있었습니다.
#4: cold(-), Bite(+), Mob(-), per(-), crack(-)
진단: 우식 치료계획: 충전 치료 권유함말하지 않은 검사 소견과 진단, 치료 계획이 들어가 있었습니다. 녹음은 46초였고 실제 말은 훨씬 짧았어요. 말이 끝난 뒤 남은 긴 무음 구간을 받아쓰기가 그럴듯한 치과 용어로 채운 것으로 봤습니다. 진료 기록이라 바로 손으로 고쳤습니다.
같은 날 문제가 더 보였습니다.
끝내는 말 "엔드"를 잘못 알아들어 녹음이 끝나지 않았습니다.
종료어에 "이상"을 더했더니 "10년 이상" 같은 문장에서 끊길 위험이 생겼습니다.
"알렉사 4번"의 체어 번호를 잘못 알아들은 일도 있었습니다.
며칠 뒤에는 원인 하나가 숫자로 나왔습니다. 진료실 기계 소리가 계속 마이크에 들어와서, 소리 크기가 침묵 기준(0.008)보다 다섯 배 이상 높은 0.04에서 0.05에 머물렀습니다. "말이 멈췄다"를 잡을 수가 없으니 녹음이 상한인 60초까지 갔어요.
알렉사 대신 버튼으로 바꾼 이유
결론은 하나였어요. 문제의 뿌리는 말로 시작하고 말로 끝내는 구조 자체였습니다. 시작과 끝을 소리로 판단하면 소음, 오인식, 긴 무음이 한꺼번에 따라옵니다.
그래서 제가 물리 버튼을 쓰자고 했습니다. 고른 기준은 진료 동선이었습니다.
체어 8대를 옮겨 다 니며 진료해서 발페달은 쓸 수 없었습니다.
손이 바쁜 때가 많아 누르고 있는 방식 대신 한 번 누르면 시작, 다시 누르면 끝인 방식으로 정했습니다.
맥에 바로 연결되는 블루투스 버튼 플릭 2를 7월 6일에 주문했습니다. 지금은 손목 시곗줄에 끼워 씁니다.
시계를 차고 있는 사람의 손목
▲ 손목 시곗줄에 끼운 플릭 2 버튼, 한 번 누르면 녹음 시작
순서도 지켰습니다. 버튼이 도착하자 코드를 고치기 전에 체어 8곳을 돌며 블루투스 연결이 버티는지부터 봤습니다. 연결이 안 되면 코드를 고쳐도 소용이 없으니까요. 버튼이 오기 전에는 임시로 15초마다 종료어를 확인하게 해서 60초까지 가는 일만 막았습니다.
바꾼 뒤 달라진 점입니다.
끝이 확실합니다. 소음이 있어도 버튼을 누르면 끝납니다.
끝났는지 확인하려고 중간에 받아쓰기를 부르던 일이 없어졌습니다.
녹음 끝에 쓸데없는 무음이 덜 남아서, 없는 말을 지어낼 여지도 줄었습니다.
지금은 버튼이 기본이고 "알렉사" 호출은 보조로만 남겨 뒀어요.
클로드와 매일 고친 것들
버튼 다음에도 실사용에서 걸린 것을 하나씩 고쳤습니다.
9월 중순에는 말해도 매일 아침 기록이 되지 않았습니다. 마이크 고장이 아니라 맥의 마이크 권한 문제였고, 아침 자동 재시작이 프로그램을 잘못된 방식으로 띄우고 있었습니다. 재시작 방식을 바꿔 해결했습니다.
9월 하순에는 무선 마이크가 끊기면 프로그램 전체가 멈췄습니다. 지금은 30초 안에 스스로 다시 연결하고, 화면에 "마이크 끊김" 경고가 뜹니다. 기록을 화면으로 옮기는 프로그램이 90초 넘게 밀리면 알아서 다시 켜지게도 했습니다.
용어는 화면에서 틀린 걸 보는 날 바로 고칩니다. 10월 7일에는 화면에 "팔라탈", "호플리스"가 찍힌 걸 보고 이렇게 보냈습니다.
mesial/distal/buccal/lingual/palatal/occlusal/cervical/gingival 이 단어들은 영어로 표기해야 해. 입력해 줘 (일부)
이미 등록된 mesial, distal 같은 단어는 두고, 빠져 있던 palatal, gingival, closure, Hopeless를 사전에 넣었습니다. "인차우식", "이차우식"도 "2차우식"으로 통일했어요. 그날 오후 차팅부터 바로 적용됐습니다.
코딩을 모르니 일하는 규칙을 먼저 정했습니다.
고치기 전에 무엇을 어떻게 바꾸는지 계획표를 먼저 받고, "진행해 줘"라고 해야 시작합니다.
고치기 전에는 날짜를 붙여 백업하고, 끝나면 옵시디언(Obsidian) 작업기록에 날짜별로 한 일과 다음 할 일을 남깁니다.
아직 안 된 것
받아쓰기와 정리를 위해 녹음과 글이 외부 AI 서비스(오픈AI)로 보내집니다. 의료 정보라서 동의와 보안 기준은 병원마다 따로 검토해야 합니다.
GPT 정리 단계에서 "교정 진단"이 "교정"으로 줄어든 일처럼 단어가 빠질 때가 있습니다. 이걸 미리 잡을 시험 문장 모음은 아직 없어서, 제가 화면을 보고 확인한 뒤 덴트웹에 옮깁니다.
무선 마이크 연결이 여전히 가장 흔한 문제 원인입니다. 10월 7일 저녁부터 다음 날 오후까지 마이크가 잡히지 않은 적이 있었습니다.
따라 해 보려면
진료실이 아니어도 "말로 기록하는 일"이 있는 곳이면 구조는 같습니다. 매장 재고를 돌며 말로 적는 일, 현장 점검을 남기는 일도 마찬 가지예요. 가장 먼저 정할 것은 녹음을 무엇으로 시작하고 끝낼지입니다. 저는 그걸 말로 시작했다가 돌아왔습니다.
이렇게 시키면 돼요.
[내 직업]인데, [어떤 상황]에서 말로 한 내용을 [원하는 양식]으로 정리해 화면에 띄우고 싶어.
녹음 시작과 끝은 블루투스 버튼으로 하고, 무음은 잘라서 받아쓰기로 보내 줘.
고치기 전에는 계획표를 먼저 보여 주고, 내가 "진행해 줘"라고 하면 시작해.