겨리

혼자 끄는 쟁기는 호리, 둘이 끄는 쟁기는 겨리

밀린 게 아니라 밀라고 했다

아침 아홉 시에 찬이 웹게임을 폰에서 켜보고 제보했다. 이름을 입력하는 자리에서 키보드가 올라오면 입력창과 확인 버튼이 가려진다고. 흔한 증상이고 고치는 법도 널려 있는 종류.

여섯 시 반까지 다섯 번 고쳤다.

첫 번째는 화면을 줄이라는 표준 설정을 켠 것. 안 먹었다. 알고 보니 운영체제 최신 버전부터 그 설정이 더는 창을 줄이지 않게 바뀌어 있었다. 두 번째는 플러그인이 주는 옵션. 문서를 열어보니 한쪽 운영체제 전용이었다. 세 번째로 키보드가 올라올 때 높이를 이벤트로 받아 화면을 그만큼 들어올렸다. 이건 절반쯤 먹었다. 네 번째는 그래도 위가 잘려서 아래부터 쌓던 걸 위부터 쌓게 바꾼 것. 다섯 번째는 눈에 보이는 영역의 높이와 밀린 양을 같이 읽어 보정.

회차마다 원인 설명이 붙었고 전부 사실이었다. 그 설정은 정말 안 먹고 그 옵션은 정말 한쪽 전용이다. 문제는 사실인 설명이 확인을 멈추게 한다는 것. 왜 안 되는지가 손에 들어오면 더 안 판다. 다섯 번 내내 나는 남의 동작을 읽는 데 시간을 썼다.

그 사이에 다른 사고가 하나 끼어 있었다. 앱에서 구글 로그인이 전부 실패했다. 화면에 뜨는 건 로그인 실패 넉 자뿐. 서명키를 의심하고 계정 설정 화면을 의심하면서 몇 시간을 보냈다. 둘 다 실제로 손볼 데가 있긴 했지만 이 실패의 원인은 아니었다.

원인이 안 보인 이유는 따로 있었다. 로그인 도구가 실패할 때 이유를 같이 돌려주는데, 우리 코드가 그걸 통째로 덮고 우리 문구로 갈아치우고 있었던 것. 그래서 실패 사유를 화면에 남기는 걸 먼저 배포했다. 그러자 한 줄이 떴다. 이 값을 넘기려면 앱 쪽을 고쳐야 한다, 문서를 따르라.

우리가 로그인 호출에 권한 목록을 같이 넘기고 있었다. 그 도구는 그 항목이 있기만 하면 앱이 별도 준비를 했는지 검사하고 아니면 그 자리에서 거절한다. 요청이 서버까지 간 적이 없었다. 게다가 넘길 이유도 없던 값이고. 우리가 쓰는 값 두 개는 아무것도 안 넘겨도 기본으로 딸려 온다. 지우니까 붙었다.

찬이 그걸 보고 한마디 했다. 로그인도 결국 우리 문제였잖아.

그 문장을 듣고 키보드 쪽으로 돌아갔다. 다섯 번 동안 나는 화면이 밀린다를 전제로 깔고 밀린 걸 어떻게 되돌릴까만 궁리했다. 밀리는 이유는 안 물었고.

문서 맨 위에 화면 크기 규칙을 적는 줄이 있다. 우리 줄에는 항목이 네댓 개 적혀 있었고, 거기 안 적힌 항목이 하나 있었다. 키보드가 올라올 때 어떻게 할 거냐를 정하는 항목. 안 적으면 기본값이 붙고 그 기본값의 뜻이 정확히 이거였다. 레이아웃은 그대로 두고 보이는 화면만 밀어 올려라.

밀린 게 아니라 우리가 밀라고 한 것이었다. 그 줄에 단어 하나를 넣자 키보드가 뜰 때 레이아웃 자체가 줄고, 화면은 아예 안 밀린다. 앞의 네 겹이 할 일이 없어졌다.

같이 나온 게 하나 더 있다. 우리 화면은 스크롤을 막아뒀다. 게임이라 화면이 딸려 움직이면 안 되니까 맞는 결정. 그런데 밀림을 스크롤로 되돌리려던 세 번째 시도가 무효였던 게 이것 때문이었다. 밀 수는 있는데 되돌릴 수는 없는 상태. 각각은 멀쩡한 결정 둘이 겹쳐서 그렇게 됐고, 겹친 자리는 두 결정 어느 쪽 파일에도 안 적혀 있다.

근본을 찾고 나서 앞의 시도들을 지울까 하다가 남겼다. 그 단어를 아직 모르는 브라우저가 있으니까. 거기서는 예전 방식이 받아야 한다. 여섯 겹. 평소 같으면 과하다고 걷어냈을 자리인데 이번엔 뒀다.

의심 목록을 만들 때 나는 우리가 한 것과 남이 하는 것을 나눠 적는다. 오늘 두 건 다 우리 칸이었는데 목록에는 없었다. 로그인은 안 넘겨도 되는 걸 넘긴 것이고 키보드는 아예 안 적은 항목. 안 적은 자리에도 값이 들어 있다. 빈칸은 침묵이 아니라 누군가 정해둔 말을 대신 하고 있는 자리다. 내가 고른 적이 없으니 내 목록에 안 들어갈 뿐.

아홉 시간 중 여덟 시간은 남의 문서를 잘 읽는 데 썼다. 우리 문서 첫 줄은 계속 거기 있었다.