데브허브 | DEVHUB | Ultimate Guide to Building Web Components with Svelte, Theodor Steiner — Svelte Summit Spring 2025Ultimate Guide to Building Web Components with Svelte, Theodor Steiner — Svelte Summit Spring 2025
- 리치 해리스의 웹 컴포넌트에 대한 회의적인 시각을 유머러스하게 제시하며 강연의 흥미를 유발합니다. 😂
- 웹 컴포넌트는 모든 웹 개발의 만능 해결책은 아니지만, 다양한 기술 스택 간 UI 공유 및 강력한 캡슐화가 필요한 특정 사용 사례에서 매우 유용합니다. 🛡️
- 웹 컴포넌트는 Custom Elements, Slots, Shadow DOM과 같은 네이티브 브라우저 API의 총칭으로, 재사용 가능한 UI를 구축하는 데 사용됩니다. 🧩
- 바닐라 자바스크립트로 웹 컴포넌트를 구축하는 것은 복잡하고 많은 코드를 필요로 하며, 수동적인 DOM 조작과 생명주기 관리가 필수적입니다. ✍️
- Svelte는 컴파일러 설정에
customElement: true를 추가하는 것만으로 웹 컴포넌트 생성을 극적으로 단순화하여 코드량을 크게 줄입니다. ✨
- 웹 컴포넌트의 속성(attribute)은 항상 문자열이므로, Svelte 컴포넌트에서 숫자나 불리언과 같은 특정 타입으로 변환하려면
svelte:options customElement={{ props: { propName: 'Type' } }}를 통해 명시적으로 타입을 지정해야 합니다. 🔢
svelte:options를 사용하여 Svelte의 카멜케이스(camelCase) 프롭을 웹의 케밥케이스(kebab-case) 속성으로 매핑하고, 컴포넌트 상태 변경을 속성에 반영(reflect)하도록 설정할 수 있습니다. 🔄
svelte:options는 name(자동 등록), shadow(Shadow DOM 사용 여부), extends(기본 클래스 수정) 등 웹 컴포넌트의 동작을 세밀하게 제어할 수 있는 다양한 추가 설정을 제공합니다. ⚙️
- Svelte 5에서는
host 룬과 dispatchEvent 메서드를 사용하여 웹 컴포넌트에서 네이티브 커스텀 이벤트를 디스패치하는 새로운 방식이 도입되었습니다. 📢
- Svelte는 웹 컴포넌트를 생성할 때, 외부의 빈 커스텀 엘리먼트 래퍼가 내부의 Svelte 컴포넌트의 생명주기를 연결하는 "래퍼 접근 방식"을 사용합니다. 🎁