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

ThorVG Viewer In VS Code

Avatar for Nor-s Nor-s
December 23, 2025

ThorVG Viewer In VS Code

ThorVG Viewer를 VS Code Webview 확장으로 포팅한 사례를 소개합니다.

Avatar for Nor-s

Nor-s

December 23, 2025
Tweet

Other Decks in Programming

Transcript

  1. ThorVG Viewer 확장 개발 배경 동작 표현 자동화 복잡한 애니메이션

    단순화 재사용 가능 그래프,차트 등 동적 표현 출처: adobe.com
  2. ThorVG Viewer 확장 개발 배경 표현식이 ThorVG 엔진에서 돌아가는 방식을

    알고 싶다 -> 관련 이슈를 분석하면서 이해해보자
  3. ThorVG Viewer 확장 개발 배경 표현식을 수정하면서, 결과를 즉각적으로 볼

    수 있으면 엔진 분석을 더 재미있고, 편하게 할 수 있지 않을까?
  4. ThorVG Viewer 확장 개발 배경 ThorVG 엔진을 사용하는 뷰어 표현식

    수정이 가능해야 함 엔진 교체가 쉬워야 함 실행이 간편해야함
  5. ThorVG Viewer 확장 개발 배경 • ThorVG 엔진을 사용하는 뷰어

    • 표현식 수정이 가능해야 함 • 엔진 교체가 쉬워야 함 • 실행이 간편해야 함 • thorvg.viewer • VS Code Editor • WebAssembly • VS Code Extension
  6. 2. ThorVG Viewer 확장 개발 2.1 VS Code 확장 개발

    환경 설정 2.2 기능 추가하기 2.3 웹뷰 API 2.4 웹뷰 패널 생성 2.5 웹뷰 <-> 확장 통신
  7. AI 와 함께하는 VS Code 확장 개발 기획 (Plan) 요청

    검증 반영 1) 기획 및 요청 • VS Code 확장 개발에 대한 Plan • 기존 웹앱을 VS Code 확장으로 포팅, 파일 업데이트시 자 동 업데이트 등 기능 요청 2) 프롬프트 결과 검증 • 리뷰, 실행 -> 동작 여부 확인 • 디버깅 또는 재요청 3) 반영 • 변경 사항 커밋
  8. VS Code 확장 개발 환경 설정 npx --package yo --package

    generator-code -- yo code 출처: vscode
  9. 기능 추가하기: Command Command - Contribution Point: Command 선언 -

    VS Code API: Command 에 함수 바인딩 출처: vscode
  10. 기능 추가하기: extension.ts Entrypoint 인 extension.ts 의 activate 에서 VS

    Code API registerCommand 사용 package.json 에 선언한 Command 실행시 호출될 함수 정의
  11. 기능 추가 결과 디버깅시, Ctrl + Shift + P 명령어

    팔레트에서 Command 추가된 것을 확인 가능
  12. webview.html 웹뷰 html 을 렌더링 하기 위해서는 Resource 경로 asWebviewUri

    사용 Resource 경로 WebviewOptions 에 지정 다른 프로세스로부터 격리된 샌드박스화된 환경에서 실행되기 때문 출처: vscode
  13. 웹뷰 HTML 설정 Html 을 string으로 가져온 후 <base> 태그를

    삽입 Content-Security-Policy(CSP) 웹뷰가 로드할 수 있는 콘텐츠 출처 제한
  14. VS Code 내부 구조 확장 프로그램과 웹뷰는 서로 직접적인 함수

    호출이나 변수 공유 불가 오직, 비동기 메시지 교환을 통해서만 가능 출처: vscode
  15. postMessage, onDidReceiveMessage VS Code -> Extension: • vscode.window.onDidChangeActiveTextEditor • vscode.workspace.onDidChangeTextDocument

    • 리스너를 통해, 파일 관련 변경 처리 Extension -> Webview: • 확장에서 webview.postMessage 사용, 데이터를 JSON 직렬화 형태로 보냄 • 웹뷰에서 window.addEventListener 를 통해 메시지 처리 Webview -> Extension: • 웹뷰에서 acquireVsCodeApi 함수 호출하여, API 객체 얻은 뒤, postMessage 로 데이터 보냄 • 확장에서 panel.webview.onDidReceiveMessage 를 통해 메시지 처리
  16. Webview 생명 주기, 상태 관리 생명 주기 • 웹뷰 패널이

    사용자에 의해 닫히거나, dispose() 가 호출되면, 웹뷰는 파괴 • 백그라운드 탭 -> iframe 은 파괴, 포커스 -> webview.html 다시 생성 상태 저장 • setState(), getState(), WebviewPanelSerializer 구현 -> 재시작시 상태 복원, • retainContextWhenHidden -> 다른 패널에 가린 경우에도, 메모리 유지
  17. 마치며 생산성 도구로서의 AI • 새로운 개발 환경을 접할 때

    빠른 이해와 구현에 큰 도움을 줌 • 아직까지는 AI가 생성한 코드가 유지보수에 최적이라고 보기는 어려움 AI × VS Code 확장 • AI를 활용해 개발을 직접 돕는 생산성 툴을 만드는 접근이 효과적 • 특히 기존 웹 기반 툴을 VS Code 확장으로 만드는 것은 실용적 • 개발 중 별도의 툴을 실행할 필요 없이, 익숙한 개발 환경 안에서 바로 사용 가능 Webview 확장의 장점 • 기존 웹앱 또는 WASM 코드만 업데이트해도 확장 기능에 바로 반영 가능 • 유지보수 부담은 낮추고, 개발 효율은 높일 수 있음 AI 가 작성한, 유지보수 하기 어려운 코드 예시 : thorvg.viewer 의 html 을 복사/붙여넣기