
이번 프로젝트에서는 애니메이션 라이브러리로 Framer Motion을 선택했다.
특히 로그인 화면과 랜딩 페이지처럼 단순하지만 완성도가 중요한 UI에 적합해서다.
아래에서는
1. 왜 사용하는지
2. 어떻게 설치하고
3. 실제로 어떻게 적용하는지
까지 공식 문서 기반으로 따라 하기 형식으로 정리해본다.
로그인 폼과 랜딩 페이지에서는 화려한 애니메이션보다
사용자의 시선을 자연스럽게 안내하는 가벼운 모션이 더 중요하다.
또한 이 프로젝트는 Next.js의 SSR/SSG 환경을 적극적으로 활용하기 때문에,
SSR에서도 안정적으로 동작하고 클라이언트에서만 실행되는 애니메이션이 필요했다.
Framer Motion은 이 흐름과 가장 잘 맞는 라이브러리다.
SSR 단계에서는 단순히 HTML만 렌더링하고,
브라우저가 하이드레이션된 뒤에initial → animate모션이 실행되기 때문에
SSG/SSR 환경에서도 문제 없이 자연스러운 애니메이션을 구현할 수 있다.
Framer Motion은 이런 목적에 특히 잘 맞는 이유가 있다.
- 컴포넌트에
initial,animate,exit만 선언하면 자동으로 동작- 스크롤 등장(페이드인), 순차 등장 같은 기본 모션을 쉽게 구현
- 버튼 hover·tap, 카드 등장 등 작은 인터랙션에 강함
- React 상태 변화와 자연스럽게 연결됨
- 유지보수가 쉬움 (요소 위치/레이아웃 바뀌어도 자동 보간)
즉,
“부드러움은 챙기고, 복잡함은 줄이는”
UI 완성도를 위한 선택.
터미널에 아래 한 줄만 입력하면 끝이다.
pnpm add framer-motion # 또는 npm install framer-motion # 또는 yarn add framer-motionNext.js(App Router) 환경에서도 특별한 설정은 필요 없다.
SSR을 자동으로 우회하기 때문에 클라이언트에서만 알아서 동작한다.
Framer Motion의 가장 큰 장점은 초보자도 심리적 장벽 없이 쓰기 쉽다는 것.
대표 컴포넌트인motion을 import하고,
그 안에서initial,animate,transition만 지정하면 된다."use client"; import { motion } from "framer-motion"; export default function Example() { return ( <motion.div initial={{ opacity: 0, y: 20 }} // 초기 상태 animate={{ opacity: 1, y: 0 }} // 애니메이션 끝 상태 transition={{ duration: 0.5 }} // 전환 시간 Hello Motion! </motion.div> ); }이 한 줄로 “아래에서 위로, 페이드인”이 만들어진다.
로그인 폼은 등장 타이밍이 중요하다.
너무 갑자기 나타나면 어색하고, 너무 느리면 성가시다.
아래는 0.2초 정도의 부드러운 등장을 적용한 예시다."use client"; import { motion } from "framer-motion"; export default function LoginForm() { return ( <motion.form initial={{ opacity: 0, y: 10 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.4, ease: "easeOut" }} className="flex gap-10"> <input type="email" placeholder="이메일" className="border border-[var(--color-gray-300)]" /> <input type="password" placeholder="비밀번호" className="border border-[var(--color-gray-300)]" /> <motion.button whileHover={{ scale: 1.02, backgroundColor: "black", color: "white" }} whileTap={{ scale: 0.98 }} className="border border-[var(--color-gray-300)]"> 로그인 </motion.button> </motion.form> ); }여기서 포인트는 2개
1. form 전체는 부드럽게 등장
2. 버튼은 hover/tap 모션만 살짝 적용
로그인 폼처럼 심플한 UI는 이렇게 “작지만 명확한 인터랙션”만 있어도 훨씬 안정감 있다.
Framer Motion은 진입 장벽은 낮고,
로그인 페이지부터 랜딩 페이지까지 한 라이브러리로 일관된 애니메이션 시스템을 구성할 수 있다.
덕분에
- UI 흐름은 자연스럽고,
- 유지보수는 쉽고,
- 코드도 간결한
애니메이션 구조를 만들 수 있다.
기본개념을 자세히 보고싶으면!
공식문서
framer-motion 옵션 설명