이 글은 Daily Log 시리즈의 109번째 기록입니다. (총 119개)

오늘 한 일

  • 여둘까 Office Layout
    • 캐드 파일(.dwg)을 열 수 있는지 알아봄 — 직접 여는 건 포기하고 안내로 정리
    • 파일 선택에서 dwg를 고르면 “무료 뷰어로 PDF 변환 후 올려달라”는 안내가 뜨고 멈추게 함
      • 그전엔 아무 반응 없이 빈 화면이 돼서, 사용자 입장에선 앱이 고장 난 것처럼 보였다
    • 도움말에도 같은 안내를 한 줄 추가
    • DXF는 나중에 지원할 후보로만 남겨둠
  • 소리꽃 KeyBloom
    • 어제 만든 ‘인생의 회전목마’ 미디의 소리를 다듬음 (영상용)
    • 영상 길이를 MIDI와 오디오 중에 고를 수 있게 — 녹음엔 인트로·여운이 있어 대개 오디오가 더 긴데, 지금까지는 무조건 MIDI 길이로 잘려 소리가 끊긴 영상이 나왔다
    • 뽑을 때마다 묻고(곡마다 답이 달라서), 두 선택지에 실제 길이와 고르면 어떻게 되는지를 같이 보여줌. 길이가 거의 같으면 안 물음
  • 모래게임 Sandrop
    • 65레벨까지 직접 해보고 걸린 것들을 정리 — 색이 3개인 판은 무슨 그림인지 알아볼 수가 없었고, 전반적으로 너무 쉬웠다
    • 색이 3개인 도안을 없애고, 색이 4개여도 서로 비슷하면 안 읽힌다는 걸 확인해 색끼리 최소 거리를 기준으로 넣음
    • 난이도 곡선을 3배로 압축 — 예전 200레벨 난이도가 이제 65레벨에
    • 최고 어려움 티어를 만들고 난관이 100레벨마다 한 단계씩 열리게 배치
    • 한국 도안을 19종으로 늘림 (한복은 직접 그려서 넣음). 익숙한 문화 소재를 만나는 반가움을 한국 유저에게 주고 싶어 한국 소재를 늘리고, 도안 풀은 한국·보편 소재 위주로 큐레이션했다 (초밥·라멘·오뎅처럼 한국에서도 일상인 건 남김)
    • 하트 5개를 900코인에 사는 길을 상점과 하트 버튼 양쪽에 만듦
    • 레벨 생성을 병렬로 돌려 500레벨이 80분에서 3분으로
  • 룸톤 Roomtone
    • 기획 문서를 검토해 빈 구멍을 메움 — 파일럿 성공 기준, 음량 정규화, AI 생성물 저작권 시나리오
    • 웹으로 관리·재생을 한 벌 만들어 돌려봄
    • 매장에서 쓸 전용 앱은 Flutter로 결정하고 새로 만듦
      • 이유: 웹 탭으로는 부팅 후 자동 시작, 오프라인 버티기, 기기 1대 제한, 파일 추출 차단을 못 한다
    • 갤럭시와 Windows 양쪽에서 실제로 소리가 나는 것까지 확인. 화면을 꺼도 계속 나옴
    • 관리 화면도 앱 안으로 옮김 — 곡 목록·업로드·태깅·재생목록 편집
      • 이유: 관리를 웹에 남기면 같은 로직이 두 벌이 되고 한쪽만 고쳐 갈린다
    • 곡 올리는 걸 화면에 끌어다 놓는 것으로, 대표 이미지와 곡 길이·등록일을 붙임
    • 무드를 5종에서 12종으로 늘리고, 프롬프트를 나중에 채워도 태그를 뽑을 수 있게 함
    • 재생 화면을 재생목록·새로 등록된 곡·인기있는 곡 세 묶음으로 나누고 이름·장르·무드로 찾게 함

어려웠던 점

  • 여둘까 Office Layout
    • “되냐 안 되냐”보다 “어떤 대가를 치르면 되냐”가 진짜 질문이었다. DWG를 여는 방법 자체는 있었지만, 하나는 도구 전체를 GPL로 묶고 다른 하나는 도면을 서버로 보내야 했다. 둘 다 기능 하나 얻자고 치를 값이 아니라고 판단해서 지원하지 않기로 했다
    • 지원 안 하기로 정하고 나니 그걸 사용자에게 어떻게 전달할지가 남았다. 안 되는 걸 조용히 두면 고장으로 보이니까, 막는 자리에서 다음에 뭘 해야 하는지까지 알려주는 게 맞다고 봤다
  • 모래게임 Sandrop
    • 색을 3개에서 늘렸더니 이번엔 비슷한 색끼리 섞여 나왔다. 하나를 고치면 다른 게 튀어나오는 구간이었고, 결국 “색 수”와 “색 구분”은 따로 봐야 하는 문제였다
    • 색을 억지로 벌려서 풀려다 배경 대비가 깨졌다. 예전에도 같은 시도를 하고 폐기한 기록이 문서에 있었는데 못 보고 다시 밟았다
    • 난이도를 조였는데 오히려 목표보다 훨씬 어렵게 나왔다. 보드를 빽빽하게 만들려고 고정해둔 값이 사실은 생성기가 난이도를 낮출 때 쓰는 유일한 손잡이였다
    • 35분 걸리는 작업을 다섯 번 돌리고 나서야 표본으로 미리 확인하는 도구를 만들었다. 도구를 먼저 만들었어야 했다
    • 병렬로 돌리는 건 반나절 걸릴 줄 알았는데 30분이면 됐다. 미루는 동안 기다린 시간이 더 길었다
    • 눈으로 잡아낸 게 많았다. 바구니 칸이 6개로 뜬 것, 난이도 배지가 안 보인 것 — 둘 다 테스트는 전부 통과하고 있었다
  • 소리꽃 KeyBloom
    • 오디오 길이를 고르게 만들었더니 실시간 녹화가 끝나지 않았다. 재생 시간이 MIDI 길이에서 멈추게 되어 있어 그보다 뒤인 오디오 끝에는 닿지 못한 탓인데, 조건만 봐서는 안 보이고 실제로 뽑아봐야 드러나는 종류였다
  • 룸톤 Roomtone
    • 웹으로 갈지 전용 앱으로 갈지 하루 종일 저울질했다. 결론이 안 나서 같은 시장의 라임덕이 어떻게 하는지까지 찾아봤는데, 웹 플레이어를 앞세우면서 윈도우 설치형도 따로 두고 있었다. 결국 둘 중 하나가 아니라 순서 문제였다는 게 정리되면서 웹부터 하고 전용 앱을 얹기로 방향이 잡혔다
    • 전용 앱 프레임워크를 고르는 데 시간이 걸렸다. 처음 들어보는 선택지까지 놓고 비교했는데, “이미 만든 걸 재사용한다”는 이유가 실제로는 250줄짜리라 판단 근거로 약했다. 익숙한 걸 쓰는 게 낫다고 보고 Flutter로 정했다
    • 음원을 파일째 빼가는 걸 막을 수 있느냐가 판단의 핵심이었다. 웹에서 그 수준을 맞추려면 큰 서비스들이 쓰는 DRM이 필요한데 지금 규모엔 과하고, 전용 앱이면 훨씬 싸게 된다는 걸 알고 나서 방향이 굳었다
    • 앱에서 백스페이스가 안 먹어 글자를 지울 수가 없었다. 한글 입력기와 얽힌 프레임워크 버그였고, 버전을 올려서 해결했다

배운 점

  • (여둘까 Office Layout TIL 5로 정리) accept 속성은 강제가 아니라 필터 / file.type은 비어 올 수 있음 / FileReader는 내용을 판단하지 않아 실패가 조용함 / GPL-3.0은 정적 웹앱 전체로 전염 / DXF는 공개 텍스트 규격이라 단위까지 읽힘 / 막는 메시지엔 다음 행동을 넣기 / 안 하기로 한 결정도 근거까지 문서에 남기기

  • (소리꽃 KeyBloom TIL 18로 정리) 모달을 Promise로 감싸면 호출부가 await 한 줄이 된다 / 실수값 비교는 “다른가”가 아니라 “사람이 신경 쓸 만큼 다른가”로 / 값을 상한에서 고정하는 코드가 있으면 그보다 뒤를 가리키는 조건은 영원히 참이 안 된다 / 임시 상태는 끝나는 경로 수만큼 정리 지점이 필요하다

  • (룸톤 Roomtone TIL 1로 정리) R2는 프리사인 URL이 없어 Worker가 문지기가 된다 / 오디오는 Range 요청을 처리해야 제대로 논다 / 서명 검증에서 깨진 입력이 403 아닌 500을 만들 수 있다 / Secure 쿠키는 브라우저 밖에서 자동으로 안 실린다 / just_audio는 데스크탑 구현이 없어 빌드는 되고 실행에서 죽는다 / 화면 꺼도 재생하려면 포그라운드 서비스 / 재생 컨트롤러는 화면이 아니라 셸이 들어야 탭 이동에 안 끊긴다 / 윈도우 개발자 모드가 꺼져 있으면 플러그인 빌드가 막힌다 / Git Bash에서 curl로 한글을 넘기면 깨진다 / adb reverse로 방화벽 안 열고 폰에서 PC 서버에 붙는다 / 음량은 재생할 때가 아니라 올릴 때 파일에 굽는 게 단순하다 / 키워드 매칭은 단어의 역할을 못 본다

  • (모래게임 Sandrop TIL 11로 정리) 색 수와 색 구분은 별개 문제 / 목표를 채울 때까지 기준을 푸는 적응형 재시도 / 색을 벌리면 배경 대비가 깨짐 / 작업이 독립이면 코어 수만큼 빨라짐 / 시드를 작업 번호에서 뽑으면 순서가 섞여도 결정성 유지 / “시도”와 “채택”을 구분 안 하면 자원 회계가 깨짐 / Flexible은 넘침을 막는 대신 자식을 0까지 누름 / Stack은 자기 영역 밖 탭을 자식에게 안 줌 / 느린 파이프라인엔 표본 미리보기를 먼저 / 게임 상수는 안전망에서도 양보 금지

해야 할 일

  • 모래게임 Sandrop — 직접 그린 도안 5종 색 조정, 게임 화면 코드 분리, 배포 전 디버그 모드 제거

  • 여둘까 Office Layout — DXF 열기 지원 검토(축척 자동 인식까지), 안내 문구 실제 브라우저에서 확인
  • 소리꽃 KeyBloom — 알파를 편집툴이 읽는 형식으로(네이티브 ProRes 4444), 4K 구매 유도, 라이브 모드
  • 룸톤 Roomtone — 음원 암호화로 파일 추출 막기, 시간대별 재생목록 자동 전환, 기기 1대 제한, 부팅 시 자동 시작, 음량 정규화를 업로드 단계로 옮기기

Series: Daily Log

1 오늘 해낸 것 2 오늘 해낸 것 3 오늘 해낸 것 4 오늘 해낸 것 5 오늘 해낸 것 6 오늘 해낸 것 7 오늘 해낸 것 8 오늘 해낸 것 9 오늘 해낸 것 10 오늘 해낸 것 11 오늘 해낸 것 12 오늘 해낸 것 13 오늘 해낸 것 14 오늘 해낸 것 15 오늘 해낸 것 16 오늘 해낸 것 17 오늘 해낸 것 18 오늘 해낸 것 19 오늘 해낸 것 20 오늘 해낸 것 21 오늘 해낸 것 22 오늘 해낸 것 23 오늘 해낸 것 24 오늘 해낸 것 25 오늘 해낸 것 26 오늘 해낸 것 27 오늘 해낸 것 28 오늘 해낸 것 29 오늘 해낸 것 30 오늘 해낸 것 31 오늘 해낸 것 32 오늘 해낸 것 33 오늘 해낸 것 34 오늘 해낸 것 35 오늘 해낸 것 36 오늘 해낸 것 37 오늘 해낸 것 38 오늘 해낸 것 39 오늘 해낸 것 40 오늘 해낸 것 41 오늘 해낸 것 42 오늘 해낸 것 43 오늘 해낸 것 44 오늘 해낸 것 45 오늘 해낸 것 46 오늘 해낸 것 47 오늘 해낸 것 48 오늘 해낸 것 49 오늘 해낸 것 50 오늘 해낸 것 51 오늘 해낸 것 52 오늘 해낸 것 53 오늘 해낸 것 54 오늘 해낸 것 55 오늘 해낸 것 56 오늘 해낸 것 57 오늘 해낸 것 58 오늘 해낸 것 59 오늘 해낸 것 60 오늘 해낸 것 61 오늘 해낸 것 62 오늘 해낸 것 63 오늘 해낸 것 64 오늘 해낸 것 65 오늘 해낸 것 66 오늘 해낸 것 67 오늘 해낸 것 68 오늘 해낸 것 69 오늘 해낸 것 70 오늘 해낸 것 71 오늘 해낸 것 72 오늘 해낸 것 73 오늘 해낸 것 74 오늘 해낸 것 75 오늘 해낸 것 76 오늘 해낸 것 77 오늘 해낸 것 78 오늘 해낸 것 79 오늘 해낸 것 80 오늘 해낸 것 81 오늘 해낸 것 82 오늘 해낸 것 83 오늘 해낸 것 84 오늘 해낸 것 85 오늘 해낸 것 86 오늘 해낸 것 87 오늘 해낸 것 88 오늘 해낸 것 89 오늘 해낸 것 90 오늘 해낸 것 91 오늘 해낸 것 92 오늘 해낸 것 93 오늘 해낸 것 94 오늘 해낸 것 95 오늘 해낸 것 96 오늘 해낸 것 97 오늘 해낸 것 98 오늘 해낸 것 99 오늘 해낸 것 100 오늘 해낸 것 101 오늘 해낸 것 102 오늘 해낸 것 103 오늘 해낸 것 104 오늘 해낸 것 105 오늘 해낸 것 106 오늘 해낸 것 107 오늘 해낸 것 108 오늘 해낸 것 109 오늘 해낸 것 읽는 중 110 오늘 해낸 것 111 오늘 해낸 것 112 오늘 해낸 것 113 오늘 해낸 것 114 오늘 해낸 것 115 오늘 해낸 것 116 오늘 해낸 것 117 오늘 해낸 것 118 오늘 해낸 것 119 오늘 해낸 것