대니
danny's blog@dannywon_dev
발행 05 · 대기 00

1인 개발자. 클로드 코드를 팀처럼 굴려서 혼자 제품을 만든다. 중국어 9년, 국제행사 운영. 매일 겪은 것만 쓴다.

눈치코치긋다Checky머리스타일
AI 팀 꾸리기 05/053

도구가 준 답이 내 질문에 대한 게 아니었다

도메인 후보를 한 번에 확인하려고 whois 를 셸 한 줄로 돌린 적이 있다면, 출력이 나왔다는 이유로 결과를 믿었을 가능성이 있다.

블로그에 붙일 도메인이 비어 있는지 확인해야 했다. 후보 5개를 whois 로 한 번에 돌리는 셸 한 줄을 짰다. 출력에 No matchNOT FOUND 가 있으면 "사용 가능", 없으면 "등록됨"으로 판정하는 방식이었다.

결과가 5개 전부 「등록됨」 으로 나왔다. 그중에는 아무도 안 쓸 것 같은 조합도 있었다.

넘어갈 수 있었던 지점

여기서 "다 등록됐네"로 넘어갈 수 있었다. 출력이 있었고, 스크립트가 에러를 내지 않았고, 판정도 나왔다. 5개가 전부 같은 결과라는 게 유일한 이상 신호였다.

원문을 열어봤다. whois 가 도메인 등록 정보를 준 게 아니라 IANA 의 TLD 정보를 주고 있었다. .dev 라는 최상위 도메인이 누구 것인지(Charleston Road Registry)를 답한 것이다. 내가 물은 건 "이 도메인이 비었나"였는데, 도구는 ".dev 는 이런 것이다"를 답했다.

질문과 답이 어긋난 채로 형식은 맞았다. No match 가 없었던 건 등록됐기 때문이 아니라 애초에 그 답을 하는 응답이 아니었기 때문이다. 판정 로직은 그 차이를 구분할 수 없었다.

.dev 는 whois 조회를 제한한다. 대신 RDAP 라는 프로토콜로 물어야 하고, 그건 HTTP 로 답한다. 404 면 없는 도메인, 200 이면 있는 도메인이다. 그렇게 다시 물었더니 후보들이 전부 사용 가능으로 나왔다. 처음 결과와 정반대였다.

코드가 아니라 확인 절차를 바꿨다

출력이 있다는 것과 그 출력이 내 질문에 대한 답이라는 것은 다른 사실이다.

도구가 성공적으로 종료했다는 신호(exit code 0, 에러 없음, 형식 맞는 출력)는 전부 두 번째 사실을 보증하지 않는다. 자동 판정을 씌우면 이 어긋남이 특히 안 보인다 — 판정 로직은 자기가 파싱하려던 형식이 아니면 그냥 "해당 없음"으로 처리하고, 그게 의미 있는 답처럼 출력된다.

같은 날 블로그 코드에서도

사이트 주소가 https://example.com 으로 하드코딩돼 있었다. sitemap.xmlrobots.txt 와 canonical 링크가 전부 그 값을 물고 있었다.

빌드는 통과한다. 파일도 정상적으로 생성된다. 그 파일들이 틀린 주소를 정상적으로 담고 있을 뿐이다. 배포하면 검색엔진이 그 주소로 색인한다.

그래서 빌드가 통과한 다음에 생성된 HTML 을 열어 canonical 태그에 뭐가 들어갔는지 직접 봤다. 파일이 있다는 것과 내용이 맞다는 것도 다른 사실이다.

← 목록으로