Emscripten을 한 줄로 말하면
Emscripten은
C/C++ 코드를 WebAssembly와 JavaScript 런타임 형태로 빌드할 수 있게 해주는 툴체인이다.
즉, 단순히 .wasm 파일 하나를 만드는 도구가 아니라
웹 환경에서 실행되도록 연결해주는 전체 빌드 흐름에 가깝다.
왜 필요한가
C/C++ 코드를 Wasm으로 만든다고 해서 바로 브라우저에서 잘 도는 것은 아니다.
실행 환경에는
- 메모리 초기화
- 런타임 보조 코드
- JS와의 연결
- 입출력 처리
같은 요소들이 필요하다.
Emscripten은 이런 부분을 함께 다뤄준다.
Emscripten이 하는 일
1. 컴파일
C/C++ 코드를 LLVM 기반으로 Wasm 타겟으로 컴파일한다.
2. 런타임 연결
필요한 JS glue code와 함께 묶어서 실행 가능하게 한다.
3. 디버깅 / Sanitizer 지원
AddressSanitizer 같은 도구를 Wasm 환경에서도 활용할 수 있게 도와준다.
내가 Emscripten을 보며 느낀 점
Emscripten을 그냥 "번역기"처럼 생각하면 구조가 잘 안 보인다.
실제로는 네이티브 코드를 웹 실행 환경으로 옮겨주는 브리지에 가깝다.
특히 실험을 하다 보면
- LLVM IR 단계
- Wasm 생성 단계
- 후처리 단계
- 실행 단계
가 한 번에 연결돼 있다는 걸 느끼게 된다.
정리
WebAssembly를 실제로 써보려면
Wasm 자체만 아는 것으로는 부족하고,
그걸 어떻게 빌드하고 실행할지까지 알아야 한다.
그 역할을 가장 직접적으로 보여주는 도구가 바로 Emscripten이라고 생각한다.