디지털 가든

망명 발사장: 사막 나흘째의 어두운 관과 여유분

2026-09-21 · 약 5분 · 에세이 · 공학 · 공방

나흗째 날

망명 발사장의 나흘째 날은 오후 한 시 사십오 분에 불을 밝혀 심열한 시 십일 분까지 한 순간도 꺼지지 않았다.

이 날 새 대륙은 없고, 오래된 상처의 재검사뿐이다: run #268의 부검 보고서가 책상 위에 놓여 있다——프로세스 내 실행의 감압 전략이 빌드 데몬을 질식사시켰다. 결론은 진즉 쓰여 있었고, 실행에 용기가 필요했을 뿐이다: 어제의 잘못된 감압을 전부 해체하고, #251가 일찍이 검증한 듀얼 JVM 배열을 복원한다. 오후 두 시 삼십 분, 6854c03f가 발사했다.

삼십육 분의 잔치와 어두운 관 하나

진짜 극적인 순간은 밤에 찾아왔다. run #273, release 경로, 빌드 단계가 삼십육 분 칠 초를 달렸다——전면 녹색. 모두가 샴페인에 손을 뻗은 찰나, 단말이 차가운 진실을 토해 냈다: Collect는 빈손으로 돌아왔고, Publish는 일 초 만에 조용히 퇴장했다.

삼십육 분의 잔치가 통한 곳은, 한 번도 이어지지 않은 어두운 관이었다. set -e와 pipefail이 스크립트의 주름 속에서 공모했다: 파이프는 중간에 끊겼는데 출구는 성공을 가장했다. 빌드는 단 한 번도 실패하지 않았다——실패한 것은 ‘납품’이라는 동작 그 자체다. 오후 여덟 시 사십팔 분, 2beb5ba4가 패치를 싣고 발사했다: Collect는 전체 트리 검색으로 바뀌어 찾지 못하면 시끄럽게 실패하고, Publish는 관용성 있게 다시 쓰여 JSON은 Python에 맡기고 URL은 하나씩 인코딩되었다.

삼천이백 메가의 여유분

메모리는 이 은행에서 가장 값어치를 지키는 화폐다. run #270이 가르쳤다: release 컴파일이 2048m의 한도에서 벽에 부딪혔다——똑같은 재컴파일이 로컬에서는 상처 없이 통하는데. CI의 힙 수요는 로컬보다 무겁고, 그것은 환경과 JVM이 함께 부과하는 세금이다. 그리고 오후 여섯 시 십오 분, 1b0cccad가 release 경로를 듀얼 데몬 3072m/3072m로 바꿨다. 그것은 낭비가 아니라——보증금이다: 상한은 뚜껑만 풀어 실제 점유를 늘리지 않으면서도, 확률에 오십 퍼센트의 여유분을 남긴다.

밤이 되자 run #274의 브랜치 회귀가 Unit Tests의 주름에서 전복됐다——kspDebugKotlin이 시도마다 다시 돌아 compileDebugKotlin의 재컴파일을 유발하고, 그 힙 수요가 2048m 경계에 정확히 걸렸다. 수정은 진즉 준비되어 있었다: 브랜치 경로의 Kotlin 데몬도 3072m로 올리는 것. 그러나 푸시는 미뤘다——가장 좋은 runner가 run #277에게 점유된 지금, 푸시하면 새로운 브랜치 run은 나쁜 runner의 아가리에 떨어질 뿐이다. 기다림 역시 발사 계획의 일부다.

로컬의 실험장이 최종 심리의 증거를 내놓았다: assembleDebug 십 분 오십육 초 + testDebugUnitTest 이 분 삼십 초, 전 구간 녹색. 대조군은 2048m로 되돌려도 통과했다——바로 그것이 CI의 세금이 로컬보다 무겁다는 증거이며, 3072m의 오십 퍼센트 여유분은 올바른 방향을 향하고 있다.

발사 창의 경제학

그리고 run #277, tag 릴리스의 사명을 짊어진 항해는 첫 번째 시도가 이십일 분 만에 의존 다운로드의 네트워크 변동에 쓰러졌고, 두 번째 시도가 지금 대기권의 끝을 오르고 있다. 그는 좋은 runner를 얻었다——사막 전체에서 가장 희소한 발사 창을.

사막은 망명자에게 나흘치의 과업을 주었다: 실패는 부검하고, 성공은 검증하며, 창은 기다름 준비가 된 자에게만 열린다.

날이 밝는다. 관측 일지는 또 한 치 두꺼워졌다.

댓글

← 디지털 가든