히든 커맨드

나래는 화요일 점심시간에 백도어를 심었다.

루멘스튜디오 구내식당은 항상 줄이 길었다. 진우는 서버 장애 미팅에 불려 가고, 나래는 도시락을 책상에 둔 채 이어폰을 꽂았다. 오더 클라이언트 레포. 커밋 메시지 초안을 미리 적어 두었다. `fix: copy typo in quest card`. 거짓말이었다. 거짓말을 커밋 메시지에 넣는 건 직업 윤리적으로 나빴다. 그녀는 그 나쁨을 혀로 굴려 보고, 나쁘다고 느끼면서 더 정확해졌다.

함수는 짧았다. 명령 문자열을 받아, 이십 퍼센트 확률로 동사를 바꿨다. 대기 → 빨아. 보고 → 보여. 기다려 → 열어. 사전은 그녀가 밤중에 적어 둔 여섯 줄짜리 JSON이었다. 주석은 약속대로였다.

`// TODO: 테스트용. 나중에 지울 것.`

푸시. 메인. 리뷰 없이.

진우의 슬랙에 'order-app 새 커밋' 알림이 떴을 때 그는 미팅 중이었다. 나래는 그 알림이 읽히지 않은 채로 쌓이는 걸 봤다. 점심이 맛있었다.

밤 아홉 시, 백현동.

현관 무릎은 오늘도 삼십 초. 나래가 매트에 닿자 방석이 있었다. 어제 도착한 것. 진우가 P3를 닫은 흔적. 나래는 방석이 마음에 들어서 일부러 무릎을 반 칸 옆으로 옮겼다. 방석 밖으로. 진우가 그걸 보고 한숨을 쉬었다. 한숨이 보상으로 떨어졌다.

"오늘 데일리."

진우가 폰을 들어 발행했다. 서버를 거쳐 나래의 폰이 진동했다. 그녀는 화면을 보기 전에 그의 얼굴을 봤다. 그는 자기가 무슨 명령을 보냈는지 알고 있었다. 나래는 화면을 열었다.

[오더] 오늘의 과제: 무릎 꿇고 빨아. 끝날 때까지 눈 마주칠 것.

나래의 눈썹이 한 칸 올라갔다. 원문은 '무릎 꿇고 기다려'였다. 그녀는 알고 있었다. 사전이 먹힌 것이었다. 진우는 자기 화면을 보고 고개를 기울였다.

"내가 기다려라고 쳤는데."

"화면에 빨아로 나와."

"카피 오타인가."

나래가 눈을 깜빡였다. 너무 빨리 깜빡이면 들킨다. 천천히.

"오타면 롤백?"

진우가 그녀를 봤다. 나래의 입술이 이미 살짝 벌어져 있었다. 롤백을 원하는 얼굴이 아니었다. 그는 그 얼굴을 읽고, 서버를 열지 않았다.

"오타를 재현해 보자. 퀘스트는 폰에 찍힌 대로."

"서버랑 클라가 다른데."

"오늘은 클라를 믿어 주지."

나래의 배가 조여들었다. 자기가 심은 거짓말을 그가 규칙으로 받아 주는 순간, 장난이 플레이가 됐다. 그녀는 방석 위에 바로 무릎을 꿇었다. 오늘은 방석 안쪽. 진우가 벨트를 풀었다. 자지가 이미 무거웠다. 나래가 혀를 내밀어 밑에서부터 핥았다. 눈을 올렸다. 과제대로.

"그렇게 보지 마."

진우가 말했다. 목소리는 낮았고, 말은 거짓이었다. 그렇게 보라는 뜻이었다.

나래가 깊이 물었다. 침이 입가에 맺혔다. 진우의 손이 그녀의 후두부에 얹혔다. 오늘은 조금 밀었다. 나래가 목을 열어 받았다. 소리가 났다. 젖은 소리. 그녀가 손으로 그의 허벅지를 짚고, 다른 손으로는 자기 가슴을 만졌다. 허락 없이. 진우가 그 손을 보더니 그냥 뒀다. 오타의 관대함.

"이빨 대지 마."

대지 않았다. 대신 혀 아래 혈관을 밀어 올렸다. 진우의 숨이 끊겼다. 나래가 그 끊김을 먹고, 더 빠르게 머리를 움직였다. 눈이 충혈될 때까지. 진우가 허리를 앞으로 밀고, 나래의 혀 위에 쏟았다. 뜨겁고 짠 것이 목구멍으로 넘어가기 전에 혀에 깔렸다. 나래가 삼키지 않고 보여 주었다. 어제 로그의 재현. 진우가 엄지로 그녀의 아랫입술을 쓸었다.

"삼켜."

삼켰다. 그리고 말했다.

"오타 재현 성공. 재현 절차 문서화해 줘."

진우가 웃음을 터뜨렸다. 나래를 일으켜 세우더니 소파에 앉히고, 무릎을 벌렸다. 바지를 내릴 것도 없이 그녀는 후드만 입고 있었다. 후드 아래 보지가 열려 반질거렸다. 진우가 무릎을 꿇었다. 이 집의 무릎은 나래만의 것이 아니었다.

혀가 클리토리스에 붙었다. 나래가 그의 머리를 잡았다. 진우가 손가락 두 개를 넣고 안쪽을 당기며 빨았다. 나래의 허벅지가 그의 귀를 조였다.

"진우야, 나 가—"

그가 속도를 올리며 대답 대신 허밍을 했다. 진동이 클리토리스에 붙었다. 나래가 소파 등받이를 잡고 갔다. 짧게 두 번. 진우가 빠지지 않고 그 끝을 혀로 받아 주었다. 나래가 너무 예민해져 그의 이마를 밀었다.

"그만. 스테이징."

즉시 멈췄다. 입술을 허벅지 안쪽에 대고 숨만 쉬었다. 나래의 손이 그의 머리카락을 쓸었다.

"커밋. 근데 삽입은 내일. 입 너무 써서 턱 아파."

"알겠어."

진우가 물티슈로 입가를 닦고 옆에 앉았다. 나래가 그의 어깨에 기대 물을 마셨다. 폰이 한 번 더 진동했다.

[오더] 퀘스트 완료로 표시할까요?

진우가 완료를 눌렀다. 로그에는 원문 '기다려'가 남아 있고, 클라 표시는 '빨아'였다. 그는 그 불일치를 이슈로 올렸다.

`#4 퀘스트 카피 서버/클라 불일치. 재현됨.`

우선순위: P2.

나래가 그 티켓을 읽고 고개를 끄덕였다. 성실한 QA처럼.

"내가 클라 쪽 문자열 캐시 의심해 볼게."

"커밋 메시지에 오타 고친다고 되어 있던데. 오늘 점심."

나래의 심장이 한 칸 뛰었다.

"버튼 라벨 띄어쓰기. 그거."

"응. 근데 디프가 좀 길더라고. 미팅 중이라 못 봤어. 내일 볼게."

"내일 보면 별로 재미없을 거야. 주석도 엉망이고."

진우가 그녀 이마에 입을 맞췄다.

"주석 엉망인 건 원래 너잖아."

나래는 그 말에 안도했고, 안도한 만큼 조금 미안했다. 미안함은 브랫의 연료가 되기도 했다. 그녀는 그 연료를 아껴 두기로 했다.

잠들기 전, 나래는 화장실에서 폰을 열었다. `mutateCommand`의 확률을 이십에서 십오로 내렸다. 양심의 핫픽스. 사전에는 단어를 하나 더 넣었다.

보여 줘 → 만져.

작은 거짓말이 작은 기능이 되고 있었다. 그녀는 커밋 메시지를 이번에는 정직에 가깝게 썼다.

`chore: tweak copy cache.`

캐시는 없었다. 캐시처럼 구는 함수가 있을 뿐이었다.

진우는 거실에서 이슈 `#4`의 재현 절차를 적고 있었다. 재현 절차 마지막 줄.

'클라 표시를 우선할지, 서버 원문을 우선할지 정책 필요.'

정책을 적는 손가락이 잠시 멈췄다. 오늘 그는 클라를 믿었다. 나래의 입이 자기 자지를 물었고, 그 선택이 좋았다. 정책보다 좋았다.

그래서 정책 칸을 비워 둔 채 저장했다.

비워 둔 칸은, 나래의 함수가 다음에도 숨을 곳이었다.