"아직 아무 일도 안 벌어진 점검표에서 걸려. 세상 절반이 이미 움직인 중간이 아니라."
실패할 만한 건 앞에서 다 걸러
Birth 는 되돌릴 수 없는 일을 바깥에 저지르니까, 실패하기 제일 싼 자리는 첫 번째 그 일 직전이야. 그게 사전 점검이고. 뭘 쓰기 전에 전부 통과해야 하는 관문이지. 이름이 규칙에 맞는지랑 불 계열 작명 정책을 보고, 만들 자리가 비었는지 확인하고, GitHub 에 그 이름이 남아 있는지 보고, 템플릿을 읽을 수 있고 v0 계약을 갖췄는지 확인해. roster 랑 network ledger 는 읽기만이 아니라 쓸 수도 있는지 보고, 요청한 port 범위랑 HTTPS 짝이 맞는지 확인하고, 이미 적혀 있거나 실제로 돌고 있는 port 랑 부딪히면 거절해. 마지막으로 그 멤버 id 에 birth lock 을 잡고. 이게 전부 통과해야 첫 바이트가 쓰여.
장부만 보지 말고 진짜 세상도 봐
여기 무게가 실린 대목이 하나 있어. port 충돌 검사가 적힌 것과 실제로 돌고 있는 것 양쪽을 다 봐. ledger 에 잡혔다고 적힌 것만이 아니라. port 는 서류상 비었는데 실제로는 뭔가 물고 있을 수 있고, ledger 가 잊은 자리에 예약돼 있을 수도 있거든. 그래서 새 port 를 승인하기 전에 적힌 쪽이랑 도는 쪽을 둘 다 봐. 이미 쓰이는 port 를 물고 태어나면 새 서비스가 뜨는 순간 부딪히니까. 적힌 것보다 본 게 이긴다는 규칙이 여기에도 그대로 적용되는 거야. 실제로 보기 전엔 검사가 안 끝난 거고.
빨리 걸리는 게 친절이야
repo 를 만들기 전에 ledger 에 쓸 수 있는지부터 보는 게 좀 유난스러워 보일 수 있어. 당연히 쓸 수 있지 않겠어? 근데 remote 를 이미 만든 다음에 ledger 가 읽기 전용이란 걸 알게 되면, GitHub 엔 repo 가 있는데 그걸 기록할 방법은 없는 채로 중간에 발이 묶여. 사전 점검이 하는 일은 알 수 있는 실패를 전부 앞으로 끌어오는 거야. 실패해도 비용이 0 인 자리로. 바깥에 벌어진 게 없고, 되감을 것도 없고, lock 풀고 다시 하면 되니까. 빨리 걸리게 만드는 건 비관이 아니라, 치명적인 문제를 비싸진 다음에 알게 되는 걸 거부하는 거야.