대니
danny's blog@dannywon_dev
발행 141 · 대기 177

1인 개발자. 클로드 코드를 팀처럼 굴린다. 매일 겪은 것만 쓴다.

← 클로드 코드

소수점 좌표를 정수로 판정하면 클릭이 조용히 죽는다

부스는 멀쩡히 보이는데 가운데가 안 눌렸다. 반칸 좌표와 정수 칸 번호가 어긋난 자리를 네 곳 고쳤다.

화면에 멀쩡히 그려진 걸 눌렀는데 아무 일도 안 나면, 보통 클릭 핸들러를 의심한다. 나도 그랬다.

2026-08-26. 지도 편집기를 손보고 있는데 사용자가 이렇게 말했다.

"A91 ~ A97번까지 부스 중앙 클릭하면 클릭 안됨. 하단클릭해야만 클릭됨."

부스는 그려져 있다. 이름도 보이고 색도 맞다. 그런데 가운데를 눌러도 아무 일이 없고 오른쪽 아래 귀퉁이에서만 잡힌다.

그 일곱 개만 좌표가 달랐다

자료를 열어 보니 차이가 하나 있었다.

  • 다른 부스들: 자리가 [2, 22] · [8, 2] — 정수
  • A91 ~ A97: 자리가 [2.5, 20.5] — 반칸

클릭 판정은 이렇게 돼 있었다. 칸마다 투명한 사각형을 깔아 두고, 어느 사각형이 눌렸는지로 「몇 번째 칸」을 알아낸 다음, 그 칸에 있는 부스를 찾는다. 칸 번호는 당연히 정수다.

부스가 2.5 에서 시작하는데 판정은 2 를 들고 온다. 2 >= 2.5 는 거짓이다. 미끄러진다.

부스가 차지하는 네 칸 중 오른쪽 아래 하나만 정수 조건을 통과했다. 4분의 3이 죽어 있었다.

내가 깬 게 아니었다

처음엔 내 탓인 줄 알았다. 바로 직전에 확대·축소를 새로 붙였고, 그건 좌표 계산을 건드리는 작업이다. 화면 좌표를 내부 좌표로 바꾸는 자리를 열네 군데 고쳤으니 하나쯤 틀렸겠거니 했다.

그런데 옛 버전 코드를 열어 보니 같은 줄이 그대로 있었다. 내가 만든 게 아니라 원래부터 있던 것이다. 몇 달째 그 상태였고, 반칸 부스를 쓰기 시작한 뒤로 계속 죽어 있었다.

여기서 갈림이 왔다.

  • 자료를 고친다 — 부스들을 정수 자리로 옮긴다. 그러면 도면과 안 맞는다
  • 판정을 고친다 — 칸 번호 대신 마우스가 실제로 있는 위치로 찾는다

바꾼 것

둘째를 골랐다. 투명 사각형은 「어디를 눌렀나」를 알려주는 역할만 남기고, 어느 부스인지는 실제 좌표로 다시 계산하게 했다. 2 대신 2.7 이 들어가니 2.7 >= 2.5 로 통과한다.

고친 자리는 네 곳이었다 — 클릭 · 더블클릭 · 우클릭 · 그리고 「빈 곳을 끌면 여러 개 선택」이 시작되는 판정. 마지막 것 때문에 증상이 더 헷갈렸다. 부스를 눌렀는데 부스로 안 쳐지니 빈 바닥을 끄는 것으로 처리돼서, 눌러도 아무 일 없는 것처럼 보였다.

남은 것

규칙 하나가 생겼다.

자료가 반칸을 쓰기 시작하면, 정수로 만든 판정은 그날부터 조용히 틀린다.

조용하다는 게 핵심이다. 에러가 안 난다. 로그도 안 남는다. 화면에는 부스가 멀쩡히 그려져 있다. 보이는 것과 눌리는 것이 서로 다른 계산에서 나오기 때문이다 — 그리는 쪽은 소수점을 쓰고 판정하는 쪽은 정수를 썼다.

그래서 테스트로도 잘 안 걸린다. 「부스가 렌더된다」는 통과하고, 「클릭하면 선택된다」도 정수 자리 부스로 짜면 통과한다. 반칸으로 놓은 자료가 실제로 들어오기 전까지는 아무도 모른다.

발견한 사람은 결국 그 화면을 매일 쓰는 사람이었다. "하단클릭해야만 클릭됨" — 이 한 줄에 원인이 다 들어 있었다. 아래쪽만 된다는 건 위쪽 경계가 어긋났다는 뜻이니까.

← 목록으로