앱에서 뭔가 느려요. 그런데 '앱이 느리다'는 말로는 아무것도 알 수 없어요. 트레이스는 실제로 발목을 잡는 스테이션이 어디인지 찾아내는 방법이에요.
그림을 그려볼게요. 규모가 커진 앱은 하나의 주방이 아니에요. 주문을 다음 스테이션으로 넘기는 줄줄이 이어진 라인이에요. 주문이 카운터에 들어오면 그릴로 가고, 플레이팅으로 이동하고, 패스에서 잠시 기다렸다가 손님 테이블로 나가요. 각 단계는 서로 다른 소프트웨어가 맡아요. 주방 뒤편을 스케일업한 것과 같죠. 스테이션이 많고, 주문 하나가 그 전부를 통과해요.
그런데 주문이 한참 걸리고, 손님은 짜증이 났어요. '주방이 느리다'는 말은 아무 도움이 안 돼요. 어느 스테이션인가요? 그릴에 밀린 건가요? 플레이팅이 가니쉬를 기다리는 건가요? 위치를 특정하지 못하면 고칠 수 없어요.
트레이스는 주문 티켓 하나를 모든 스테이션에 걸쳐 따라가면서 각 단계의 시간을 측정해요. 주문 하나를 집어 전체 여정을 지켜봐요. 카운터에서 순간, 그릴에서 순간, 그리고 플레이팅에서 꼬박 3초 대기. 범인은 거기 있어요. 트레이스는 주방 전체를 한꺼번에 감시하지 않아요. 티켓 하나를 따라가며 시간이 어디서 사라졌는지 정확히 보여줄 뿐이에요.
트레이스는 로그의 사촌이고, 그 차이가 중요해요. 로그는 한 스테이션의 메모장이에요. 그릴에서 벌어진 모든 일을 순서대로 적어둔 것이죠. 유용하지만 그릴에 대한 것만 알아요. 트레이스는 주문 하나가 모든 스테이션을 지나온 경로를 한데 엮어요. 로그는 장소 단위고, 트레이스는 주문 단위예요. 처음부터 끝까지요. 문제가 스테이션 사이 어딘가의 넘김에 숨어 있을 때, 어느 로그도 잡아내지 못하는 것을 트레이스는 잡아내요.
(나중에 만나게 될, 프로그램 하나가 충돌했을 때 출력되는 것도 '트레이스'라고 불러요. 그건 하나의 스테이션 내부 기계를 깊이 파고들어요. 여기서 다루는 트레이스는 그 반대예요. 한 발 물러서서 주문 한 건이 전체 라인을 통과하는 과정을 따라가요. 같은 단어인데, 줌 방향이 정반대예요.)
비개발자가 알아야 할 이유. 뭔가 느리다는 느낌이 들 때 개발자가 '트레이스 한번 뽑아볼게요'라고 하면, 그건 전체 시스템을 멍하니 들여다보는 게 아니에요. 요청 하나를 따라가면서 느린 구간을 찾는 거예요. '체크아웃이 느려요'와 '체크아웃이 세금 계산 서비스를 3초 기다린다' 사이의 차이예요. 전자는 어깨를 으쓱할 뿐이지만, 후자는 고칠 수 있어요.
로그는 한 스테이션의 일지예요. 트레이스는 주문 하나를 모든 스테이션에 걸쳐 추적해요. '어딘가 느리다'가 '바로 여기가 느리다'로 바뀌어요.