편집 꺼짐
Next.js 블로그 프로젝트
2025.05.16 12:03:03
Create Next App으로 블로그를 만들기 위한 기초적인 프로젝트 세팅이다.
Next js 시작
npx create-next-app@latest
cli가 실행되면 아래와 같이 선택한다.
√ What is your project named? ... .
√ Would you like to use TypeScript? ... Yes
√ Would you like to use ESLint? ... Yes
√ Would you like to use Tailwind CSS? ... Yes
√ Would you like your code inside a `src/` directory? ... No
√ Would you like to use App Router? (recommended) ... Yes
√ Would you like to use Turbopack for `next dev`? ... Yes
√ Would you like to customize the import alias (`@/*` by default)? ... No
Creating a new Next.js app in C:\Users\bluec\Desktop\next-js-boilerplate.
스니펫 설정
file - preferences - configure snippets - typescriptreact
를 선택하여 스니펫을 설정할 수 있다.
Next.js 15에서는 searchParams와 params를 Promise로 받도록 되어 있어 위와 같이 스니펫을 만들었다.
{
"TSX Function Component": {
"prefix": "tfc",
"body": [
"export default function ${TM_FILENAME_BASE/(.+)/${1:/pascalcase}/}() {",
" return <div>${TM_FILENAME_BASE/(.+)/${1:/pascalcase}/}</div>;",
"}"
],
"description": "TSX Function Component with File Name for TypeScript"
},
"TSX Function Component for Next.js Page (w)ith Dynamic Params": {
"prefix": "tfcw",
"body": [
"interface PageProps {",
" params: Promise<{",
" ${TM_DIRECTORY/(.+[\\/\\\\])?\\[([^\\/\\\\]+)\\][\\/\\\\]*$/$2/}: string",
" }>;",
" searchParams?: Promise<Record<string, string | string[]>>;",
" children?: React.ReactNode;",
"}",
"",
"export default async function Page({ params, searchParams, children }: PageProps) {",
" return (",
" <div>",
" <h1>Page Component</h1>",
" <pre>{JSON.stringify(await params, null, 2)}</pre>",
" <pre>{JSON.stringify(await searchParams, null, 2)}</pre>",
" {children}",
" </div>",
" );",
"}"
],
"description": "TSX Function Component with Directory Name for Next.js 15 App Router"
}
}
-
tfc
: 파일 이름을 기반으로 함수형 컴포넌트를 만든다.// app/[userId]/page.tsx export default function Page() { return <div>Page</div>; }
-
tfcw
: 폴더 주소를 기반으로 urlSlug 하나를 인터페이스에 추가해준다.// app/[userId]/page.tsx interface PageProps { params: Promise<{ userId: string }>; searchParams?: Promise<Record<string, string | string[]>>; children?: React.ReactNode; } export default async function Page({ params, searchParams, children }: PageProps) { return ( <div> <h1>Page Component</h1> <pre>{JSON.stringify(await params, null, 2)}</pre> <pre>{JSON.stringify(await searchParams, null, 2)}</pre> {children} </div> ); }
VSCode 설정 변경으로 절대경로(alias
) 강제 적용하기
Always use alias for automatic imports - Stack Overflow
tsconfig.json
(또는 jsconfig.json
)에서 **경로 별칭(path alias)**을 올바르게 설정했다면, VSCode의 설정을 변경하여 항상 절대경로를 사용하도록 강제할 수 있다.
- VSCode에서 **설정(User Settings)**을 열고,
- **"Import Module Specifier"**를 검색하면 TypeScript 및 JavaScript용 설정이 나타난다.
- 이를
"non-relative"
로 변경하면, 항상 경로 별칭(alias)을 사용하도록 강제할 수 있다.
VSCode settings.json
직접 수정
만약 설정 파일을 직접 수정하고 싶다면, settings.json
에 아래 내용을 추가하면 된다.
{
//...
"typescript.preferences.importModuleSpecifier": "non-relative",
"javascript.preferences.importModuleSpecifier": "non-relative"
//...
}
이렇게 설정하면, VSCode에서 자동으로 import를 정리할 때 상대경로(./
)가 아닌 경로 별칭(@/
)을 사용하도록 변경된다.