첫 번째 위기, Latency와의 사투
제9화
발행일: 2025년 06월 03일
설계는 끝났다. 이제는 증명할 시간이었다.
팀은 며칠간의 노력 끝에, 광고 거래소 프로토타입의 첫 번째 통합 테스트를 준비했다. 실제 매체사나 광고주가 연결된 것은 아니었다. 매체사의 SSP 역할을 하는 ‘시뮬레이터’와, 광고주의 DSP 역할을 하는 또 다른 ‘시뮬레이터’를 시스템 양 끝에 붙여, 가상의 사용자가 페이지에 접속하는 상황을 재현하는 테스트였다.
팀원 전체가 대형 스크린 앞에 모였다. 알렉스도 그들 사이에 서서 긴장된 마음으로 화면을 응시했다. 화면에는 시스템의 상태를 보여주는 여러 그래프와 숫자들이 떠 있었다. 그중에서도 모두의 시선이 쏠린 곳은 ‘평균 응답 시간(Average Response Time)’이라는 항목이었다.
목표 수치는 명확했다. 100ms.
데이비드 첸이 키보드를 두드려 테스트 시작 명령을 내렸다.
“테스트 시작. 초당 100건의 가상 입찰 요청을 보낸다.”
시뮬레이터가 작동하기 시작했다. 가상의 SSP가 애드 익스체인지에 경매를 요청하고, 애드 익스체인지는 다시 가상의 DSP에게 입찰을 요청했다. 시스템 로그가 스크린을 빠르게 스크롤하며 지나갔다. 모든 것이 정상적으로 작동하는 것처럼 보였다.
하지만 아니었다.
알렉스의 눈이 ‘평균 응답 시간’ 숫자에 고정되었다. 숫자는 100ms 근처에서 안정되기는커녕, 미친 듯이 치솟고 있었다.
540ms… 870ms… 1150ms…
1초를 넘어섰다.
옆에 있던 한 시니어 엔지니어가 나지막이 욕설을 내뱉었다.
“젠장… 단위가 잘못된 거 아니야?”
아니었다. 시스템은 경매 한 건을 처리하는 데 1초가 넘게 걸리고 있었다. 목표치의 열 배가 넘는 시간. 이 속도로는 페이지 로딩이 눈에 띄게 느려져, 사용자들이 광고가 뜨기도 전에 페이지를 떠나버릴 터였다. RTB의 근간을 뒤흔드는, 재앙적인 결과였다.
데이비드는 즉시 테스트를 중단시켰다. 왁자지껄하던 사무실에 무거운 침묵이 내려앉았다. 며칠간의 흥분과 기대가 차가운 현실 앞에서 산산조각 나는 순간이었다.
“모두 회의실로.”
데이비드의 목소리는 낮고 차분했지만, 그 안에 담긴 무게감은 모두를 짓눌렀다.
회의실 화이트보드 중앙에, 데이비드는 방금 기록된 끔찍한 숫자를 썼다.
‘1200ms’
“우리의 첫 번째 적이다.”
그는 팀원들을 둘러보며 말했다.
“이건 단순한 버그가 아니야. 시스템 어딘가에 거대한 병목이 있다는 뜻이다. 우리가 설계한 고속도로 어딘가가 꽉 막혀서, 차들이 거북이걸음을 하고 있는 거다.”
사라가 입을 열었다.
“모든 구간을 나눠서 측정해야 합니다. SSP 시뮬레이터에서 우리 거래소까지의 네트워크 시간, 거래소 내부에서 경매 로직을 처리하는 시간, 다시 DSP 시뮬레이터로 요청을 보내고 응답을 받는 시간까지. 모든 ‘홉(Hop)’마다 타이머를 걸어서 어디서 시간이 허비되는지 찾아내야 해요.”
그것은 거대한 도시의 교통 체증 원인을 찾기 위해, 모든 교차로와 골목에 스톱워치를 든 사람을 세워두는 것과 같은 작업이었다. 고되고, 지루하며, 엄청난 집중력을 요구하는 일.
알렉스는 거대한 벽 앞에 선 기분이었다. 이론과 개념은 아름다웠지만, 현실의 물리 법칙과 코드의 비효율성은 냉정했다. 그가 기여했던 첫 번째 코드, 그가 설계했던 API 규격서, 그 모든 것이 이 1.2초라는 숫자 앞에서 무력하게 느껴졌다.
데이비드는 팀을 나누어 각자 맡을 구간을 분배하기 시작했다.
“Latency(지연 시간)와의 전쟁이다. 원인을 찾기 전까지는 퇴근할 생각 마라.”
그의 선언과 함께, 구글플렉스의 불은 꺼지지 않았다. 프로그래머틱 광고의 여명기를 열려던 천재들은, ‘시간’이라는 가장 원초적이고 강력한 적과의 첫 번째 사투를 시작하고 있었다.