모든 프로젝트는 올바른 셋팅에서 시작된다. 이번 과제를 통해 Next.js 프로젝트의 셋팅 과정과 주요 설정 방법을 정리해보자.
우선 설치하기 전에 사용자 시스템이 이 두가지 조건을 만족해야한다
MacOs, Windows, 아니면 Linux
Node.js 18.18 이상
node -v ## 버전 확인 커맨드
-> v22.13.1 ## 현재 node 버전설치 방법:
create-next-app 을 사용해 자동으로 프로젝트를 셋업 해준다npx create-next-app@latestlatest 는 최신 버전을 뜻하며 블로그 작성 시점의 최신 버전은 15.3.2 이다.❗ Next.js 11~15 버전 일부에서 심각한 보안 취약점이 발견되었는데, 인증 없이 보호된 리소스에 접근 가능한 위험이 있어 패치된 버전(15.2.3 이상) 으로 업데이트가 필요하다. 꼭 버전 확인할 것.
자세히 보기 → https://github.com/vercel/next.js/security/advisories/GHSA-f82v-jwr5-mffw
What is your project named? my-app
Would you like to use TypeScript? No /
Yes
Would you like to use ESLint? No /
Yes
Would you like to use Tailwind CSS? No /
Yes
Would you like your code inside a `src/` directory?
No
/
Yes
Would you like to use App Router? (recommended) No /
Yes
Would you like to use Turbopack for `next dev`? No /
Yes
Would you like to customize the import alias (`@/*` by default)?
No
/ Yes
What import alias would you like configured? @/*src 디렉토리 설정은 개인의 취향에 따라 다를 수 있을 것 같다.import를 할 때 사용할 얼라이어스를 설정하는데 대부분 default 를 사용한다.질문이 끝나면 create-next-app 이 알아서 프로젝트 폴더를 만들고 필요한 의존성 패키지를 설치한다.
package.json 을 보면 미리 지정된 스크립트가 보일 것이다.
"scripts": {
"dev": "next dev --turbopack", // 개발 모드 실행. 실시간 변경 반영 및 디버깅 용이
"build": "next build", // 프로덕션 빌드. 코드 최적화 및 정적 파일 생성
"start": "next start", // 빌드된 결과물로 앱 실행. 실제 배포 환경과 동일
"lint": "next lint", // ESLint 실행. 규칙에 따라 코드 품질 검사
},이미 Next.js 를 설치할때 적당한 Typescript 설정이 되어있으며 tsconfig.json 과 package.json 을 보면 확인할 수 있다. 확장자 하나만 간단히 소개하고 넘어가겠다.

Always-on Next.js TypeScript Plugin
Ctrl/⌘ + Shift + P 로 명령 팔레트 열기"TypeScript: Select TypeScript Version" 입력"Use Workspace Version" 선택
설치 후 Metadata 위에 커서를 올려보면 위의 이미지처럼 해당 스펙 설명이 나온다.
Next.js 프로젝트에서 코드 품질과 일관성을 유지하기 위해 ESLint 와 Prettier 를 설정해준다. Next 에서는 이미 ES Lint 가 설치되어 있으며 Lint 검사를 npm run lint 로 할 수 있다.
eslint: 코드 품질 검사prettier: 코드 스타일 포매터Prettier 설치 방법:
npm install --save-dev prettier eslint-config-prettier.prettierrc 루트에 만들고 설정// 설정 예시
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 100,
"bracketSpacing": true,
"arrowParens": "always",
"endOfLine": "auto",
"plugins": ["prettier-plugin-tailwindcss"]
}eslintConfigPrettier 를 eslint.config.mjs 에 꼭 import 해서 eslintConfig 안에 명시한다.편의성을 위해 package.json 에 관련 스크립트를 추가한다.
{
"scripts": {
"lint": "next lint",
"lint:fix": "next lint --fix", // Lint 검사 후 자동으로 코드를 고친다
"format": "prettier --write", // 자동으로 prettier 규칙을 따르게 변경한다
}
}추천 플러그인:
최근에 TailwindCSS 가 버전 업데이트를 거쳤는데 현 시점에는 Next 에서 버전 업그레이드를 반영해 의존성 패키지를 올바르게 설치한 걸 볼 수 있다.
만약 나중에 Next 에서 TailwindCSS 를 최신 버전으로 업그레이드 시켜야 하는 경우가 있다면:
자동 마이그레이션 도구를 사용하거나
$ npx @tailwindcss/upgrade
설치할 확장 프로그램들
Tailwind CSS IntelliSense

설치 방법
# 터미널에 밑의 커맨드 실행
npm install -D prettier prettier-plugin-tailwindcss
# .prettierrc 파일에 플러그인 추가
{
"plugins": ["prettier-plugin-tailwindcss"]
}정렬 전/후 비교
## 정렬 전
<main className="flex flex-col gap-[32px] row-start-2 items-center sm:items-start">
## 정렬 후
<main className="row-start-2 flex flex-col items-center gap-[32px] sm:items-start">CMD+S 나 파일을 저장할때마다 자동으로 Prettier 규칙을 따라 클래스 정렬을 해준다.
❗ 만약 Hover Preview 같이 확장 프로그램 기능들이 잘 표시되지 않는다면
Shift+Cmd+P로 팔레트를 열고Developer: Reload Window를 검색해서 현재 윈도우를 다시 돌리면 잘 적용될 것이다!
Shadcn/ui 는 Tailwind CSS 를 기반으로 한 컴포넌트 라이브러리로, Next.js 에 적용하기에 적합한 오픈소스 UI 이다. 미니멀리스틱 하고 consistent 한 디자인 시스템 덕분에 프론트엔드 작업을 할 때 편리하고 개발 효율이 금방 올라간다.
설치 가이드 :
Next.js 프로젝트 안에 새로운 shadcn 프로젝트 생성
npx shadcn@latest init ## TailwindCSS 버전 주의. Lastest 는 Tailwind v4 와 호환
Use --force 로 의존성 패키지들을 설치해야 문제없이 잘 셋팅된다.clsx 와 tailwind-merge 가 병합되어 만들어진 cn() 유틸리티 함수를 짚고 넘어가자.// @/lib/utils.ts
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
// 기존 컴포넌트 CSS 와 외부에서 컴포넌트를 clsx로 결합한 후 tailwind-merge 로 클래스 충돌을 해결하고 최적화. 커스텀 스타일이 기본 스타일을 오버라이드 한다.
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}필요한 컴포넌트 추가
npx shadcn@latest add card // @/components/ui/card.tsx 가 생김@/app/page.tsx
import {
Card,
CardHeader,
CardDescription,
CardTitle,
} from "@/components/ui/card";
export default function Home() {
return (
<div>
<Card>
<CardHeader>
<CardTitle>블로그 제목</CardTitle>
<CardDescription>간단한 더미 블로그 설명입니다. </CardDescription>
</CardHeader>
</Card>
</div>
);
}이렇게 손쉽게 완성된 UI를 구현할 수 있다.
