오늘 해낸 것 (2026-07-26)
이 글은 Daily Log 시리즈의 113번째 기록입니다. (총 119개)
오늘 한 일
- 모래게임 Sandrop
- 도안 풀을 크게 늘림 — 미보유 이모지를 받아 재양자화해 풀을 넉넉히 하고, 실루엣이 안 읽히는 기호류(별자리·화살표·미디어 컨트롤·사람 픽토그램 등)는 뷰어로 골라 제외
- 상점 정리 — 우상단에 하트도 코인처럼 함께 표시, 탭 순서를 상점·홈·설정으로, 인앱결제(스타터 번들·광고 제거)는 출시 후로 미뤄 숨김
- 튜토리얼을 하나의 표준 형태로 통일 — 화면을 어둡게 덮고 배울 대상만 밝히고 안내를 캔버스 위에 띄우게. 로프·물음표·얼음·열쇠·아이템 튜토리얼이 전부 같은 모양
- 기믹 데뷔 간격을 100으로 균일하게 (로프 51·물음표 151·얼음 251·열쇠 351)
- 잘못 들어가 아무것도 안 하고 나가면 입장 하트를 돌려주게
- 디버그에서 튜토리얼을 이미 깬 레벨에서도 다시 재생하게
- frozen에 실제 얼음 이미지(ice.png)를 붙임 — 계획했던 불투명 얼음 asset 완성
- 난이도가 왜 어긋나는지 파고들어, 도안을 슬롯에 넣기 전에 실제 난이도를 재서 맞는 자리에 배정하도록 바꿈(측정 후 배치). 색은 안 뭉개고 벽·기믹으로 조절, 슬롯보다 어려운 판은 정직하게 라벨
- 콘티온 Conti On
- 자막 템플릿 편집기 다듬기 — 글꼴 등록을 설치된 글꼴에서 골라 넣게(불러오면 이름 칸을 강조), 태블릿에서 설정이 미리보기에 가리던 걸 좌(미리보기+수정 기록)·우(설정) 2분할로, 그라데이션 막대 폭을 열 폭에 맞게, 좁은 열에서 폼 행이 한 줄로 읽히게
- 예배 순서지로 확장 착수 — 자막 담당자가 곡뿐 아니라 예배 순서 전체 자막을 만들 수 있게. 곡 콘티(찬양팀)와 예배 순서지(방송실)를 별개 컨테이너로 나누고, 순서지가 곡 콘티를 통째로 가져가게(배치는 복사, 가사는 계속 공유)
- 카테고리를 2단계(찬양/순서)로 — 콘티 화면엔 찬양 하위만, 순서지엔 순서 하위만. 승인도 대분류로 갈라 곡은 곡 관리자, 순서는 자막 담당자에게. 항목이 0개인 카테고리는 고르는 목록에서 자동으로 숨김
- 순서지 화면 용어를 자막에 맞게 — ‘곡→자막’, ‘가사→내용’, 항목을 [구분] 제목으로, 안 쓰는 찬송가 번호 칸은 숨김, ‘기타’ 구분 추가
- 소리꽃 KeyBloom
- 파티클·건반의 광택(표면 반짝임)과 발광(위로 뻗는 빛)을 분리하고, 발광을 켜기·크기·(건반)밝기로 세분
- 파티클을 발광 영역 상자 안에 가두는 옵션 추가 — 폭·높이 둘 다
- 나선형과 나선 기둥을 “나선” 하나로 합치고 회전 반경·퍼짐·코일 간격 슬라이더로 — 토네이도·기둥은 이 값들의 프리셋
- 코일 간격이 상승 속도와 얽히던 걸 공간 회전으로 풀어 독립 조절 가능하게, 중복이던 회전 속도 슬라이더는 제거
- 웹 광고를 정적 스니펫으로 정리, 네이티브용 자체 광고(하우스 광고) 시스템을 설계 문서화
- 온실 GreenHouse (신규)
- 앱들이 서로와 블로그를 홍보하는 자체 광고 시스템을 독립 프로젝트로 시작 — 내부 코드명 HouseAd, 브랜드는 온실 GreenHouse
- 블로그에 얹을지 고민하다 분리로 확정 — 광고 데이터는 블로그 글이 아니라 여러 앱이 공유하는 인프라라, 배포가 가볍고 실시간 반영으로 키우기도 좋은 쪽으로
- 광고 데이터 규약(ads.json)과 250×250 배너 편집기, CORS 설정까지 레벨 1 구현 완료. 첫 광고는 블로그 홈 텍스트 카드 1건
- GitHub repo 생성·연결, 폴더·표기를 GreenHouse로 통일
어려웠던 점
- 튜토리얼이 제각각이었다 — 보드 튜토리얼은 게임판만 어두워지고 아이템 튜토리얼은 아이템 바 전체가 밝아지는 식으로 형태가 달랐다. 하나의 표준 컴포넌트로 묶어서, “무엇을 강조할지와 문구”만 주면 화면 dim·강조·안내가 공통으로 나오게 정리했다. 나중에 새 튜토리얼도 분기 하나만 추가하면 된다
- 기믹 데뷔 간격이 50/100/50이라 들쭉날쭉했다. 100으로 균일하게 맞추니 기믹이 후반까지 고르게 나와 신선함이 오래 간다. 대신 crazy 관문과 밀도 곡선도 같이 밀어야 했다
- 도안을 솎아내니 500레벨에 모자랐다. 로컬 이모지가 이미 다 등록돼 있어 더 못 늘리는 줄 알았는데, 단일 코드포인트 이모지 중 미보유분을 받아 채웠다
- 한복이 “매우 어려움”인데 손쉽게 깨졌다. 왜 이 도안이 그 난이도로 갔는지 파고드니, 도안 겉모습(색이 층층이 얼마나 엇갈리나)으로 난이도를 추측하던 게 실제와 자주 어긋났다. 도안마다 봇을 실제로 돌려 난이도를 재고 그 값에 맞는 자리에 넣게 바꿨다. 너무 어려운 도안은 색을 줄이면 쉬워지지만 그림이 뭉개져서, 색은 그대로 두고 벽·기믹으로 조절하고 슬롯보다 어려운 판은 정직하게 라벨을 올렸다
- (콘티온 Conti On) 자막 담당자가 “곡 말고 일반 자막도 만들고 싶다”고 해서, 재사용 라이브러리로 공유할지 콘티에서 고친 게 바로 반영되게 할지 정해야 했다. 둘 다 필요해서 “배치(어떤 자막을 어떤 순서로)는 복사, 내용(문구)은 공유”로 갈랐다. 순서지가 곡 콘티를 가져가도 가사 수정은 그대로 따라오되, 방송실이 순서를 바꿔도 찬양팀과 안 엉킨다. 처음엔 참조로 생각했는데 자막 담당자가 순서지를 소유하는 상위 역할이라 복사가 맞았다
- (콘티온 Conti On) 로컬 로그인이 막혀 순서지 실동작 확인은 다음으로 미뤘다. 자막 담당자 쪽 준비가 안 돼 오늘은 여기까지
- (소리꽃 KeyBloom) 나선의 “코일 간격”을 넓히려는데 계속 엉뚱하게 나왔다. 코일 간격·회전 속도·상승 속도가 하나의 식으로 묶여 있어서 셋을 동시에 마음대로 못 한다는 걸 여러 번 부딪히며 이해했다. 회전을 “오른 높이” 기준으로 바꾸니 코일 간격이 상승과 분리됐고, 알고 보니 회전 속도 슬라이더는 상승 속도와 겹쳐서 뺐다. 슬라이더를 늘리는 게 답인 줄 알았는데 오히려 중복을 덜어내는 게 정리였다
- (소리꽃 KeyBloom) 웹 광고가 자동으로 안 바뀌길래 우리 문제인 줄 알았는데, 티스토리 등 다른 곳도 같아서 AdFit 자체가 자동 갱신을 안 하는 거였다. 대신 네이티브 앱엔 내 블로그·앱을 홍보하는 하우스 광고를 넣기로 방향을 잡았다
- (온실 GreenHouse) 하우스 광고를 블로그에 얹을지 따로 세울지 판단이 안 섰다. 담당 Claude들에게 같은 질문을 물어 비교해보니, 블로그에 얹는 쪽 장점은 초기 설정 몇 분 절약뿐이고 분리 쪽 장점(가벼운 배포·관심사 분리·확장 경로)은 운영 내내 지속돼 분리로 확정했다
- (온실 GreenHouse) 폴더 이름을 Greenhouse에서 GreenHouse로 바꾸는 게 도구로는 계속 거부됐다. Windows가 대소문자만 다른 이름을 같은 걸로 취급하는 데다 다른 프로그램이 폴더를 잡고 있으면 이름 변경이 안 된다는 걸 알게 됐고, 결국 탐색기에서 직접 바꿨다
배운 점
- (모래게임 Sandrop TIL 15로 정리) 흩어진 UI를 하나의 컴포넌트로 표준화 / 위젯 좌표를 화면 좌표로 변환(RenderBox·GlobalKey) / dim 오버레이를 터치 통과시켜 대상은 그대로 조작 / 규칙 상수를 바꾸면 테스트 fixture도 같이 옮겨야 함
- (모래게임 Sandrop TIL 16으로 정리) 겉모습 추정 대신 봇으로 난이도 실측·지문(crc32) 캐시로 변경분만 재측정 / 헤드룸으로 기믹 많은 후반엔 더 쉬운 도안 / 못 내리는 축(색)은 안 건드리고 벽 양방향·라벨로 / 해금 티어 상한으로 초반 오매핑 차단 / 밀도가 레벨마다라 완벽 예측 불가는 정직하게 인정
- (콘티온 Conti On TIL 5로 정리) 대분류 한 컬럼으로 노출·승인 라우팅 가르기 / NOT NULL DEFAULT로 기존 행 메우기·INSERT OR IGNORE 시드 / 형태 같은 데이터는 테이블 일반화로 재활용 / 컨테이너를 종류(kind)로 나눠 소유 다르게
- (콘티온 Conti On TIL 5로 정리) 배치는 복사(스냅샷)·내용은 공유(song_id) / “끼우기”를 기존 항목으로 펼쳐 넣기 / COALESCE(MAX,-1)로 이어붙이기·COALESCE 서브쿼리로 옛 데이터 fallback
- (콘티온 Conti On TIL 5으로 정리) 자동 정리는 고르는 목록만·입력 폼은 남기기 / 번호 없으면 구분으로 떨어지는 라벨 / 한국어 조사는 문자열 통째로 분기
- (콘티온 Conti On TIL 5로 정리) queryLocalFonts로 설치 글꼴 목록 받기(폭 재기와 다른 방향) / family 중복 접기·정렬 / 강한 권한 API는 좁고 거부될 수 있어 손입력 길 남기기
- (소리꽃 KeyBloom TIL 23으로 정리) 나선형·나선 기둥을 상수 차이(퍼짐)의 프리셋으로 병합 / 코일 간격 = 상승속도÷회전수라 셋이 묶여 독립 불가 / 회전을 시간→공간(오른 높이) 기준으로 바꿔 코일 간격을 상승과 분리 / 중복 파라미터는 늘리지 말고 덜어내기
- (소리꽃 KeyBloom TIL 24로 정리) 가둠 경계를 spawn 시 파티클별 고정·±Infinity 센티넬 / 진동 입력에 하드 클램프는 벽에 붙어 멈칫 / 사인은 끝에서 느려짐·tanh는 포화로 정체 / 진폭 분산이면 벽 도달 시점 흩어져 매끈
- (소리꽃 KeyBloom TIL 25로 정리) 한 파라미터가 두 렌더 효과를 겸하면 효과별로 배선해 분리 / 발광은 세기보다 on/off+크기+밝기 / 굽는 값은 아틀라스 시그니처·그릴 때 값은 재굽기 없이 / normalizeParams로 구버전 유추 하위호환
- (소리꽃 KeyBloom TIL 26으로 정리) 조건부 슬라이더는 onChange+syncers 양쪽 등록 / span 라벨은 .ctl-row label 미적용이라 컨테이너에서 규격화 / AdFit 자동 갱신은 클라이언트에서 안 됨(다른 매체 비교로 진단) / 원격 ads.json fetch면 앱 재빌드 없이 내용 반영
- (온실 GreenHouse TIL 1로 정리) JSON은 언어가 아니라 데이터 형식 / 교차 출처 fetch는 CORS 허락 필요·Cloudflare Pages는 _headers 한 파일 / Blob+URL.createObjectURL로 서버 없이 다운로드·클립보드는 실패 경로 필수 / 사용자 입력은 innerHTML 대신 textContent(XSS) / localStorage 초안 유지 / Windows 대소문자 폴더 rename은 2단계+핸들 잠금 주의
해야 할 일
- 모래게임 Sandrop — 배포 전 디버그 모드 제거, IAP는 출시 후 Play Console 세팅과 함께, 출시 직전 레벨 스냅샷 동결 + 생성기 동결 모드(업데이트가 이미 진행한 레벨을 안 바꾸게 이후 레벨만 추가)
- 콘티온 Conti On — 원격 D1 마이그레이션(0021~0023) 적용 후 배포, 로컬/구글 로그인으로 순서지 실동작 확인, 자막 담당자와 승인 라우팅·자동 정리 점검, 넣은 곡 콘티가 원본 변경 시 재불러오기 안내(옵션)
- 소리꽃 KeyBloom — 자체 광고(하우스 광고) 네이티브 연동(fetch·배너 렌더·시스템 브라우저 열기 — 데이터·편집기는 온실 GreenHouse로 분리됨), 인터페이스 버퍼 낮춰 지연 줄이기, 유료화(결제·라이선스)
- 온실 GreenHouse — 편집기 브라우저 확인, Cloudflare Pages 프로젝트 생성·URL 확정, KeyBloom 핸드오프, 광고에 넣을 앱 목록 정하기
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
|
오늘 해낸 것