Cinematic Web — 의도적인 움직임
영화적 웹 경험 구축을 위한 스킬: 사이트가 마치 영화처럼 느껴지며, 스크롤은 카메라가 되고 각 요소는 시간과 무게, 우아함을 가지고 등장합니다. 기본 스택은 Next.js + Tailwind + GSAP + ScrollTrigger + Lenis이지만, 핵심(움직임 시스템)은 순수 HTML/CSS, WordPress/Divi 및 LearnWorlds로 이식 가능합니다.
중심 철학: 영화적 웹사이트는 빠르지 않습니다 — 의도적으로 느립니다. 서두름은 우아함의 적입니다. 코드 한 줄보다 움직임이 먼저 결정되며, 코드는 단지 따를 뿐입니다.
절대 변하지 않는 황금률
세 라이브러리, 세 가지 책임. 이를 혼동하는 것이 모바일에서 떨림과 버그의 가장 큰 원인입니다.
| 라이브러리 | 유일한 책임 | 절대 하지 않는 일 |
|---|---|---|
| Lenis | 부드러운 스크롤 (관성, 스크롤의 '무게') | 요소를 애니메이션하지 않음 |
| GSAP | 요소의 움직임 (위치, 투명도, 크기) | 페이지 스크롤을 제어하지 않음 |
| ScrollTrigger | 오케스트레이션 — 각 애니메이션이 스크롤에서 언제/어떻게 발동할지 | 자체 스크롤 루프를 실행하지 않음 |
그리고 아마추어와 프로를 가르는 결정적 차이: Lenis와 ScrollTrigger는 동일한 시간 루프(gsap.ticker)를 공유해야 합니다. 별도의 RAF(requestAnimationFrame)에서 실행되면 scrub이 떨립니다(jitter). 정식 통합은 assets/lib/lenis-provider.tsx에 있습니다 — 항상 이 패턴을 사용하고, 두 개의 requestAnimationFrame을 따로 사용하지 마십시오.
// 통합의 핵심 (자세한 내용은 references/01-setup.md 참조):
lenis.on('scroll', ScrollTrigger.update); // Lenis가 스크롤할 때마다 ScrollTrigger에 알림
gsap.ticker.add((time) => lenis.raf(time * 1000)); // GSAP이 Lenis의 RAF를 구동 (단일 시간 소스)
gsap.ticker.lagSmoothing(0);
움직임 시스템 (즉흥이 아닌 토큰)
'예술적 다듬기'는 마지막에 눈으로 검토하지 않습니다. 처음부터 assets/lib/motion.ts에 중앙화된 토큰으로 강제됩니다. 모든 애니메이션이 여기서 가져오므로, 다듬기가 결정론적으로 이루어집니다.
표준 지속 시간 (초):
| 토큰 | 값 | 용도 |
|---|---|---|
fast | 0.6 | 절대 최소값. 영화적 요소는 0.6초 미만이면 안 됩니다. |
base | 0.9 | 텍스트 및 이미지의 기본 reveal |
slow | 1.2 | 히어로, 섹션 진입, 숨 고르는 순간 |
epic | 1.8 | 앵커 전환, '카메라 순간' |
표준 가속도 (움직임의 '서명'):
| 토큰 | 값 | 느낌 |
|---|---|---|
out | power3.out | 기본값. 우아하게 감속하는 결정적인 진입 |
inOut | power3.inOut | 갔다가 돌아오는 움직임 (pin, 카메라) |
expo | expo.out | 극적인 reveal, 속도의 높은 대비 |
soft | power2.out | 미묘한 미세 상호작용 |
다듬기 규칙 (5단계): 0.6초 미만의 모든 전환은 연장됩니다.
power또는expo가 아닌ease(예:linear,back,bounce,elastic)는 모두 교체됩니다. 이는 영화적 차분함을 깨뜨리기 때문입니다. 순차적 요소 간stagger: 0.15–0.2초.
워크플로우 — 5단계
순서대로 실행하세요. 각 단계에는 바로 복사해서 쓸 수 있는 완전한 레시피가 담긴 참조 파일이 있습니다. 해당 단계의 코드를 생성하기 전에 참조 파일을 먼저 읽으십시오.
1단계 — 프로젝트 바이블 (AI가 추측하게 두지 마십시오)
컴포넌트를 만들기 전에 규칙을 정립하세요. assets/CLAUDE.md 템플릿을 사용하여 프로젝트 루트에 CLAUDE.md를 생성/업데이트하고, references/01-setup.md 에 따라 스택을 설정하십시오.
- 설치:
gsap @gsap/react lenis(+ 새 프로젝트인 경우 Next/Tailwind). CLAUDE.md에 황금률과 움직임 시스템을 고정.assets/lib/lenis-provider.tsx와assets/lib/motion.ts를 프로젝트로 복사.- 아직 컴포넌트를 생성하지 마십시오. 먼저 기반을 다지십시오.
2단계 — 시네마틱 히어로
첫인상이 분위기를 결정합니다: 첫 상호작용 전에도 긴장감과 유려함이 느껴져야 합니다. 완전한 레시피는 references/02-hero.md 에 있습니다.
- 전체 화면, 배경의 반복 비디오 (이미지 폴백 및 오버레이 포함).
- 텍스트가 부드러운 reveal(mask +
y/opacity,slow+expo.out)로 순차적으로(stagger) 나타납니다. - 사용자가 스크롤을 시작하면 사라지는 스크롤 표시기.
3단계 — '카메라 시선'을 가진 스크롤
마법이 일어나는 곳: 스크롤이 카메라 움직임으로 변합니다. 레시피(pin, 시퀀스, parallax, scrub)는 references/03-scroll-camera.md 에 있습니다.
- ScrollTrigger를 통한 핀 스크롤 섹션.
- 요소가 순차적으로(
stagger0.15–0.2초)power3.out으로 진입. - 제어된 스크롤(
scrub), 느슨한 애니메이션이 아님 — 시간이 사용자의 손가락을 따릅니다.
4단계 — 모바일 혼란 길들이기
복잡한 애니메이션은 우연이 아니라 설계상 모바일에서 깨집니다. 전략은 references/04-mobile-a11y.md 에 있습니다.
gsap.matchMedia()로 데스크탑≠모바일 분리 — 코드 전체에if문을 흩뜨리지 마십시오.prefers-reduced-motion존중 (접근성 + 멀미 방지 + 법적 위험).- 성능:
transform/opacity만 애니메이션, 터치에서 무거운pin피하기, Lenis↔ScrollTrigger 충돌 확인. - 모바일을 수정할 때 데스크탑의 미학을 변경하지 마십시오.
5단계 — 예술적 다듬기
'애니메이션'과 '시네마틱'을 구분하는 최종 광택 작업. 체크리스트는 references/05-refinamento.md 에 있습니다.
- 0.6초 미만의 모든 전환 → 연장.
power/expo범위를 벗어난 모든ease→ 교체.- 일관성 확인: 모든 것이
motion.ts에서 가져오는가? 시간이 함께 숨 쉬는가?
품질 체크리스트 (전달 전 실행)
- Lenis와 ScrollTrigger가
gsap.ticker를 공유함 (이중 RAF 없음). - React 애니메이션이
useGSAP(@gsap/react에서)와scope를 사용 → 자동 정리, 라우트 간 누수 없음. - GSAP을 사용하는 컴포넌트는
"use client"이며 플러그인을 등록함 (gsap.registerPlugin(ScrollTrigger, useGSAP)). - 모든 타이밍/ease가
motion.ts에서 가져옴 — 코드 곳곳에 매직 넘버가 흩어져 있지 않음. -
gsap.matchMedia()가 데스크탑과 모바일을 모두 커버하며,prefers-reduced-motion이 움직임을 비활성화/단축함. - 오직
transform과opacity만 애니메이션 됨 (width,top,margin애니메이션 금지 → 리플로우 방지). - 페이지 높이를 변경하는 글꼴/이미지 로드 후
ScrollTrigger.refresh()호출. - 0.6초 미만의 값 없음;
linear/back/bounce/elastic없음.
이식성 (Next 외부)
움직임 시스템과 황금률은 모든 환경에서 유효합니다. 순수 HTML/CSS, WordPress/Divi 또는 LearnWorlds의 경우: CDN을 통해 GSAP + ScrollTrigger + Lenis를 사용하고, 동일한 duration/ease 토큰을 유지하며, 플랫폼에 스타일이 새지 않도록 클래스/선택자에 접두사를 붙이십시오. 구체적인 노트는 references/01-setup.md 끝부분에 있습니다.
스킬 파일 맵
assets/CLAUDE.md— 프로젝트 바이블 템플릿 (루트에 복사하여 조정).assets/lib/lenis-provider.tsx— 정식 Lenis↔GSAP 통합을 포함한 React/Next 프로바이더.assets/lib/motion.ts— 움직임 토큰 (지속 시간, 가속도, reveal 헬퍼).references/01-setup.md— 스택, 설치, 통합, SSR/Next, 이식성.references/02-hero.md— 완전한 시네마틱 히어로 레시피.references/03-scroll-camera.md— pin, stagger, parallax, scrub, 수평 스크롤.references/04-mobile-a11y.md— matchMedia, reduced-motion, 성능, 모바일 디버그.references/05-refinamento.md— 상세 움직임 시스템 및 광택 체크리스트.