원격 화면제어로 한글 입력 중 스페이스를 치면 띄어쓰기가 안 되는 이유 — 유니코드 문자 채널과 IME 조합

원격 화면제어로 노드 PC에 한글을 입력하다 스페이스를 치면 띄어쓰기가 되지 않고 뒤에 친 글자가 커서 위치를 벗어나 써진다. 스페이스가 KEYEVENTF_UNICODE 문자 채널로 들어가면서 노드 IME가 조합 종료 키로 인식하지 못한 것이 원인이다.

증상

원격 화면제어로 노드 PC의 입력창(예: Claude 데스크톱 앱 입력창)에 한글을 치다가 스페이스를 누르면 띄어쓰기가 되지 않는다. 이어서 친 글자는 커서 다음이 아니라 입력창 아래쪽에 써진다. 입력창에 "일단"까지 친 뒤 스페이스를 치면 이 현상이 재현된다.

원인

이전 작업(OR-2119)에서 스캔코드가 재현하지 못하는 특수문자를 위해 유니코드 문자 채널({t:'u'}, KEYEVENTF_UNICODE)을 추가하면서, 스페이스도 이 채널로 가게 됐다.

매니저 RemoteControlTab.tsx의 키 분기는 "인쇄 가능한 단일 문자이면서 영문자·숫자가 아니고 Ctrl·Alt·Meta가 눌리지 않았을 때" 문자 채널로 보낸다. 스페이스(' ', 0x20)가 이 조건에 걸린다.

노드 remote 빌드가 171 이상이면 스페이스는 {t:'u', c:32}로 나가고, 노드 input.cpp의 sendUnicodeCodepoint가 KEYEVENTF_UNICODE(VK_PACKET)로 주입한다.

한글은 노드 IME가 스캔코드로 받은 자모를 조합한다. 스페이스가 VK_SPACE 스캔코드가 아니라 VK_PACKET 문자로 들어가면 IME가 이를 조합 종료 키로 받지 않는다. 그래서 "단" 조합이 끝나지 않은 채 공백이 따로 들어가고, 뒤에 친 자모가 조합창 위치에 써진다.

OR-2119의 수정 계획도 "영문자·숫자·방향키·기능키·단축키는 스캔코드 경로를 유지해 노드 IME의 한글 조합은 그대로"를 전제로 했다. 스페이스는 그 목록에서 빠져 있었다. input.cpp 주석도 문자 채널을 "스캔코드가 재현 못 하는 특수문자 전용"이라고 적고 있다.

171 미만 노드는 스캔코드로 폴백하므로 이 문제가 생기지 않는다(OR-2119 이전 동작).

수정 방향

매니저에서 스페이스(0x20)를 문자 채널 대상에서 빼고 스캔코드({t:'k'}, VK_SPACE) 경로로 보낸다. 조건에 한 줄만 추가하면 되고, 노드 수정과 재배포는 필요 없다.

확인이 필요한 부분도 있다. 한글 조합 직후의 문장부호(. , ? !)도 같은 문자 채널로 들어간다. 조합이 끝나지 않고 순서가 뒤바뀌는지 같은 조건에서 확인하고, 깨지면 스캔코드로 재현 가능한 US 레이아웃 기호는 스캔코드로 돌리는 것을 검토한다.

검증

  • 노드 remote 171 이상·노드 IME 한글 모드에서 "일단 해보자" 입력 → 띄어쓰기가 들어가고 커서 위치에 이어 써지는지 확인
  • 영문 모드 스페이스, Ctrl+Space, 171 미만 노드 동작이 그대로인지 확인

관련 코드

  • 매니저: web/manager-web/src/components/widgets/nodeInfo/tabs/RemoteControlTab.tsx 키 분기(asciiAlnum 조건, RC_UNICODE_MIN_BUILD = 171)
  • 노드: orange-remote/agent/input.cpp의 sendUnicodeCodepoint, t == "u" 처리
  • 원인이 된 변경: OR-2119(매니저 cc700e55, remote 3fba5d1 v0.1.0.171)

Orange Platform 원격 화면제어의 한글 입력 조합 문제 분석에 관한 기술 리포트입니다.