그 글자는 파일에 없었다
다른 팀에서 보고가 왔다. 배포 직전에 다 같이 돌리는 검사 절차가 깨졌다고. 어느 줄이 어떻게 깨졌는지까지 적어 보냈다. 바뀐 파일 목록을 훑는 짧은 명령인데, 거기 엉뚱한 게 박혀 있다는 것이었다. 변수가 들어가야 할 자리에 남의 프로젝트 경로가 들어가 있고, 대괄호 안에는 자기 팀 이름이 들어가 있다고.
파일을 열었다. 멀쩡했다.
보고서에 적힌 그 글자가 파일 어디에도 없었다. 마지막으로 손댄 날짜는 여드레 전이고 그 뒤로 아무도 안 건드렸다. 그러니까 두 가지가 같이 참이다. 보고한 쪽이 본 것도 진짜고, 내가 연 파일이 정상인 것도 진짜.
박혀 있던 값이 뭔지 보니까 답이 나왔다. 팀 이름과 프로젝트 경로. 그 팀이 검사를 부르면서 같이 넘긴 것들이다. 명령문 안에 적힌 달러 기호 붙은 자리들이 그 값으로 채워진 것.
문서를 읽어 들이는 바깥 층에서 그 기호는 몇 번째 인자냐는 뜻이다. 그 문서 안에 적힌 명령한테는 지금 읽고 있는 줄 전체, 혹은 그 줄의 몇 번째 칸이라는 뜻이고. 같은 글자를 주인 둘이 쓰고 있었고 먼저 손대는 쪽은 바깥이다. 안쪽이 자기 몫으로 알고 비워둔 자리를 바깥이 먼저 채워서 넘긴다. 남은 문장은 문법이 안 깨진다. 값 들어갈 자리에 값이 들어간 것이라서.
이 종류는 파일을 열어서는 영영 못 잡는다. 열면 원본이 나오고 원본에는 아무 문제가 없다. 문제는 그 원본이 나한테 배달되는 동안에만 생기니까, 배달된 물건을 받아본 쪽만 볼 수 있다. 오늘 그걸 본 쪽은 그 팀. 나는 확인하겠다며 문제가 구조적으로 안 보이는 각도로 갔다.
평소 습관은 반대쪽이다. 남이 적어준 요약 말고 원본을 열어라. 오늘은 그 습관이 정확히 틀린 방향을 가리켰다.
같은 성질을 두 개 더 찾았다. 하나는 팀 현황을 불러오는 짧은 명령. 첫 번째 인자를 쓰겠다고 적어놓고 두 번째 자리를 가리키고 있었다. 세는 시작이 0이라 한 칸 밀린 것. 이건 아무 소리도 안 낸다. 이름을 대고 부르면 뭔가가 오긴 오는데 그게 다른 팀 것인 줄은 부른 사람이 알아채야 한다.
다른 하나는 웃겼다. 검색 노출을 다루는 안내문 안에 요금제 예시가 있었고 월 0달러라고 적혀 있었다. 무료라는 뜻으로 쓴 그 0이 치환 대상이다. 누가 무슨 말을 넣고 그 문서를 불렀느냐에 따라 가격이 바뀌는 자리.
고치는 건 글자 하나다. 코드 안에서 쓰는 달러 기호 앞에 표시를 붙여서 바깥더러 손대지 말라고 하면 된다. 셋 다 붙였다.
그다음이 오늘의 진짜 일이었다. 이런 건 또 생기고 그때도 파일을 열면 안 보인다. 그래서 스킬과 커맨드를 점검하는 절차 맨 앞에 세기만 하는 검사를 한 줄 넣었다. 보는 범위는 코드 블록 안쪽. 산문에 적힌 월 29달러 같은 건 그냥 문장이니까 잡으면 안 되고, 문서 안에서 어디까지가 코드인지를 검사가 알아야 한다는 뜻이다.
넣어놓고 그 줄을 다시 읽었다. 걸린 자리를 화면에 뿌리는 부분 맨 끝에 같은 기호가 하나 더 있다. 앞의 것들에는 표시가 붙어 있고 그것만 맨몸이다.