노트

Svelte

Svelte

프런트엔드#js · 연결된 개념 5개

쉽게 말하면

Svelte는 빌드할 때 '이 값이 바뀌면 화면의 여기만 고쳐'라는 코드를 미리 만들어 두는 UI 프레임워크예요. 값이 바뀔 때마다 틀린 그림 찾기처럼 이전 화면과 새 화면을 비교하지 않아도 되죠.

비유가 깨지는 곳 컴파일러가 모든 걸 알아서 알아채는 건 아니에요. Svelte 5부터는 $state, $derived 같은 룬으로 어떤 값이 반응형인지 직접 표시해요. 3·4 시절 문법과 달라진 점이 많아서 자료를 볼 때 버전을 확인해야 해요.

컴포넌트를 빌드할 때 DOM(Document Object Model)을 직접 바꾸는 JS(JavaScript)로 컴파일하는 UI 프레임워크. React처럼 런타임에 가상 DOM(Virtual DOM)을 비교하지 않고, 어떤 값이 바뀌면 어떤 DOM을 고칠지 컴파일러가 미리 코드로 만들어 둔다. 앱 프레임워크는 SvelteKit이다.

마크업 블록

{#await promise}
  <p>불러오는 중…</p>
{:then items}
  {#each items as item}<li>{item}</li>{/each}
{:catch error}
  <p>{error.message}</p>
{/await}

Promise를 마크업에서 바로 다룬다. React의 Suspense와 use()가 하는 일을 템플릿 문법으로 푼 셈이다. 내장 HTTP 클라이언트는 없어서 fetch를 쓴다.

특수 요소

  • svelte:window, svelte:body, svelte:document: 전역 객체의 이벤트와 값(scrollY 등)을 선언적으로 바인딩한다. 컴포넌트가 사라지면 리스너도 자동으로 정리된다
  • svelte:head: 페이지 제목처럼 head 안의 태그를 컴포넌트에서 바꾼다 → generateMetadata와 비교
  • 모듈 스크립트(<script module>)는 인스턴스마다가 아니라 모듈이 처음 평가될 때 한 번만 실행되어, 인스턴스 사이에 값을 공유하는 데 쓴다

Svelte 5에서 바뀐 점(2026 기준)

Svelte 5는 반응성을 $state, $derived, $effect 같은 룬(Runes)으로 바꿨고, 옛 문법 몇 가지가 바뀌었다.

  • 모듈 스크립트: context="module" → module 속성
  • 동적 컴포넌트: svelte:component this={X} 없이 컴포넌트 변수를 바로 태그로 쓴다
  • 재귀 컴포넌트: svelte:self 대신 자기 자신을 import해서 쓴다
  • 이벤트: on:click 디렉티브 대신 onclick 속성

옛 자료(Svelte 3·4)를 볼 때는 이 차이를 감안해야 한다. $derived가 의존성을 자동으로 추적하는 방식은 Vue의 computed와 비슷하다.

출처: Svelte 공식 문서 · Svelte 5 migration guide

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • Tailwind CSS

    flex, px-4, text-sm처럼 속성 하나를 담은 유틸리티 클래스(Utility Class)를 마크업에 조합해 스타일을 입히는 CSS 프레임워크. 빌드할 때 소스를 훑어 실제로 쓰인 클래스의 CSS만 만들어 내는 빌드 도구이고, 런타임에 돌아가는 JS(JavaScript)는 없다.

  • 선언형과 명령형 프로그래밍

    명령형(Imperative)·절차적(Procedural) 프로그래밍은 결과에 도달하는 방법(how)을 단계별로 지시하고, 선언형 프로그래밍(Declarative Programming)은 원하는 결과(what)만 기술하고 과정은 도구에 맡긴다. 길 안내로 치면 "직진하다 두 번째 신호에서 우회전"이 명령형, "강남역 가 주세요"가 선언형이다.

  • React Compiler

    React Compiler는 빌드 타임에 컴포넌트와 훅을 분석해 메모이제이션(Memoization) 코드를 자동으로 넣어 주는 컴파일러다. 개발자가 손으로 붙이던 useMemo·useCallback·memo를 대신한다. 2025년 10월 1.0이 나왔다.

  • Activity와 숨겨진 라우트 보존

    Activity는 React 19.2의 컴포넌트로, UI를 언마운트하지 않고 display: none으로 숨기면서 state와 DOM(Document Object Model)을 보존한다. 숨기는 동안 Effect는 정리(cleanup)된다. 예전 이름은 Offscreen이다.

  • TypeScript 개요

    TypeScript는 JavaScript에 정적 타입(Static Typing)을 더한 슈퍼셋(superset) 언어다. 브라우저는 TS를 그대로 실행하지 못하므로, 타입을 검사한 뒤 타입 표기를 지운 JavaScript로 컴파일된다. 타입 표기는 프로그램의 런타임 동작을 바꾸지 않는다.

보기 옵션