당신의 계산기 화면에 "5000만"이라고 치면 50,000,000 으로 바꿔 주는 금액 칸을 넣었다고 하자. 시험 삼아 "1억2000만"을 쳐 보니 칸에는 자릿수가 터진 숫자가 찍힌다. 혹은 채팅 앱에서 보내기를 누르는 즉시 입력창을 비우게 바꿨더니, 지하철에서 전송 중에 앱이 꺼진 사용자의 긴 글이 흔적 없이 사라졌다. 둘 다 오류는 나지 않는다.
입력칸의 값은 언제 프로그램의 것이 되나
사람이 아직 쓰는 중인 글은 사람의 것이다 — 프로그램은 그 글이 확정되는 순간(칸을 떠날 때, 보낼 때, 서버가 성공을 돌려줄 때)에만 값을 바꾸거나 지운다. 그 전에 손대면 사람이 친 글과 프로그램이 고친 글이 한 칸에서 섞이고, 아직 어디에도 저장되지 않은 글이 지워진다.
입력칸에는 세 상태가 있다.
- 치는 중 — 글자가 하나씩 들어오고, 한글처럼 조합되는 글자는 아직 완성되지도 않았다
- 확정 — 사람이 칸을 떠나거나 보내기를 눌렀다
- 안전 — 서버가 받았다고 답했다
프로그램이 하는 일(변환·지우기·임시 저장 해제)은 각자 맞는 상태가 있다. 그 상태보다 이르게 하면 깨진다.

키마다 변환하면 왜 숫자가 터지나
"1억2000만"을 한 글자씩 친다고 하자. "1억"까지 쳤을 때 변환기가 100000000 으로 바꾸고, 이어 친 "2"는 그 숫자 뒤에 붙는다. 사람은 한 단위를 쳤는데 칸에는 자릿수가 하나 더 붙은 숫자가 생긴다. 한글 조합 문자도 같다 — 조합 중인 글자를 프로그램이 건드리면 조합이 끊긴다.
- 입력 중에는 친 그대로 보여 준다(변환 결과는 칸 옆에 미리보기로만)
- 변환은 칸을 떠날 때나 보낼 때 한 번 한다 — 웹에서는 키마다 오는
input이벤트가 아니라change이벤트나 제출 시점에 건다 - 키마다 반응해야 한다면 조합이 끝났는지 먼저 본다 — 웹은
compositionend전에는 손대지 않는다 - 변환기는 그 단위를 쓰는 칸에만 건다. 금액 변환기를 비율·소수 칸과 공유하면 소수점이 지워진다
보내자마자 비우면 왜 글이 사라지나
보내기를 누른 순간 글은 확정됐지만 아직 안전하지 않다. 그 사이 네트워크가 끊기거나 앱이 꺼지면, 화면에서도 지워지고 서버에도 없는 글이 된다. 임시 저장이 입력칸 값에 묶여 있으면 임시 저장도 같이 비어 있다.
- 화면의 입력칸은 즉시 비워도 된다(빠른 느낌은 지킨다)
- 그러나 임시 저장은 보낸 글을 서버가 성공을 돌려줄 때까지 따로 들고 있는다
- 실패하면 그 글을 입력칸으로 돌려놓는다
- 전송 중에 사람이 새로 친 글은 따로 두고 지우지 않는다
입력 방식 힌트도 "치는 중"을 바꾼다
키보드에 주는 힌트 하나가 조합 자체를 막기도 한다. 한 모바일 앱에서 맞춤법 제안을 끄는 옵션(Flutter enableSuggestions)을 켰더니, 안드로이드 키보드가 그 칸을 비밀번호 칸처럼 다뤄 한글이 조합되지 않고 영문·숫자만 찍혔다. 키보드 설정 문제로 오진하기 쉽다. 자동 고침만 끄려면 그 기능만 끄는 옵션(autocorrect: false)을 쓴다.
그대로 붙여 쓰는 점검 목록
입력칸마다:
[ ] 키마다 값을 바꾸는 코드가 있는가? → 칸을 떠날 때·보낼 때로 옮긴다
[ ] 조합 문자(한글·일본어·중국어)를 칠 때 조합 중에 값을 건드리는가?
[ ] 변환기를 다른 단위의 칸과 공유하는가?
[ ] 키보드 힌트 옵션이 조합 입력을 막지 않는가? (실기기에서 한글로 친다)
보내기마다:
[ ] 임시 저장이 입력칸 값에 묶여 있는가? → 보낸 글을 따로 든다
[ ] 임시 저장은 서버 성공 뒤에만 풀리는가?
[ ] 실패 시 글이 입력칸으로 돌아오는가?
[ ] 전송 중 새로 친 글이 살아남는가?
시험 순서:
- 단위가 섞인 값("1억2000만", "3천5백만")을 한 글자씩 쳐 본다
- 조합 문자로 쳐 본다 — 에뮬레이터 말고 실제 키보드로
- 보내기를 누르고 곧바로 비행기 모드를 켠 뒤 앱을 강제 종료하고 다시 연다
- 전송이 느린 상태(네트워크 지연)에서 다음 글을 이어 친다
우리가 겪은 세 가지
- 키마다 변환해서 자릿수가 터졌다. 한 계산기 사이트의 금액 칸이 "1억2000만"을 치는 도중 앞부분을 먼저 숫자로 바꿔, 이어 친 글자가 뒤에 붙었다. 데스크톱 전수 시험에서 단위 조합을 한 글자씩 치다가 알았다. 변환을 칸을 떠날 때로 옮겼다.
- 보내자마자 비우니 임시 저장도 비었다. 한 대화 앱에서 입력창을 즉시 비우게 바꾼 뒤 검토하다, 임시 저장이 입력창 값에 묶여 있어 전송 중 앱이 꺼지면 글이 사라진다는 것을 찾았다. 임시 저장이 보낸 글을 서버 성공까지 들게 바꿨다.
- 제안 끄기가 한글을 막았다. 같은 앱의 이름 칸에 한글이 안 쳐져 키보드 설정을 의심했는데, 원인은 칸에 준 제안 끄기 옵션이었다.
세 경우 모두 프로그램은 시킨 대로 했다. 시점이 사람보다 빨랐을 뿐이다.
이전 글캐시는 키와 태그에 적힌 것만 안다 — 결과가 실제로 기대는 입력을 먼저 적고, 키와 무효화 범위를 거기에 맞춘다