개발기
OpenNoType 업데이트 개발기 — 메뉴바에 머물고, 바꾸기 전에 비교하기
개발 발행 7분 읽기
#OpenNoType#개발기#macOS#음성입력#메뉴바#오픈소스
OpenNoType 프로젝트 보기이번 OpenNoType 업데이트는 음성 입력을 쓰기 전과 후의 작은 불편을 줄이는 작업이었습니다. 설정을 바꾸기 전에 결과의 방향을 비교하고, 창을 닫아도 메뉴바에서 다시 열고, 완성한 문장을 입력하기 직전에 대상을 확인하도록 다듬었습니다. 첫 개발기에서 소개한 내 API 키 기반 음성 입력을 실제로 계속 쓰기 위한 후속 작업입니다.
2026년 10월 7일 기준 공개 다운로드는 v0.2.3입니다. macOS 14 이상 Apple Silicon Mac을 지원하며, GitHub에서 커뮤니티 배포본을 받을 수 있습니다. 최근 메인 코드의 실험 기능과 공개 다운로드에 포함된 기능은 구분해서 안내합니다. 버전별 다운로드 (새 창)
이름만 고르기 어려워서 예시부터 보여 주었습니다#
받아쓰기 표현에는 현재 받아쓰기·간결하게·핵심 요약·명확하게·자세하게·창의적으로, 여섯 가지 방향이 있습니다. 이름과 설명만 보고 고르면 ‘간결하게’와 ‘핵심 요약’이 얼마나 다른지 가늠하기 어렵습니다. 그래서 같은 발화를 각 방향으로 정리한 예시를 나란히 비교하는 화면을 추가했습니다.
비교 화면에서 다른 방식을 눌러도 실제 설정은 바뀌지 않습니다. 원문과 결과 예시를 읽고 적용 버튼을 눌러야 저장되며, 닫기나 Escape로 나오면 기존 설정을 유지합니다. 적용할 강도를 미리 표시하고, 바뀐 설정은 다음 받아쓰기부터 사용합니다. 예시를 살펴보던 행동이 다음 녹음의 결과를 조용히 바꾸지 않도록 한 것입니다.
예시는 방향을 설명하기 위해 미리 작성한 고정 합성 문장입니다. 화면을 여는 데 녹음이나 AI 호출은 필요하지 않습니다. 실제 출력은 말한 내용과 모델, 편집 강도에 따라 달라집니다. 강도 0~100도 정확도 점수가 아니라 얼마나 적극적으로 표현을 바꿔 달라고 요청할지 나타내는 값입니다. 기본은 현재 받아쓰기·강도 0이며, 번역과 선택 문장 음성 수정은 별도의 처리 기준을 사용합니다. 표현 방식 안내 (새 창), 예시 비교 구현 (새 창)
메뉴바 아이콘이 앱으로 돌아오는 길이어야 했습니다#
음성 입력은 다른 앱에서 글을 쓰는 동안 쓰는 도구입니다. Dock에 아이콘을 계속 두기보다 메뉴바에서 상태를 보고, 필요할 때 설정·기록·사용량을 여는 흐름으로 정리했습니다. 공개 v0.2.3에는 Dock에 앱 아이콘을 두지 않는 메뉴바 중심 정책이 포함돼 있습니다.
아이콘을 숨기는 설정만으로는 충분하지 않았습니다. 창을 닫아도 메뉴바의 진입점은 남아 있어야 하고, 메뉴를 다시 열었을 때 현재 상태를 보여 줘야 합니다. 상태 아이콘을 앱이 실행되는 동안 직접 보관하고, 메뉴를 열 때 항목을 갱신하도록 구성했습니다. 받아쓰기·번역·선택 수정, 작업 취소, 앱 열기, 사용량과 설정을 이 메뉴에서 이어 갈 수 있습니다. 공개 버전의 메뉴바 구현 (새 창)
문장이 완성된 시점과 입력하는 시점은 다릅니다#
음성 인식과 문장 정리가 끝나는 사이에 사용자는 커서를 움직이거나 다른 앱으로 이동할 수 있습니다. 녹음을 시작할 때 읽은 입력란 상태만 믿고 결과를 확인하면, 이미 달라진 텍스트를 기준으로 성공 여부나 교정 학습을 판단할 수 있습니다.
이번 안정성 수정에서는 실제로 입력하기 직전에 대상과 텍스트 상태를 다시 읽고, 그 상태를 기준으로 결과를 확인하도록 보완했습니다. 클립보드 준비 뒤 사용자가 새 내용을 복사했다면 그대로 붙여넣지 않고 중단합니다. 선택 문장 음성 수정에서는 기존 문장과 선택 범위가 유지되는지도 확인합니다. 이는 모든 앱의 입력 성공을 보장하는 기능이 아니라, 작업 도중 바뀐 상태를 잘못 사용하지 않기 위한 처리입니다.
설정과 검토 화면의 안정성도 함께 손봤습니다. Jev 모델 비교에서 편집 중인 사례를 삭제하거나 순서를 바꿔도 다른 사례를 수정하지 않도록, 배열의 위치 대신 사례의 고유 식별자로 편집 대상을 찾습니다. 암호화 저장소의 최초 초기화에는 기준 파일을 먼저 남겨 복구 판단의 출발점을 마련했습니다. 눈에 잘 띄지 않는 수정이지만, 계속 쓰면서 기록과 편집 상태를 지키는 데 필요한 작업입니다. 안정성 수정 커밋 (새 창)
평소 단축키로 번역하고, 원문과 비교하기#
공개 0.2.2에서 추가한 받아쓰기 출력 언어 선택은 0.2.3에도 포함됩니다. 말한 언어 유지·영어·일본어·한국어 중에서 고르면 평소 받아쓰기 단축키로 번역 입력까지 이어집니다. 별도 번역 단축키는 자체 목표 언어를 유지합니다. 최근 결과와 기록에는 인식 원문, 번역, 당시 출력 언어를 남겨 나중에 설정을 바꿔도 그 결과가 어떤 언어로 만들어졌는지 확인할 수 있습니다.
번역에는 요약·창작 강도를 적용하지 않습니다. 자연스러운 문장으로 옮기면서도 숫자·이름·조건·부정과 부탁의 강도를 지키도록 요청합니다. 다만 모델에 따라 오역이나 부자연스러운 표현이 나올 수 있습니다. 0.2.3에서 비교한 새 번역 지침 후보는 목표한 개선을 확인하지 못해 보류했고, 공개 0.2.2의 번역 동작을 유지했습니다. 메인 코드에는 0.2.4의 기본 꺼짐 번역 다듬기 실험 옵션이 있지만, 현재 공개 다운로드의 기능으로 소개하지 않습니다. 공개 번역 기능 안내 (새 창), 현재 개발 상태 (새 창)
배포 파일 확인과 실제 사용 확인을 나누어 기록합니다#
v0.2.3은 Apple 공증 없는 커뮤니티 배포본입니다. 앱의 ad-hoc 코드 서명과 업데이트의 Sparkle Ed25519 서명을 사용하며, macOS가 첫 실행을 차단할 수 있습니다. 설치 과정은 저장소의 안내와 Apple의 앱별 수동 허용 절차를 확인해야 합니다.
이번 공개 배포 기록에는 다운로드 파일의 체크섬, 업데이트 서명, DMG와 ZIP 안의 앱 일치 여부, 빌드와 자동 검사 결과를 남겼습니다. 이 검증은 파일과 코드에 관한 근거입니다. 자연 발화의 품질이나 모든 대상 앱에서의 입력 성공까지 뜻하지는 않습니다. 사용자 마이크와 실제 작성 앱에서의 경험은 별도로 확인하며, 확인한 범위와 남은 범위를 검증 문서 (새 창)에 이어 기록합니다.