코드가 충돌하면 조용히 사라지지 않아요. 반드시 자백을 남겨요. 대부분의 사람이 당황해서 스크롤을 넘겨버리는 텍스트 더미가 있는데, 사실 그 더미야말로 AI에게 건넬 수 있는 가장 유용한 것이에요.
프로그램이 처리할 수 없는 상황에 부딪히면, 멈추면서 스택 트레이스를 출력해요. 충돌이 일어난 바로 그 순간, 프로그램이 어디에 있었는지를 단계별로 기록한 흔적이에요. 겉으로 보면 난해한 암호 같지만, 실제로는 순서대로 쓰인 자백서예요.
블랙박스 비행 기록장치. 비행기가 추락하면 사고 조사관들은 추측만 하며 서 있지 않아요. 최후의 순간까지 모든 계기를 기록한 블랙박스를 꺼내, 무언가 잘못된 정확한 순간을 거슬러 읽어요. 스택 트레이스는 충돌에 대한 블랙박스예요. 프로그램이 실행하던 단계들의 연쇄를 포착해요(나는 이걸 하고 있었고, 그건 저것 때문에 시작됐고, 저것은 이것 때문에 시작됐다). 그리고 가장 위 줄이 대개 충돌 지점이에요.
실제로 읽는 방법. 스택 트레이스는 대부분 거꾸로 읽는 이야기예요. 프로그램은 무언가를 호출하고, 그것이 또 다른 것을 호출하고, 그것이 또 다른 것을 호출해요. 단계들이 위로 쌓여요. 가장 깊은 단계가 실패하면, 트레이스는 전체 스택을 출력해요. 맨 위 줄이 거의 항상 실제로 문제가 생긴 지점이며, 보통 파일 이름과 줄 번호까지 알려줘요. 그 아래 줄들은 프로그램이 어떻게 거기까지 도달했는지를 보여주는 흔적이에요. 모든 줄을 이해할 필요는 없어요. 첫 번째 줄만 보면 돼요. 실제로 잘못된 곳이 거기거든요.
비슷하게 들리지만 다른 개념과의 구분. 분산 트레이싱은 하나의 요청이 여러 서비스를 거쳐 이동하는 과정을 추적해요. 수십 개의 창고를 통과하는 운송장 번호처럼요. 스택 트레이스는 반대 방향의 확대예요. 충돌한 바로 그 순간, 하나의 프로그램 내부를 낱낱이 해부해요. 전체 항공사의 노선도가 아니라 한 대 비행기의 비행 기록장치요. 하나는 시스템을 가로질러 요청을 따라가고, 하나는 단일 충돌을 그 자리에서 해부해요. 같은 '트레이스'라는 단어지만, 완전히 다른 도구예요.
이 항목이 아마 이 시리즈 전체에서 가장 실용적인 이유. 앞으로 이것을 AI에 계속 붙여넣게 될 거예요. 그리고 몇 분 만에 막힌 곳을 뚫는 사람과 한 시간을 허비하는 사람을 가르는 방법이 딱 하나 있어요. 트레이스 전체를 붙여넣는 것, "안 된다"고만 말하는 게 아니라요. 전체 트레이스를 건네면 AI는 정확한 파일, 정확한 줄, 정확한 불일치를 받아요. 종종 타입 오류인 경우가 많아요. "안 돼"라고만 하면 AI는 추측해야 하고, 추측하는 곳에서 환각이 생겨요. 스택 트레이스는 AI가 진단할 수 있게 해줘요. 기억에 의존해 충돌을 설명하는 대신, 블랙박스를 직접 건네는 거예요.
스택 트레이스는 벽돌 담이 아니라 블랙박스예요. 충돌 지점을 찾으려면 첫 줄을 읽고, AI에는 전체를 붙여넣으세요. "안 됐어요"만 달랑 쓰는 건 절대 금물이에요.