다른 플랫폼 IME

Electron, React Native 등에서 IME·composition 다루기 요약

웹 브라우저가 아닌 Electron·React Native 등에서 IME를 다룰 때 composition 이벤트 유무와 주의점을 요약한다. 상세는 각 플랫폼 공식 문서를 참고한다.


1. Electron

  • 구조: Electron 앱은 Chromium 기반이므로, 웹뷰(또는 메인 창) 안의 HTML 입력 요소에서는 브라우저와 동일하게 CompositionEvent·InputEvent가 발생한다.
  • 처리: 에디터 IME 구현 가이드와 동일하게 compositionstart·compositionupdate·compositionendinput(insertText)을 처리하면 된다. OS별 차이(Windows TSF, macOS NSTextInputClient)는 Chromium이 흡수한다.
  • 주의: nodeIntegration·contextIsolation 등 보안 설정에 따라 이벤트 동작이 바뀌지는 않으나, input 요소가 포커스를 받을 수 있는지(창·웹뷰 설정)는 확인한다. native 입력이 아닌 웹 콘텐츠 내 입력이면 웹 IME 문서를 그대로 적용하면 된다.
  • 참고: Electron 문서, Chromium IME

2. React Native

  • 구조: React Native는 네이티브 입력 컴포넌트(iOS UITextField/UITextView, Android EditText)를 사용한다. 웹의 CompositionEvent와 동일한 이벤트가 노출되지 않을 수 있다.
  • 동작: 플랫폼별로 onChangeText·onCompositionStart 등이 제공되는지, 조합 중commit을 구분할 수 있는지 React Native 문서·버전을 확인한다. 일부 시나리오에서는 한 번에 최종 문자열만 전달될 수 있다.
  • 웹뷰 사용 시: React Native WebView 안에 contenteditable 또는 input을 두고 IME를 처리하면, 웹과 동일한 composition 이벤트를 쓸 수 있다. 단 WebView 성능·접근성은 별도로 검토한다.
  • 참고: React Native TextInput, React Native WebView

3. CLI·터미널

  • 터미널에서는 줄 단위 입력이 많고, OS/터미널이 IME를 처리한 뒤 한 줄이 완성되면 앱에 전달되는 경우가 많다. composition 이벤트와 같은 중간 상태를 앱이 받지 않는 환경이 많다.
  • ncurses·readline 등은 플랫폼별로 편집 버퍼·preedit을 다루는 API가 다를 수 있다. IME 상세는 해당 라이브러리·OS 입력 스택 문서를 참고한다.
  • 웹 IME 가이드브라우저·웹뷰 환경을 전제로 하므로, CLI 전용 요약은 이 문서 범위 밖이다.

4. 참고