유용한 Next.js 라이브러리 소개
인증·상태·UI·폼·데이터베이스 요구사항과 서버·클라이언트 실행 위치를 기준으로 보조 라이브러리를 선택합니다.
Next.js는 React 기반 프레임워크이지만, 추가 라이브러리는 기본 기능과 기존 의존성으로 해결하기 어려운 요구가 있을 때 검토합니다.
Next.js 프로젝트에서는 인증, 상태 관리, UI, 데이터 페칭, 유효성 검사 같은 요구사항에 맞춰 외부 라이브러리를 함께 검토해야 합니다.
이 절에서는 Next.js 프로젝트의 생산성과 효율성을 극대화하는 데 유용한 핵심 라이브러리들을 카테고리별로 소개하고, 각 라이브러리의 주요 기능과 Next.js 환경에서의 활용 팁을 제시합니다.
인증 (Authentication)
사용자별 데이터나 보호된 기능이 있다면 로그인·세션과 서버 권한 검사를 설계합니다.
-
Auth.js
- 설명: Next.js 애플리케이션을 위한 강력하고 유연한 오픈 소스 인증 솔루션입니다. Google, GitHub, Kakao 등 다양한 소셜 로그인 제공자(Provider)를 쉽게 통합할 수 있으며, 자격 증명(Credentials) 방식도 연결할 수 있습니다. 비밀번호 검증·저장·가입 정책은 애플리케이션이 구현해야 합니다. 세션 관리, JWT(JSON Web Tokens), OAuth 같은 복잡한 인증 로직을 추상화해 개발자가 인증 구현에 드는 노력을 최소화합니다.
- Next.js 활용 팁: App Router에서
src/auth.ts가 내보낸handlers를 인증 라우트에 연결하고, 서버 컴포넌트와 라우트 핸들러에서는auth()로 세션을 확인합니다. Route Handler와 Server Action은 각 작업의 권한도 확인해야 하며, 인증 라우트 연결만으로 보호되지 않습니다. - 설치: v5의
auth()API를 사용하려면npm install next-auth@beta로 설치합니다. - 링크: https://authjs.dev/
상태 관리 (State Management)
클라이언트 컴포넌트에서 복잡한 전역 상태를 효율적으로 관리하기 위한 라이브러리들입니다.
-
Zustand
- 설명: 작고 빠르며 확장 가능한 상태 관리 라이브러리입니다. 비교적 적은 코드로 스토어를 정의하고 업데이트하며, 미들웨어와 개발자 도구 연동도 가능합니다.
- Next.js 활용 팁: React Hook을 사용하는 UI는 Client Component 경계에 둡니다. SSR에서는 스토어를 요청별로 만들고 양쪽 초기 데이터를 맞추며, RSC에서 공유 전역 스토어를 읽거나 수정하지 않습니다. Zustand의 vanilla 스토어 API 자체가 브라우저 전용인 것은 아닙니다.
- 설치:
npm install zustand - 링크: https://zustand-demo.pmnd.rs/
-
Jotai
- 설명: Zustand와 유사하게 작고 원자적인(atomic) 상태 관리를 지향하는 라이브러리입니다. React의
useState와 유사한atom개념을 사용하여 상태를 정의하며, atom 의존 관계를 통해 필요한 구독 업데이트를 줄일 수 있습니다. 렌더 횟수의 최소값을 보장하지는 않습니다. - Next.js 활용 팁: Hook을 사용하는 UI는 Client Component에 둡니다. SSR에서 요청 간 상태가 섞이지 않게 적절한 Provider로 스토어 범위를 정하고, 서버와 클라이언트의 초기값을 맞춥니다.
- 설치:
npm install jotai - 링크: https://jotai.org/
- 설명: Zustand와 유사하게 작고 원자적인(atomic) 상태 관리를 지향하는 라이브러리입니다. React의
-
React Query (TanStack Query)
- 설명: 서버 상태(Server State) 관리에 특화된 라이브러리입니다. 데이터 페칭, 캐싱, 동기화, 업데이트 등 비동기 데이터와 관련된 복잡한 작업을 선언적으로 처리합니다. 로딩, 에러, 성공 상태를 자동으로 관리해주어 불필요한 보일러플레이트 코드를 줄여줍니다.
- Next.js 활용 팁: Next.js의 SSR/SSG 환경에서 데이터를 미리 페칭하고, 클라이언트에서 하이드레이션(Hydration)하여 사용자 경험을 개선할 수 있습니다.
app라우터에서는 서버 컴포넌트에서 데이터를 페칭하고 클라이언트 컴포넌트에서 React Query를 활용하여 추가 데이터 관리 및 UI 업데이트를 처리하는 방식이 일반적입니다. - 설치:
npm install @tanstack/react-query - 링크: https://tanstack.com/query/latest
-
SWR
- 설명: Vercel에서 개발한 데이터 페칭 라이브러리로, React Query와 유사하게 서버 상태 관리에 사용됩니다. stale-while-revalidate 전략을 사용하여 캐시된 데이터를 즉시 반환하고 백그라운드에서 최신 데이터를 다시 가져와 업데이트합니다.
- Next.js 활용 팁: React Query와 마찬가지로 Next.js의 데이터 페칭 패턴과 잘 통합됩니다.
- 설치:
npm install swr - 링크: https://swr.vercel.app/ko
UI 컴포넌트 및 스타일링
아름답고 반응성 있는 UI를 빠르게 구축하는 데 도움을 주는 라이브러리들입니다.
-
Tailwind CSS
- 설명: 유틸리티 우선(Utility-first) CSS 프레임워크입니다. 작은 단위의 유틸리티 클래스를 조합하고 CSS의
@theme에서 디자인 토큰을 선언합니다. - Next.js 활용 팁: Tailwind CSS 4에서는
@tailwindcss/postcss를 PostCSS 플러그인으로 등록하고 전역 CSS에@import "tailwindcss";를 작성합니다. 일반적인 프로젝트에는 별도의content배열이나 Purge 설정이 필요하지 않습니다. - 설치:
npm install -D tailwindcss @tailwindcss/postcss postcss - 링크: https://tailwindcss.com/
- 설명: 유틸리티 우선(Utility-first) CSS 프레임워크입니다. 작은 단위의 유틸리티 클래스를 조합하고 CSS의
-
Chakra UI
- 설명: 접근성(Accessibility)에 중점을 둔 React 컴포넌트 라이브러리입니다. 버튼, 폼, 다이얼로그 같은 컴포넌트와 일관된 스타일 속성·레시피를 제공합니다.
- Next.js 활용 팁: Chakra UI 3의 CLI snippet이 생성하는
Provider를 App Router의layout.tsx에 배치합니다. 이 Provider는 Chakra 설정과next-themes기반 색상 모드를 묶습니다. Turbopack에서 Emotion 하이드레이션 불일치가 보이면 Chakra의 공식 Next.js 가이드에 따라 개발·빌드의 번들러 조건을 맞춰 확인합니다. - 설치:
npm install @chakra-ui/react @emotion/react후npx @chakra-ui/cli snippet add - 링크: https://chakra-ui.com/
-
Radix UI
- 설명: CSS 프레임워크나 디자인 시스템에 종속되지 않는 저수준(low-level) UI 컴포넌트 프리미티브(Primitive) 라이브러리입니다. Headless UI로, 컴포넌트의 논리와 접근성에만 집중하며 스타일은 개발자가 직접 정의할 수 있습니다.
- Next.js 활용 팁: 개발자가 원하는 어떤 스타일링 방식(CSS Modules, Tailwind CSS, styled-components 등)과도 함께 사용할 수 있습니다.
- 설치:
npm install @radix-ui/react-<component-name>(예:@radix-ui/react-dialog) - 링크: https://www.radix-ui.com/
폼 유효성 검사 (Form Validation)
사용자 입력 폼의 유효성을 검사하고 관리하는 데 사용됩니다.
-
React Hook Form
- 설명: React 폼 관리를 위한 고성능 라이브러리입니다. 적은 리렌더링, 쉬운 유효성 검사 통합(Zod, Yup 등), 그리고 적은 코드량으로 복잡한 폼을 처리할 수 있습니다.
useForm훅을 통해 폼 상태와 유효성 검사 로직을 효율적으로 관리합니다. - Next.js 활용 팁: 클라이언트 컴포넌트에서 폼을 정의할 때 주로 사용합니다. Server Actions와 함께 사용할 경우, 클라이언트 측에서 1차 유효성 검사를 수행하고 서버 측에서 2차 검사를 통해 데이터 무결성을 확보할 수 있습니다.
- 설치:
npm install react-hook-form - 링크: https://react-hook-form.com/
- 설명: React 폼 관리를 위한 고성능 라이브러리입니다. 적은 리렌더링, 쉬운 유효성 검사 통합(Zod, Yup 등), 그리고 적은 코드량으로 복잡한 폼을 처리할 수 있습니다.
-
Zod
- 설명: TypeScript 우선 스키마 유효성 검사 라이브러리입니다. 런타임 검증 스키마를 정의하고, 그 스키마에서 정적 TypeScript 타입을 추론합니다. TypeScript 타입 선언만으로 런타임 검사가 생기는 것은 아닙니다. React Hook Form, Next.js Server Actions 등과 함께 사용하여 프론트엔드와 백엔드 모두에서 데이터의 형태와 유효성을 강력하게 보장할 수 있습니다.
- Next.js 활용 팁: Server Actions의 입력값 유효성 검사에 Zod 스키마를 사용하여 안정적인 데이터 처리를 구현할 수 있습니다. 클라이언트 컴포넌트에서는
@hookform/resolvers의zodResolver로 React Hook Form과 연결할 수 있습니다. 스키마 검증은 작업 권한 검사를 대체하지 않습니다. - 설치:
npm install zod(React Hook Form 연결 시@hookform/resolvers도 설치) - 링크: https://zod.dev/
데이터베이스 ORM/ODM
데이터베이스와 애플리케이션 간의 상호작용을 돕는 라이브러리입니다.
-
Mongoose
- 설명: Node.js 환경에서 MongoDB를 위한 객체 데이터 모델링(ODM) 라이브러리입니다. 스키마 기반으로 데이터를 정의하고, 데이터 유효성 검사, 쿼리 빌더, 미들웨어 등 다양한 기능을 제공하여 MongoDB 사용을 편리하게 합니다.
- Next.js 활용 팁: Route Handler, 서버 컴포넌트와 Server Actions에서 MongoDB를 사용할 때 연결 로직은
lib/db.ts같은 서버 전용 모듈로 분리합니다. Mongoose는 Node.js 런타임을 사용하며 Next.js Edge Runtime에서의 직접 MongoDB 연결을 지원하지 않습니다. - 설치:
npm install mongoose - 링크: https://mongoosejs.com/
-
Prisma
- 설명: 차세대 Node.js 및 TypeScript ORM(객체 관계형 매핑)입니다. 데이터베이스 스키마를 정의하고 이를 기반으로 타입 세이프한 쿼리를 자동으로 생성합니다. PostgreSQL, MySQL, SQLite 등 다양한 관계형 데이터베이스를 지원합니다.
- Next.js 활용 팁: Route Handler, 서버 컴포넌트와 Server Actions의 데이터 계층에서 사용합니다. 생성된 Prisma Client의 타입을 서버 데이터 계층에서 활용합니다. 선택한 Prisma 버전·DB·런타임에 맞는 드라이버 또는 어댑터와 생성 설정도 필요합니다.
- 설치:
npm install prisma @prisma/client및npx prisma init - 링크: https://www.prisma.io/
기타 유용한 라이브러리
use-debounce: 사용자 입력(검색어, 텍스트 입력 등)에 대한 이벤트를 디바운싱(Debouncing) 처리하여 과도한 함수 호출이나 API 요청을 방지합니다. 검색 필터링 기능 구현 시 유용합니다.- 설치:
npm install use-debounce - 링크: https://www.npmjs.com/package/use-debounce
- 설치:
react-icons: 인기 있는 아이콘 라이브러리(Font Awesome, Material Design Icons 등)의 아이콘들을 React 컴포넌트로 제공하여 쉽게 사용할 수 있습니다.- 설치:
npm install react-icons - 링크: https://react-icons.github.io/react-icons/
- 설치:
date-fns/moment/dayjs: 날짜 및 시간 조작을 위한 유틸리티 라이브러리입니다. 날짜 포매팅과 계산을 지원합니다. 간단한 표시라면 표준IntlAPI부터 확인하고, 추가 연산은 필요한 함수와 번들 영향을 비교합니다. Moment는 유지보수 모드의 기존 프로젝트이므로 새 도입은 유지보수 정책을 먼저 확인합니다.- 설치:
npm install date-fns(또는moment,dayjs) - 링크: https://date-fns.org/
- 설치:
Next.js 생태계의 라이브러리는 프로젝트 요구사항, 유지보수성, 번들 영향, 팀 숙련도를 기준으로 선택해야 합니다.
새 기능을 추가할 때는 라이브러리가 제공하는 추상화가 실제 복잡도를 줄이는지도 함께 확인합니다.