Upgrade to Pro — share decks privately, control downloads, hide ads and more …

모던 웹 기술로 C++ 렌더링 엔진 테스트 자...

모던 웹 기술로 C++ 렌더링 엔진 테스트 자동화하기

Jinny You

August 24, 2024
Tweet

More Decks by Jinny You

Other Decks in Programming

Transcript

  1. 발표자 소개 유진의 (Jinny You) • LottieFiles , SW 엔지니어

    (lottiefiles.com) · Lottie 애니메이션을 위한 차세대 Player 개발 • ThorVG Project 메인테이너 (thorvg.org) · 초경량 벡터 그래픽스 엔진 개발 - https://github.com/tinyjin - https://speakerdeck.com/tinyjin - https://www.linkedin.com/in/jinui
  2. 세션에서 다루는 내용 1. Frontend 기술로 어떻게 완벽한 테스트 오토메이션을

    만들 수 있을까요? - FE 기술과 테스트 오토메이션, 뭔가 어색한 조합이죠? - 실제 사례를 통해 FE 기술이 테스트 자동화 시스템을 구축하는 전 과정을 살펴보아요 2. React가 네이티브 소프트웨어를 확장한다고? - C++로 개발된 네이티브 소프트웨어를 React로 확장해보아요 - 웹 페이지 개발을 넘어 React를 극한으로 활용하는 사례를 보여드릴게요 3. 결국은 Web 개발의 미래에 대한 이야기 (feat. WASM) - 웹 기술은 이미 브라우저를 벗어나 다양한 곳에서 활약하고 있어요 - 웹 어셈블리를 등에 업고 이제 Web은 네이티브 소프트웨어를 확장하고 있죠
  3. 벡터 애니메이션 레이어 구성 요소 - Shape - Fills -

    Strokes - Transforms - Effects - Text - Image …
  4. 주요 피쳐들에 대한 테스팅을 통해 결함을 사전에 발견해보자 애니메이션 렌더링

    적합성 테스트의 필요성 벡터 애니메이션 구성 요소
  5. 사람이 수동으로 테스트하니 1. 매번 테스트 셋을 교체할 때 마다

    새롭게 빌드해야하고 2. 프레임 단위로 일일이 체크하기가 어려움 3. 무엇보다 눈이 피로하기에 하루에 확인할 수 있는 양의 제약이 따른다
  6. - 빠른 검증(PoC)이 필요하고 - C++ 보다는 생산성이 좋은 언어가

    필요… - 다양한 생태계의 활용이 필요했음 파이프라인 개선
  7. - 빠른 검증(PoC)이 필요하고 - C++ 보다는 생산성이 좋은 언어가

    필요… - 다양한 생태계의 활용이 필요했음 파이프라인 개선
  8. - 빠른 검증(PoC)이 필요하고 - C++ 보다는 생산성이 좋은 언어가

    필요… - 다양한 생태계의 활용이 필요했음 파이프라인 개선
  9. 그런데 이를 위해 ‘C++ 기반의 소프트웨어를 웹에서 구동할 수 있어야

    한다’라는 전제조건이 필요 파이프라인 개선
  10. 스택 기반 가상머신에서 구동 - 메모리 관리의 간소화 - 실행

    효율 증가 - 호환성 증가 웹어셈블리의 개요
  11. 웹의 유일한 저수준 언어 - 🎨 그래픽 처리 - 🎮

    게임 프로세스 - ⏳ 실시간 처리 웹어셈블리의 개요
  12. - C/C++ 프로그램을 웹에서 실행하도록 지원 - JavaScript의 느린 속도를

    보완하기 위해 개발 - HTML, CSS, JS를 잇는 웹의 4번째 공식 언어 웹어셈블리의 개요
  13. WASM 전환 사례 2: 굿노트 iOS 전용 앱이었던 Swift 기반

    굿노트 앱을 WASM 전환을 통해 웹, 안드로이드, 윈도우 플랫폼을 지원
  14. Emscripten으로 WASM 컴파일 기본적으로 두 가지의 파일이 생성 - WASM

    바이너리 파일 : C++을 컴파일한 바이너리 파일 - JS 글루 코드 - WASM을 좀 더 쉽게 사용할 수 있도록 제공 - 바이너리를 직접 로드하지 않고, 본 JS 파일을 import 하는 것으로 WASM 호출이 가능 *글루 코드(Glue Code) : 서로 다른 언어를 접착시키는 언어, 호환성을 위해 제공된다.
  15. 글루코드와 WASM 바이너리를 통해 JS 상에서 C++ 네이티브 API의 호출이

    가능 글루 코드는 WASM을 가리킴 Emscripten으로 WASM 컴파일
  16. GUI와 CLI가 지원되는 인터페이스 - 일부 테스트 셋에 대해서 꼼꼼한

    확인이 필요 → GUI - 대량의 테스트 케이스에 대한 배치처리도 필요 → CLI
  17. 무엇보다 인력이 적은 조직에서 최소한의 공수로 구현할 수 있어야 함

    오토메이션 개발이 주업무는 아니므로 다양한 라이브러리 생태계의 도움이 필요
  18. - React 페이지로 손쉽게 GUI 툴 개발 - 헤드리스 브라우저로

    CLI까지 구현 가능 - React와 Web이 가진 NPM 생태계로 네이티브 개발 대비 적은 공수로 빠른 구현 React로 만드는 자동화 시스템
  19. 관련한 Plugin이 있지만 오류가 있으며 업데이트가 느림 (아직은 WASM 개발이

    성숙해지고 있는 과정이므로…) React에서 WASM 활용하기
  20. 로드시마다 useEffect 훅으로 별도로 로딩 - WASM을 import 하는 부분에서

    지나친 코드가 발생 - 코드 사용성에 대한 일관성 저하 React에서 WASM 활용하기
  21. “-sSINGLE_FILE=1” WASM 바이너리를 글루코드와 함께 JS 확장자로 컴파일 → CDN

    및 스트리밍 서버 구현이 불필요 React에서 WASM 활용하기 SINGLE_FILE
  22. WASM 모듈로 네이티브 런타임을 Web 환경에 로드 → 픽셀 검사를

    통해 오류 검출 React로 만드는 자동화 시스템
  23. 픽셀 검사는 기존 NPM 저장소의 다양한 라이브러리 중 가장 사용이

    간편한 라이브러리 사용 → 웹 생태계 레버리지 → 빠른 PoC 가능 React로 만드는 자동화 시스템
  24. Resemble.JS는 단 몇줄의 코드로 래스터 데이터간의 차이를 비교하고 → 관련한

    수치 및 시각화를 제공 React로 만드는 자동화 시스템
  25. 사람의 눈으로는 확인하기 어려운 미세한 오류까지 자동으로 탐지 1. 눈으로

    식별안되는 색감차이 2. 렌더링 시작위치 오류 3. 획 너비 사이즈 오류 React로 만드는 자동화 시스템
  26. 다수 애니메이션에 대한 적합성을 손쉽게 검사할 수 있는 GUI기반의 테스트

    오토메이션이 탄생 React로 만드는 자동화 시스템
  27. 대부분의 웹 페이지는 PDF 출력을 지원 웹 페이지는 그 자체로

    문서의 양식을 갖춤. → 페이지를 PDF로 Export 결과 분석 및 리포트
  28. html2canvas, jspdf 등 또 한 번 NPM 생태계의 패키지들을 적극

    활용 단 몇줄의 코드로 HTML을 이미지화하여 PDF로 출력 결과 분석 및 리포트
  29. - 테스트 셋이 많아서 GUI 툴 쓰는 것 조차 피곤해요

    - 어차피 자동으로 레포트가 생성된다면, 결과만 받으면 됨 - 특정한 이벤트에 트리거되어, 자동으로 테스트가 진행되면 좋겠어요 (GitHub Action, CI/CD 환경 등) CLI는 언제 필요할까요?
  30. 그래픽 인터페이스가 없는 웹 브라우저 - GUI 없이 페이지를 조작하도록

    지원 - CLI에서도 DOM 액세스를 통해 컨트롤 - 웹 페이지 테스팅에 주로 사용 헤드리스 브라우저
  31. - Headless Chrome - DevTools 접근 및 웹 드라이버를 제공

    - Node.JS 기반으로 기존 웹 프로젝트에 쉽게 통합 가능 Puppeteer 라이브러리
  32. 브라우저 구동 대비 간소화된 프로세스 필요한 경우 GitHub Action이나 클라우드

    서버에서 CI/CD 배포 툴과 응용 가능 헤드리스 브라우저로 CLI 지원하기
  33. - React의 간결함으로 빠른 페이지 기반 PoC - React 페이지

    자체로 GUI 툴과 PDF까지 지원 - NPM 생태계를 레버리지하여 필요한 기능이 무엇이든 단 몇줄의 코드로 구현 결과
  34. 페이지 기반으로 GUI부터 제작 웹 기술로 빠르게 프로토타입 제작 후

    CLI까지 포팅 → 익숙하고 쉬운 방식으로 빠르게 결과 도출
  35. React로 시작하는 쉽고 빠른 GUI Tooling - 웹 페이지는 자체로

    문서의 양식을 갖춤 - 헤드리스 브라우저로 CLI까지 지원 정리하기
  36. NPM과 웹 생태계로 빠르고 효율적인 PoC - 어떤 기능이든 NPM에

    이미 구현이 되어있음 - JS/TS로 네이티브 언어보다 더 빠른 생산성 정리하기
  37. C/C++ 개발시에도 웹 개발의 생태계를 적극 활용 - WASM은 네이티브와

    웹을 이어주는 징검다리 - 웹 개발자의 참여, JS 및 Web 생태계로 확장 정리하기