inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

웹 개발의 혁신: C, C++, Rust로 시작하는 WebAssembly 마스터 클래스

Qt Designer 를 이용한 Hello World 출력 예제 구현

테스트 배포시 에러가 발생합니다.

120

geekgleeguru

작성한 질문수 7

0

스크린샷 2025-06-15 오후 4.32.21.png.webp

 

스크린샷 2025-06-15 오후 4.32.28.png.webp

 

http://127.0.0.1:3305/ex03_hello_world_designer.html 주소로 이동했습니다.
ex03_hello_world_designer.js:9 Uncaught (in promise) DataCloneError: Failed to execute 'postMessage' on 'Worker': SharedArrayBuffer transfer requires self.crossOriginIsolated.
    at ex03_hello_world_designer.js:9:16758
    at new Promise (<anonymous>)
    at loadWasmModuleToWorker (ex03_hello_world_designer.js:9:15451)
    at Array.map (<anonymous>)
    at Object.loadWasmModuleToAllWorkers (ex03_hello_world_designer.js:9:16962)
    at ex03_hello_world_designer.js:9:14758
    at ex03_hello_world_designer.js:9:17642
    at Array.forEach (<anonymous>)
    at callRuntimeCallbacks (ex03_hello_world_designer.js:9:17631)
    at preRun (ex03_hello_world_designer.js:9:7603)
(익명) @ ex03_hello_world_designer.js:9
loadWasmModuleToWorker @ ex03_hello_world_designer.js:9
loadWasmModuleToAllWorkers @ ex03_hello_world_designer.js:9
(익명) @ ex03_hello_world_designer.js:9
(익명) @ ex03_hello_world_designer.js:9
callRuntimeCallbacks @ ex03_hello_world_designer.js:9
preRun @ ex03_hello_world_designer.js:9
run @ ex03_hello_world_designer.js:9
runCaller @ ex03_hello_world_designer.js:9
removeRunDependency @ ex03_hello_world_designer.js:9
receiveInstance @ ex03_hello_world_designer.js:9
receiveInstantiationResult @ ex03_hello_world_designer.js:9
Promise.then
(익명) @ ex03_hello_world_designer.js:9
Promise.then
instantiateAsync @ ex03_hello_world_designer.js:9
createWasm @ ex03_hello_world_designer.js:9
(익명) @ ex03_hello_world_designer.js:9
qtLoad @ qtloader.js:231
await in qtLoad
init @ ex03_hello_world_designer.html:53
onload @ ex03_hello_world_designer.html:24
http://127.0.0.1:3305/ex03_hello_world_designer.html 주소로 이동했습니다.
ex03_hello_world_designer.js:9 Uncaught (in promise) DataCloneError: Failed to execute 'postMessage' on 'Worker': SharedArrayBuffer transfer requires self.crossOriginIsolated.
    at ex03_hello_world_designer.js:9:16758
    at new Promise (<anonymous>)
    at loadWasmModuleToWorker (ex03_hello_world_designer.js:9:15451)
    at Array.map (<anonymous>)
    at Object.loadWasmModuleToAllWorkers (ex03_hello_world_designer.js:9:16962)
    at ex03_hello_world_designer.js:9:14758
    at ex03_hello_world_designer.js:9:17642
    at Array.forEach (<anonymous>)
    at callRuntimeCallbacks (ex03_hello_world_designer.js:9:17631)
    at preRun (ex03_hello_world_designer.js:9:7603)
(익명) @ ex03_hello_world_designer.js:9
loadWasmModuleToWorker @ ex03_hello_world_designer.js:9
loadWasmModuleToAllWorkers @ ex03_hello_world_designer.js:9
(익명) @ ex03_hello_world_designer.js:9
(익명) @ ex03_hello_world_designer.js:9
callRuntimeCallbacks @ ex03_hello_world_designer.js:9
preRun @ ex03_hello_world_designer.js:9
run @ ex03_hello_world_designer.js:9
runCaller @ ex03_hello_world_designer.js:9
removeRunDependency @ ex03_hello_world_designer.js:9
receiveInstance @ ex03_hello_world_designer.js:9
receiveInstantiationResult @ ex03_hello_world_designer.js:9
Promise.then
(익명) @ ex03_hello_world_designer.js:9
Promise.then
instantiateAsync @ ex03_hello_world_designer.js:9
createWasm @ ex03_hello_world_designer.js:9
(익명) @ ex03_hello_world_designer.js:9
qtLoad @ qtloader.js:231
await in qtLoad
init @ ex03_hello_world_designer.html:53
onload @ ex03_hello_world_designer.html:24
스크린샷 2025-06-15 오후 4.32.43.png.webp

 

스크린샷 2025-06-15 오후 4.31.08.png.webp

릴리스 선택후 빌드한 html를 브라우저에 띄워서 테스트 해보니 로딩이 끝나지 않습니다.

실제 브라우저에 배포하려면 설정이 더 필요한걸 까요?

 

qt webassembly wasm

답변 2

0

김대진

안녕하세요. geekgleeguru 님,

에러 메시지와 현재 상황을 보면, Qt for WebAssembly 애플리케이션이 브라우저에서 SharedArrayBuffer 를 사용하려고 시도하는데, 이 기능을 사용하려면 웹 페이지가 crossOriginIsolated 되어야 합니다.

즉, 브라우저에서 로컬 서버(http://127.0.0.1)를 통해 Qt WebAssembly를 실행할 때 필요한 보안 헤더가 빠졌기 때문에 WebAssembly 모듈이 제대로 로딩되지 못하고 로딩 화면에서 멈춰 있는 것입니다.

 

원인:

Qt WebAssembly는 성능 향상을 위해 SharedArrayBuffer를 사용하려고 하며, 이를 위해서는 다음 조건을 모두 충족해야 함:

HTTPS 또는 localhost 에서 서비스되어야 함

HTTP 응답 헤더에 다음 두 항목이 반드시 포함되어야 함:

Cross-Origin-Opener-Policy: same-origin

Cross-Origin-Embedder-Policy: require-corp

혹시 더 궁금한게 있으면 언제든 질문해 주세요.
감사합니다. 김대진 드림.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

geekgleeguru님의 질문에 대한 답변을 드리겠습니다. 현재 “DataCloneError”와 관련된 에러는 WebAssembly 환경에서의 SharedArrayBuffer 사용과 관련이 있습니다. SharedArrayBuffer는 브라우저에서 안전한 환경, 즉 cross-origin isolation이 설정되어야 사용이 가능합니다.

아래 문제 해결을 위한 몇 가지 사항을 정리해 보았습니다.

문제 요약

  • SharedArrayBuffer를 사용할 때 self.crossOriginIsolatedtrue로 설정되어야 합니다.
  • DataCloneError는 브라우저가 메모리를 관리할 수 없는 상태일 때 발생합니다.

해결 방법

  1. 강화된 보안 설정(CORS 및 COOP/COEP 적용):

    • 브라우저에서 cross-origin isolation을 지켜야 하며, 이를 위해 COOP(Cross-Origin Opener Policy)와 COEP(Cross-Origin Embedder Policy) 헤더를 설정해야 합니다.
    • ex03_hello_world_designer.html 파일을 호스팅할 때, 웹 서버 설정에서 다음 헤더를 추가해야 합니다:
      
      Cross-Origin-Opener-Policy: same-origin
      Cross-Origin-Embedder-Policy: require-corp
      

  2. 서버 설정 확인:

    • 이 설정이 적용되려면 파일을 로컬 서버에서가 아닌 실제 서버에서 로드하는 것이 권장됩니다. 기본적인 로컬 파일 접근은 이러한 보호 기능이 적용되지 않기 때문입니다.
    • 가능한 서버 환경:
      • Node.js 서버나 간단한 Python HTTP 서버 등을 사용할 수 있습니다. 예시:
      python3 -m http.server 3305
      
  3. 웹 브라우저의 버전 확인:

    • 최신 브라우저가 필요할 수 있습니다. 특히 WebAssembly와 관련된 최신 보안 업데이트가 필요한 경우입니다.
  4. 테스트 및 디버그:

    • 서버 상에서 페이지를 테스트하고, 브라우저의 개발자 도구의 ‘네트워크’ 탭을 통해서 적절한 헤더가 잘 전달되는지 확인할 수 있습니다.

추가적으로 참고할 자료:

이 해결 방법들이 도움이 되길 바라며, 추가적으로 궁금한 점이 있거나 문제가 지속된다면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Build system의 Obs 에 관한 질문

1

25

2

로드맵 재수강 로드맵 할인문의

1

41

2

강의 재수강 문의

1

53

2

강의 연장 문의

1

77

2

강의 자료 ppt나 pdf 파일은 없을까요?

0

68

1

강의 연장 질문

1

60

2

Rust는 어떻게 컴파일 타임에 dangling reference를 막나요?

0

69

2

22강 후반부와 23강 전반부의 내용이 겹칩니다.

1

58

1

강의 추가 계획 질문

0

74

2

코드 크가가 너무 작은대 이거 화면확대 어떻게 하나요?

0

164

4

강의 자료 pdf 다운로드 할 수 있을까요?

0

91

3

혹시 강의 연장 가능할까요? ㅠㅠ

1

73

2

달력 31일까지 나오지 않음.

1

75

2

parent.width 관련 질문.

1

66

2

custom Widget 강의 에서 알려주신 promoted widgets 질문 드립니다.

1

116

2

소유권 이전과 관련된 질문입니다

0

145

2

QT와 QT Designer에 대한 질문 사항

1

166

2

mutex, incNumber는 global 안붙여도 되는건가요?

1

115

2

UTF8ToString 인코딩 질문있습니다.

1

185

1

build system 선택창

1

309

1

리눅스 개발환경 구성 시 Ubuntu 22.04LTS 필요 여부

1

731

2

강의 노트(PPT) 파일은 제공이 안되는 건가요?

1

407

1

clock 예제 빌드 오류

1

489

1

Wasm windows 개발환경 구축 중 오류

2

701

1