npm i next@latest react@latest react-dom@latest eslint-config-next@latest
npx create-next-app@latest
Clerk 적용하기 - provider 및 middleware 설정
npm install @clerk/nextjs
//.env에 변수 저장하기
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_bGFyZ2UtZG9scGhpbi04MS5jbGVyay5hY2NvdW50cy5kZXYk
CLERK_SECRET_KEY=sk_test_PEzfYIdbHcs00Rs9qNRQFSXfH0Z7nYbkzqjKnh1iUS
// app/layout.tsx 에 적용
import { ClerkProvider } from '@clerk/nextjs'
import './globals.css'
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<ClerkProvider>
<html lang="en">
<body>{children}</body>
</html>
</ClerkProvider>
)
}
// middleware.ts 최상위 디렉토리에 생성
import { authMiddleware } from "@clerk/nextjs";
// This example protects all routes including api/trpc routes
// Please edit this to allow other routes to be public as needed.
// See https://clerk.com/docs/references/nextjs/auth-middleware for more information about configuring your Middleware
export default authMiddleware({});
export const config = {
matcher: ["/((?!.+\\.[\\w]+$|_next).*)", "/", "/(api|trpc)(.*)"],
};
$schema: JSON 파일의 스키마를 나타내는 URI입니다. 여기서는 UI 구성 파일의 스키마를 https://ui.shadcn.com/schema.json로 정의하고 있습니다.
style: 프로젝트에서 사용할 UI 스타일을 지정합니다. 여기서는 "default"로 설정되어 있습니다.
rsc: RSC (React Shadcn Component) 라이브러리를 사용할 것인지 여부를 나타냅니다. true로 설정되어 있으므로 이 프로젝트에서는 RSC를 사용하는 것으로 보입니다.
tsx: TypeScript(TSX)를 사용할 것인지 여부를 나타냅니다. true로 설정되어 있으므로 이 프로젝트에서는 TypeScript를 사용하는 것으로 보입니다.
tailwind: Tailwind CSS를 프로젝트에서 사용하는 데 필요한 구성을 정의합니다. 여기서는 Tailwind CSS의 구성 파일이 tailwind.config.ts이며, 전역 CSS 파일은 app/globals.css로 설정되어 있습니다. 또한 baseColor는 "neutral"로, cssVariables는 true로 설정되어 있습니다.
aliases: 경로 별칭을 정의합니다. 예를 들어, "components"는 "@/components", "utils"는 "@/lib/utils"와 같이 설정되어 있습니다. 이는 프로젝트에서 경로 별칭을 사용하여 모듈을 더 쉽게 가져올 수 있도록 도와줍니다.
// props를 직계 자식에게 병합한다. asChild 지원
npm install @radix-ui/react-slot
// cva 사용 https://xionwcfm.tistory.com/328
npm i class-variance-authority
npm i lucide-react
// className 을 여러 개 사용할 수 있도록 해줌
npm i clsx
// https://xionwcfm.tistory.com/322
npm i tailwind-merge
npm i tailwindcss-animate
gitblog/app/lib/utils.ts
import { type ClassValue, clsx } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
Clerk 적용하기 - provider 및 middleware 설정
components.json 설정
$schema
: JSON 파일의 스키마를 나타내는 URI입니다. 여기서는 UI 구성 파일의 스키마를https://ui.shadcn.com/schema.json
로 정의하고 있습니다.style
: 프로젝트에서 사용할 UI 스타일을 지정합니다. 여기서는 "default"로 설정되어 있습니다.rsc
: RSC (React Shadcn Component) 라이브러리를 사용할 것인지 여부를 나타냅니다.true
로 설정되어 있으므로 이 프로젝트에서는 RSC를 사용하는 것으로 보입니다.tsx
: TypeScript(TSX)를 사용할 것인지 여부를 나타냅니다.true
로 설정되어 있으므로 이 프로젝트에서는 TypeScript를 사용하는 것으로 보입니다.tailwind
: Tailwind CSS를 프로젝트에서 사용하는 데 필요한 구성을 정의합니다. 여기서는 Tailwind CSS의 구성 파일이tailwind.config.ts
이며, 전역 CSS 파일은app/globals.css
로 설정되어 있습니다. 또한baseColor
는 "neutral"로,cssVariables
는true
로 설정되어 있습니다.aliases
: 경로 별칭을 정의합니다. 예를 들어,"components"
는"@/components"
,"utils"
는"@/lib/utils"
와 같이 설정되어 있습니다. 이는 프로젝트에서 경로 별칭을 사용하여 모듈을 더 쉽게 가져올 수 있도록 도와줍니다.그 다음으로
gitblog/compoents 폴더 추가
→ ui폴더와 각종 커스텀 컴포넌트들이 들어간다.
gitblog/app/lib/utils.ts
gitblog/tailwind.config.ts
gitblog/app/global.css