OTA 메시지는 문법으로 강제한다
안녕하세요, 로건입니다 👋
운영하면서 가장 조용히 비싸지는 사고는, 입력 한 줄이 반쪽짜리로 통과하는 일임.
EAS Update에는 우리가 만든 4모드(Stale | Silent | Soft | Force)를 메시지 prefix로 박아뒀음. 별도 입력칸을 안 만들고 메시지 한 줄에 합친 이유는 단순함 — 사람이 어차피 한 번은 적으니까.
그런데 그게 무너지는 순간이 있음. 모드를 안 적거나, 콜론을 빠뜨리거나, 오타로 Slient라고 적거나. 그러면 EAS에는 이상한 메시지가 올라가고, Remote Config에는 예전 type이 그대로 박혀 있음. 운영자는 분명히 새 OTA를 올렸는데 사용자에게는 변화가 없는 묘한 상태를 보게 됨.
그래서 우리는 그 입구에 정규식 한 줄을 박았음.
const match = rawInput.match(
/^(?:\s)*(Stale|Silent|Soft|Force)\s*:\s*(.+?)\s*$/,
);
if (!match) {
throw new Error(
`OTA message must use the form "<Stale|Silent|Soft|Force>: 메시지"`,
);
}이 한 줄이 좋은 점은 두 개임.
- 반쪽 상태가 만들어지지 않음. 잘못 입력하면 아무것도 시작되지 않음. EAS 업로드도, RC 갱신도. 입구에서 막힘.
- 에러 메시지가 곧 문서임. 신규 운영자가 README 없이도 형식을 알게 됨.
문법은 우아하기 위해서가 아니라, 반쪽 상태를 막기 위해 강제한다.
천박해 보이는 메시지 prefix가 시스템의 진실원이 될 수 있는 이유는, 입구에서 한 번 단호하게 막기 때문임.