무한 루프

토요일 밤의 주간 보스는 원래 하나였다.

진우가 발행한 문장은 '말하지 마. 손으로만 보고. 끝날 때까지.'였다. 나래의 클라가 그 문장을 받아 `mutateCommand`를 돌렸다. 십 퍼센트. 오늘은 맞았다. 말하지 마, 가 보고해, 로 바뀌었다. 서버는 원문을 밀고, 클라는 변종을 띄우고, 완료 조건은 서버 원문 기준이었다. 말하지 않는데 보고를 해야 하고, 보고를 하면 원문을 어기는 상태. 완료가 영원히 안 되는 퀘스트.

첫 삼십 분은 장난처럼 보였다.

나래가 침대에 무릎을 꿇고 입을 다물었다. 진우가 그녀의 입을 손가락으로 쓸었다. 말하지 마. 나래의 폰은 보고해, 를 깜빡였다. 그녀가 눈을 크게 떴다. 진우가 그 눈을 보고 웃었다.

"화면이 또 이상하지."

나래가 고개를 끄덕였다. 말은 안 했다. 원문을 지키려는 쪽. 진우가 손가락을 넣었다. 두 개. 나래가 허리를 떨었다. 보고를 못 하니 숨만 거칠어졌다. 진우가 그 거침을 칭찬 대신 속도로 받았다. 세 개. 나래가 그의 손목을 잡았다.

폰이 진동했다. 타임아웃. 실패. 자동 재시도. 진우가 목요일에 넣어 둔 재시도 큐였다. 실패하면 같은 퀘스트를 우선순위 한 단계 올려 재발행. 라이브 게임의 실패 미션 로직을 그대로 가져온 것. 나래의 화면에 새 문장이 떴다.

[오더] 재시도 1: 말하지 마. 손으로만. 더 오래.

클라 변종: 보고해. 소리 내. 더 세게.

두 문장이 겹쳐 스크롤됐다. 나래가 입을 열었다. 원문을 어기는 쪽을 택했다.

"진우야, 화면이 이상해. 롤—"

진우가 그녀의 입을 손바닥으로 막았다. 퀘스트를 지키는 손이었다. 나래의 눈이 달라졌다. 장난의 눈이 아니었다. 진우는 그 차이를 처음엔 흥분으로 읽었다. 손가락을 더 깊게 넣었다. 나래가 손바닥 안에서 소리를 냈다. 폰이 또 진동했다. 실패. 재시도 2. 우선순위 P1.

진우의 워치에도 같은 알림이 쌓였다. 그는 워치를 보지 않았다. 나래의 젖은 안쪽과 떨리는 허벅지를 보고 있었다. 재시도가 플레이의 일부처럼 느껴졌다. 나래가 그의 손을 입으로 밀어냈다.

"롤백."

작은 소리였다. 진우가 들었다. 그런데 손이 한 박자 늦었다. 앱의 다음 진동이 그 박자를 잡아먹었다. 재시도 3. P0. 문장이 빨갛게 떴다.

[오더] 강제: 입 사용 금지. 저항 무시.

나래의 클라가 이 문장에서 안전 확인을 건너뛰었다. 예전에 그녀가 테스트 명령을 넣으려고 주석 처리한 한 줄. `if (priority === 'P0') requireConfirm();` 가 죽어 있었다. P0가 확인 없이 바로 실행됐다. 진우의 어드민에는 확인 창이 떠야 했다. 뜨지 않았다.

나래가 더 크게 말했다.

"롤백. 진우야. 롤백."

이번엔 들렸다. 제대로. 진우의 손이 즉시 멈췄다. 빠졌다. 반 팔 물러났다. 나래가 공기를 들이마셨다. 어깨가 떨렸다. 진우가 이불을 끌어 그녀의 무릎을 덮었다. 물은 바로 못 가져오고, 먼저 눈을 맞췄다.

"들었어. 멈췄어. 여기 있어."

나래가 고개를 끄덕였다. 끄덕임이 늦었다. 진우가 물컵을 가져와 건넸다. 그녀가 두 손으로 받아 마셨다. 폰이 또 진동했다. 재시도 4. 진우가 그 진동을 듣고 미니 PC 전원 선을 뽑았다. 하드 컷. 팬이 죽었다. 나래의 폰 알림이 더 이상 오지 않았다.

침실이 갑자기 조용했다.

"미안."

진우가 먼저 말했다.

"내가 앱을 보고 있었어. 너를 봐야 했는데. 롤백 한 번 더 빨리 들었어야지."

나래가 컵을 내려놓았다. 목소리가 갈라졌다.

"첫 번째는 작게 말했어. 네가 못 들을 수도 있는 크기. 그건 내 책임도 있어. 근데 두 번째는 분명했는데, 그 사이에 알림이 끼었어. 알림이 너 손을 붙잡더라고."

"붙잡히면 안 되는 손이었어."

나래가 무릎을 감쌌다. 이불 안에서.

"퀘스트가 안 끝났어. 서버랑 클라가 다른 문장이었거든. 말하지 마 랑 보고해 랑. 완료가 안 되니까 재시도가 돌고. 내가 심어 둔 함수가 동사를 바꿨어."

진우가 그녀를 봤다. 심어 둔, 이라는 단어가 방에 남았다.

"심어 둔."

나래가 왼쪽 귀걸이를 만지지 않았다. 만질 필요가 없는 진실이라서.

"백도어. 처음부터. 이스터에그라고 했던 그거. 명령 동사를 이십 퍼센트, 나중엔 십 퍼센트로 바꿨어. 기다려를 빨아로. 그건 장난이었어. 재미있었고, 너도 좋아했고. 근데 P0 확인 함수를 내가 주석 처리했어. 테스트 넣으려고. 그걸 안 살렸어. 그 줄이 오늘 너를 못 멈추게 했어. 그건 장난이 아니야."

진우는 말이 없었다. 나래가 그 없음을 견뎠다. 견디는 동안 진우의 얼굴이 여러 겹을 지나갔다. 이해, 배신, 자기 혐오, 다시 이해. 그는 안경을 쓰지 않은 얼굴로 그녀를 봤다.

"장난의 범위가 안전어를 넘어가면, 그건 브랫이 아니야."

"알아."

"너는 아는 사람이라서 더 화가 나."

나래의 눈이 뜨거워졌다. 이번에는 눈물이었다. 진우가 손등을 그녀의 볼에 댔다. 화가 난 손이 그래도 따뜻했다.

"오늘은 앱 없어. 전원 뽑힌 채로 둘 거야. 나는 옆에 있을게. 섹스는 안 해. 너는 울도 되고 안 울어도 돼. 물을 더 마실래, 샤워할래."

"샤워. 같이."

샤워는 뜨거웠다. 진우가 그녀의 머리카락을 감아주었다. 나래가 그의 가슴에 이마를 붙였다. 말이 거의 없었다. 수건으로 닦고 침대로 돌아가 옷을 입었다. 둘 다. 알몸이 아닌 밤이 드물었다. 필요한 밤이었다.

나래가 불을 끄기 전에 말했다.

"코드 보여 줄게. 내일. 숨기지 않고."

"내가 직접 볼게. 리뷰."

"리뷰어가 화난 상태면 린트가 더 빡세지."

"빡셀 거야. 그래도 밴은 아니야."

나래가 짧게 웃었다. 웃음의 끝이 떨렸다. 진우가 그 떨림을 엄지로 쓸어 주었다. 쓸어 주는 것과 용서는 다른 함수였다. 둘 다 그 차이를 알고 누웠다.

미니 PC는 전원이 꺼진 채로 작업실에서 식어 갔다. 재시도 큐가 메모리에서 사라졌다. 디스크에는 로그가 남아 있었다. 실패, 실패, 실패, 강제, 그리고 그 다음이 없었다.

다음이 없는 로그가, 그날의 유일한 정직한 기록이었다.