브라우저에서 한글 채팅이 물음표가 될 때
모아보기 · 개발 기록 · 블로그 공개
조합 중인 글자와 메시지 전송을 구분했습니다.

이름이 물음표로 도착했습니다
Unity Web에서 입력한 한글 이름과 채팅이 실제 전송 과정에서 물음표로 바뀌는 문제를 재현했습니다. 화면의 입력칸과 서버로 가는 값이 다를 수 있었습니다.

수정 후 실제 양방향 한국어 채팅
HTML 입력과 조합 상태
브라우저의 HTML 입력을 연결하고, 조합 중 누른 Enter와 전송을 확정하는 Enter를 구분했습니다. Unity로 키보드 포커스를 돌려주는 동작도 맞췄습니다.
입력부터 전송까지
한글이 입력칸에 보이는 것뿐 아니라 메시지로 전달되는 값까지 확인하는 방향으로 테스트했습니다.
글자를 만드는 순간과 보내는 순간
한글을 입력할 때에는 사용자가 아직 글자를 조합 중인 상태와 입력을 끝낸 상태가 구분됩니다. 이때 Enter가 들어오면 후보를 확정하는 동작일 수 있고, 이미 조합을 마친 다음이라면 전송 동작일 수 있어요. 둘을 같은 사건으로 처리하면 문장이 완성되기 전에 잘린 채 나가거나, 사용자가 조합을 마치려고 눌렀는데 게임이 메시지를 먼저 전송할 수 있어요. HTML 입력을 연 이유는 브라우저에서 발생하는 이 상태를 입력 단계에서 유지하기 위해서였습니다.
채팅에 포커스가 가 있는 동안에는 W 같은 키가 게임 캐릭터 이동으로 새어 나가면 안 됩니다. 창을 닫은 뒤에는 반대로 게임이 다시 키를 받아야 합니다. 입력칸에 한글이 보이는지만 확인하면 두 번째 문제가 숨을 수 있으므로, 입력을 열고 한글을 조합하고 전송한 다음, 창을 닫고 게임으로 돌아오는 순서까지 한 번에 따라가는 편이 좋습니다.
브라우저에서 입력한 값과 게임이 받은 값, 다른 화면에 도착한 값을 순서대로 구분하면 물음표가 생기는 지점도 좁힐 수 있어요. 이름과 채팅이 같은 경로를 쓰게 한 뒤에도 빈 입력, 영문과 한글이 섞인 문장, 조합을 마칠 때의 Enter처럼 경계 사례를 별도로 볼 수 있어요. 당시 글에 첨부한 화면은 한글이 양쪽 채팅에 보인 결과이며, 모든 언어의 조합 규칙을 같은 방식으로 검증한 결과는 아닙니다.
또 하나의 비교 지점은 입력창을 닫았다가 다시 여는 경우입니다. 이전에 조합하던 글자가 다음 메시지에 남거나, 포커스가 돌아오지 않아 이동이 멈추는 일이 있다면 전송에 성공한 화면만으로는 찾기 어렵습니다. 같은 브라우저에서 두 번째 메시지를 보내는 절차를 같이 보면 이런 상태가 드러납니다.
제가 쓴 말이 그대로 도착해야 해요
입력창에서는 한글이 보였는데 상대 화면에는 물음표가 뜨면, 보내는 사람은 그 차이를 알아차리기 어렵습니다. 한글을 조합하려고 누른 Enter와 메시지를 보내려고 누른 Enter도 같은 동작으로 처리할 수 없었어요. 그래서 입력창 안의 글자, 실제 전송값, 상대가 받은 문장을 따로 살펴봤습니다.