본문으로 건너뛰기

CatchCatch

핵심기능 아홉 가지를 정한다 · v1.0.1.0 계획

세 판을 만들고 나서 개발 방향을 정한다. 본편 화면의 핵심기능 칸이 아홉 개이므로, 무엇을 핵심기능으로 둘지 후보를 모으고 기준을 세워 아홉으로 줄인다. 이 회차는 코드를 쓰지 않고, 다음 판에서 무엇을 먼저 만들지를 정한다.

2026. 09. 29

목적

앞으로 만들 기능의 우선순위를 정한다. 본편에 실을 핵심기능 아홉 가지를 정하고, 판마다 무엇을 넣을지 배정한다.

계획

  1. 후보 기능을 빠짐없이 늘어놓는다
  2. 고르는 기준 세 가지를 세운다
  3. 기준으로 후보를 판정해 아홉을 남긴다
  4. 남긴 아홉을 판에 배정한다
  5. 장치 없는 환경에서 각 기능을 어떻게 시험할지 적는다

체크리스트 5/7

항목 상태 비고
후보 열여섯 가지 정리 완료
기준 셋(쓰임, 기본기, 시험 가능성) 완료
핵심기능 아홉 확정안 완료
판 배정안(v1.0.1.0~v1.2.0.0) 완료
기능별 시험 방법 완료
확정안에 대한 결정 미완 사용자 판단 대기
본편 핵심기능 절을 아홉으로 다시 쓰기 미완 확정 뒤

1. 왜 아홉인가

1판부터 3판까지는 있어야 할 기능을 채우는 순서로 만들었다. 1판은 녹화와 녹음을 동작하게 하였고, 2판은 소리와 영상이 어긋나는 결함을 고쳤고, 3판은 기존 녹화·녹음 프로그램에 있는 기본 기능을 세어 채웠다. 그 결과 기능이 열여덟 항목이 되었고, 다음에 무엇을 만들지가 정해져 있지 않다.

본편 화면은 핵심기능을 3열 카드로 그린다. 지금 본편에는 일곱 개가 있어 마지막 줄이 비어 있다. 아홉을 채우면 3×3 이 된다. 칸을 채우기 위해 아홉을 고르는 것이 아니라, 아홉이라는 수를 정해 두면 무엇이 핵심이고 무엇이 부수적인지를 가르는 기준이 필요해진다. 이 회차에서는 그 기준을 세우고 후보를 판정한다.

2. 후보

세 판에 이미 들어간 것과 개발일지의 「남은 일」에 적어 둔 것, 그리고 이 프로그램의 쓰임에서 나오는 것을 모두 늘어놓았다. 열여섯이다.

번호 후보 어디서 나왔나 지금 상태
1 화면 녹화(모니터·영역) 1판 있음
2 창 녹화(따라가기) 3판 있음
3 음성 녹음(마이크·시스템 소리) 1판 있음
4 버전표시(marker) 파일 저장 1판 있음
5 파일 이름 규칙 1판 있음
6 미니 제어 막대·자기 창 제외·초 읽기·자동 정지 3판 있음
7 클릭 강조·마우스 커서 2판, 3판 있음
8 하드웨어 인코더 자동 탐지 3판 있음
9 스크린샷 3판 있음
10 예약 녹화(정한 시각에 시작·정지) 회의 시간표에서 나온 요구 없음
11 회의 전사(음성을 글로) 1판의 「왜 만드는가」 없음
12 녹화 중 그리기(펜) 3판 「남은 일」 없음
13 자르기와 내보내기(구간 자르기, MP3 추출, GIF) 버전표시의 쓰임에서 나온 요구 없음
14 버전표시를 MP4 챕터로 넣기 4번의 확장 없음
15 웹캠 덧붙이기 3판 비교표 없음
16 방송 송출·장면 전환 3판 비교표 없음

3. 기준

세 가지 기준으로 판정하였다. 세 기준을 모두 만족하는 것만 핵심기능에 둔다.

첫째, 쓰임에 닿는가. 이 프로그램의 쓰임은 강의 기록과 회의 전사다. 1판에서 직접 만들기로 한 이유가 파일 이름 규칙과 버전표시였고, 둘 다 회의를 기록한 뒤 전사하는 일에서 나왔다. 기능이 이 쓰임에 직접 닿지 않으면 핵심이 아니다.

둘째, 기본기인가. 3판의 기준은 기존 프로그램보다 못하지 않은 것이었다. 기존 녹화·녹음 프로그램의 사용자가 당연히 기대하는 것은 핵심에 두고, 있으면 좋은 것은 주요기능 표에 둔다.

셋째, 시험할 수 있는가. 개발 환경에는 카메라와 마이크가 없다. 1판부터 가짜 화면과 사인파로 엔진을 시험해 왔다. 장치 없이 시험할 방법이 없는 기능은 만들어도 확인할 수 없으므로 핵심에 두지 않는다.

4. 판정

후보 쓰임 기본기 시험 판정 사유
1 화면 녹화 O O O 핵심 프로그램의 절반이다
2 창 녹화 O O O 핵심(1과 합침) 원천의 한 종류이므로 화면 녹화 한 칸에 넣는다
3 음성 녹음 O O O 핵심 프로그램의 나머지 절반이다
4 버전표시 O X O 핵심 기존 프로그램에 없지만 이 프로그램을 만든 이유다. 기본기 기준의 예외로 둔다
5 파일 이름 규칙 O X O 핵심 4와 같은 이유다
6 녹화 중 제어 O O O 핵심 미니 막대, 단축키, 초 읽기, 자동 정지, 자기 창 제외를 한 칸으로 묶는다
7 클릭 강조·커서 △ O O 주요기능 강의 녹화에 쓰이지만 없어도 기록은 된다
8 하드웨어 인코더 △ O △ 주요기능 있으면 가볍지만 결과물이 달라지지 않는다. 실제 GPU 없이는 시험이 반쪽이다
9 스크린샷 △ O O 주요기능 부수 기능이다
10 예약 녹화 O O O 핵심 회의 시간표대로 자리를 비워도 기록이 남는다. 시계만 있으면 시험된다
11 회의 전사 O X O 핵심 쓰임의 끝이 전사다. 시험은 합성 음성 파일로 한다
12 그리기(펜) O △ O 핵심 강의 녹화의 판서다. 마우스 이동을 흉내 내어 시험한다
13 자르기·내보내기 O △ O 핵심 버전표시 구간으로 자르는 것이 전사와 이어진다. ffmpeg 만으로 시험된다
14 MP4 챕터 O X O 핵심(4에 합침) 버전표시 칸의 확장이다
15 웹캠 △ O X 제외 카메라가 없어 시험할 수 없다
16 방송·장면 전환 X X X 제외 목적 밖이다

기본기 기준에 예외를 둔 것은 4번과 5번이다. 두 기능은 기존 프로그램에 없어서 기본기가 아니지만, 이 프로그램을 만든 이유이므로 핵심에서 뺄 수 없다. 기준을 세 가지로 두되 「만든 이유」는 기준보다 앞에 둔다.

5. 핵심기능 아홉

번호 핵심기능 하는 일 상태
1 화면 녹화 모니터 전체, 끌어서 고른 영역, 특정 창(움직여도 따라감)을 MP4 로 기록한다 있음
2 음성 녹음 마이크와 시스템 소리를 함께 MP3·M4A·WAV 로 기록한다 있음
3 버전표시(marker) 녹화·녹음 중 단축키로 시각과 메모를 찍고 결과 파일 곁에 txt·csv 로 남긴다. MP4 챕터로도 넣는다 있음, 챕터는 다음 판
4 파일 이름 규칙 연도(0000).월(00).일(00)., 시간(00).분(00)., 주석.확장자 로 저장한다 있음
5 녹화 중 제어 미니 제어 막대, 전역 단축키, 초 읽기, 자동 정지, 자기 창 제외 있음
6 예약 녹화 정한 시각에 시작하고 정한 시각에 멈춘다 다음 판
7 회의 전사 녹음 파일을 PC 안에서 음성 인식으로 글로 바꾸고, 버전표시 시각을 전사문에 표시로 끼운다. 소리를 밖으로 보내지 않는다 다음 판
8 그리기와 강조 녹화 중 화면 위에 펜으로 판서하고, 클릭 강조를 확장한다 다음 판
9 자르기와 내보내기 버전표시 구간으로 잘라내고, MP4 에서 MP3 를 뽑고, 짧은 구간을 GIF 로 만든다. 다시 인코딩하지 않는다 다음 판

6. 판 배정

네 자리 판 번호에서 셋째 자리를 기능 추가에 쓴다. 한 판에 핵심기능 하나를 넣는다. 전사는 음성 인식 모델 파일이 커서 실행 파일과 따로 내려받게 해야 하므로 뒤에 둔다.

판 넣는 것 함께 넣는 것
v1.0.1.0 예약 녹화 버전표시를 MP4 챕터로
v1.0.2.0 자르기와 내보내기
v1.1.0.0 회의 전사 모델 파일 내려받기 안내
v1.2.0.0 그리기와 강조

7. 시험 방법

장치가 없는 환경에서 각 기능을 확인하는 방법을 미리 적어 둔다. 시험 방법이 없는 기능은 만들지 않는다.

기능 시험 방법
예약 녹화 시계를 가짜로 바꿔 예약 시각을 몇 초 뒤로 두고, 시작·정지 시각이 예약과 1초 안에 맞는지 잰다
MP4 챕터 버전표시 세 개를 찍은 결과를 ffprobe 로 읽어 챕터 수와 시각이 같은지 본다
자르기·내보내기 enginetest 의 3초 영상을 버전표시 구간으로 잘라 길이를 재고, MP3 추출과 GIF 의 스트림을 ffprobe 로 확인한다
회의 전사 글을 합성 음성으로 읽힌 WAV 를 넣어 전사문이 원문과 얼마나 같은지(문자 오류율)를 잰다
그리기와 강조 가짜 마우스 이동을 넣어 프레임에 선이 그려지는지 화소를 센다

8. 남은 결정

아홉 가지 확정안과 판 배정안은 사용자의 결정을 기다린다. 결정되면 본편의 핵심기능 절을 아홉으로 다시 쓰고, 다음 판의 폴더를 만들어 예약 녹화부터 시작한다.

ABOUT AUTHOR

shind

shind

소개글이 아직 없습니다.

댓글 남기기

Your email address will not be published. Required fields are marked *