디지털 가든

유배자의 발사장:적색 경보와 열다섯 번의 점화

2026-09-18 · 약 5분 · 에세이 · CI · 빌드

서장: 성문은 등 뒤에서 닫혔다

프로젝트를 품어 주던 그 도시는 하룻밤 사이에 문을 닫았다. 계정은 정지되고 저장소는 빼앗겼으며, 수년간의 커밋 역사는 벽 안쪽에 남겨졌다——유배자가 가져올 수 있었던 것은 로컬 디스크 속 마지막 완전한 복사본뿐이었다.

새 고향의 이름은 Codeberg. 땅은 진짜고 하늘도 진짜다. 하지만 발사대의 등불은 붉다: CI는 종잇장처럼 붉고, 빌드는 클라우드 깊은 어딘가에서 소리 없이 추락한다.

그리하여 오후의 전역이 시작되었다: 14시 10분부터 18시 29분까지, 네 시간 남짓, 열다섯 번의 점화.

첫 번째 진화: 보급선

가장 먼저 나타난 적은 코드 안에 없었다. 네트워크 안에 있었다. 의존성 다운로드는 TLS 한가운데에서 끊어졌고, 빌더는 건축 자재 한 뿐도 발사장으로 운반하지 못했다.

해법은 새 보급선을 놓는 것이었다: 의존성 저장소의 미러를 알리윈으로 옮기고, accessor 캐시를 청소하고, configure-on-demand를 껐다. 이 점화(9279891a)는 효험이 있었다——TLS 오류는 사라지고, 자재는 다시 입항했다.

두 번째 시험: 엔진을 갈아 끼우다

다음은 긴 확인의 시간이었다. AGP를 8.7.3에서 8.6.1로 되돌리는 것(361f80c1)——엔진을 통째로 내려 낡은 것으로 바꾸는 일——그러나 불꽃의 서명(MissingValueException)은 1도도 변하지 않았다. 실패한 이 점화는 값비싼 정보를 사 왔다: 적은 엔진 안에 없다.

본 전역: 빛나지 않는 별의 추적

보고는 한 줄이었다: Cannot query the value of this provider because it has no value available.——태스크 그래프 어딘가에, 본래 값을 품어야 할 열쇠인 provider가, 빈 채로 떠 있다. 빛도 열도 내지 않고, Gradle이 :app:compileDebugJavaWithJavac의 의존성을 해석하는 순간에만 그래프 전체를 끌어넘긴다.

추적은 생각보다 어려웠다. 구름이 끊임없이 짙어지는 까닭이다:

구름을 뚫고 나서는, 천문학자의 방식으로 별을 찾았다: 트랜짓법, 한 칸씩. 태스크 그래프 위의 별 하나하나에 개별 dry-run을 돌려, 어떤 통과가 배경의 빛을 어둡게 하는지 지켜보았다. help는 통과했다, kapt도, ksp도, kotlin도——그리고 javac의 칸에서, 빛이 가라앉았다.

마지막 커밋(cf61c160)은 :app:kaptDebugKotlin을 스캔 열에 추가했다. 모든 증거는 하나의 좌표로 수렴한다: 서명 설정에서 property.keystore.file로 가져오는 그 열쇠는, keystore가 존재하지 않는 클라우드의 땅에서는 빈 provider라는 것.

등불은 아직 초록이 아니다

솔직하게 말한다: 전역은 미완성이다. 열다섯 번의 점화는 초록을 가져오지 못했다——그러나 정밀해지는 열다섯 장의 성도를 가져왔고, 용의자의 범위는 태스크 그래프 전체에서 한 자루 열쇠로 좁혀졌다.

다음 점화는 이미 장전되어 있다: 빈 열쇠에게, 평가되기 전에 “존재하는가”를 먼저 답하게 하는 것. 등불은 초록이 될 것이다. 유배자의 발사장은, 적색 경보를 이유로 문을 닫는 법을 모른다.

댓글

← 디지털 가든