본문으로 건너뛰기

안동민 개발노트

본문 시작

Next.js 16 프로젝트 생성

create-next-app의 TypeScript·App Router·스타일 설정을 선택해 Next.js 16 프로젝트를 만들고 실행합니다.

Node.js와 npm 설치를 성공적으로 마치셨다면, 이제 Next.js의 핵심인 프로젝트를 직접 생성해 볼 차례입니다.

Next.js는 프로젝트를 쉽고 빠르게 시작할 수 있도록 create-next-app이라는 편리한 도구를 제공합니다.

이 도구를 사용하면 필요한 초기 설정과 폴더 구조를 자동으로 구성해주어, 우리가 곧바로 개발에 착수할 수 있도록 돕습니다.

이 절에서는 create-next-app을 사용하여 Next.js 16 프로젝트를 생성하는 과정을 단계별로 안내해 드리고, 프로젝트의 기본 구조에 대해서도 간략하게 살펴보겠습니다.

먼저 프로젝트 생성 흐름을 위치 선택, 명령 실행, 질문 선택, 설치 확인, 개발 서버 실행으로 나눠 봅니다.

Next.js 프로젝트 생성은 위치, 명령, 질문, 설치, 실행 확인을 순서대로 통과한다

create-next-app은 폴더를 만드는 명령이 아니라 프로젝트 규칙과 초기 실행 환경을 한 번에 고정하는 시작 절차다.

순서하는 일성공 신호실패하면 먼저 볼 곳
1. 위치 선택프로젝트를 둘 작업 폴더로 이동터미널 경로가 원하는 위치를 가리킴폴더 권한, 경로 오타, 공백 포함 경로
2. 생성 명령npx create-next-app@latest my-next-app 실행질문 목록이 순서대로 표시됨npx, 네트워크, npm registry
3. 질문 선택권장 기본값·이전 설정 재사용·직접 설정 중 하나를 고름직접 설정이면 TypeScript, linter, React Compiler, App Router 질문이 이어짐저장된 설정과 --reset-preferences, 프로젝트명 중복
4. 설치 확인의존성 다운로드와 lockfile 생성을 기다림Success 메시지와 실행 명령 안내패키지 설치 로그, 권한, cache
5. 개발 서버cd my-next-app 후 npm run dev 실행localhost 주소와 시작 화면 표시포트 충돌, package.json scripts, 설치 누락

프로젝트를 생성할 위치 선택

가장 먼저 할 일은 프로젝트를 저장할 폴더를 결정하는 것입니다.

터미널(명령 프롬프트 또는 PowerShell, 터미널 앱)을 열고, 프로젝트를 생성하고 싶은 디렉터리로 이동하세요.

예를 들어, C:\dev (Windows) 또는 ~/Documents/dev (macOS/Linux)와 같은 경로에 프로젝트를 만들고 싶다면 다음과 같이 이동합니다.

# Windows 예시
cd C:\dev

# macOS/Linux 예시
cd ~/Documents/dev

create-next-app으로 프로젝트 생성하기

이제 선택한 디렉터리에서 다음 명령어를 입력하여 새로운 Next.js 프로젝트를 생성합니다.

프로젝트 이름은 원하는 대로 지정할 수 있습니다.

여기서는 예시로 my-next-app이라고 이름을 붙여보겠습니다.

npx create-next-app@latest my-next-app
  • npx: npm 5.2 버전 이상에서 제공하는 명령어로, 로컬에 설치되지 않은 패키지의 실행 파일을 임시로 다운로드하여 실행할 때 사용합니다. create-next-app을 전역으로 설치하지 않고도 바로 사용할 수 있게 해줍니다.
  • create-next-app@latest: create-next-app 도구의 최신 버전을 사용하겠다는 의미입니다. Next.js 16는 이 최신 버전을 통해 생성됩니다.
  • my-next-app: 생성될 프로젝트의 폴더 이름입니다. 원하는 이름으로 변경할 수 있습니다.

명령어를 실행하면 먼저 권장 기본값을 그대로 사용할지 묻습니다.

이 교재는 각 선택의 의미를 확인하기 위해 No, customize settings를 선택합니다.

Would you like to use the recommended Next.js defaults?
  Yes, use recommended defaults
> No, customize settings
  No, reuse previous settings
# 권장값을 그대로 쓰지 않고 항목별로 선택합니다.

Would you like to use TypeScript? No / Yes
# Yes: 이 교재의 예제는 TypeScript를 기준으로 합니다.

Which linter would you like to use? ESLint / Biome / None
# ESLint: 처음에는 생태계가 넓은 ESLint를 선택합니다.

Would you like to use React Compiler? No / Yes
# No: 기본 개념을 먼저 익힌 뒤 필요할 때 도입합니다.

Would you like to use Tailwind CSS? No / Yes
# No: 이 장에서는 기본 CSS부터 확인하고 Tailwind는 9장에서 설정합니다.

Would you like your code inside a `src/` directory? No / Yes
# Yes: 애플리케이션 코드를 설정 파일과 분리합니다.

Would you like to use App Router? (recommended) No / Yes
# Yes: 이 교재는 App Router를 기준으로 합니다.

Would you like to customize the import alias (`@/*` by default)? No / Yes
# No: 기본 별칭 `@/*`를 유지합니다.

선택한 옵션은 생성 직후의 폴더 구조와 개발 경험에 바로 영향을 줍니다.

아래 다이어그램처럼 핵심 질문을 프로젝트 규칙으로 연결해 두면 이후 실습 흐름이 훨씬 안정적입니다.

create-next-app 옵션은 학습 비용과 팀 일관성으로 고른다

도구를 많이 켜는 대신 지금 필요한 안전성과 기존 저장소 규칙을 기준으로 선택한다.

  1. 시작 경로
    Customize settings

    각 질문의 의미를 확인하기 위해 권장 묶음을 그대로 쓰지 않는다

  2. 언어 · 검사
    TypeScript · ESLint

    TypeScript는 Yes, linter는 ESLint를 선택한다

  3. 기초 우선
    Compiler · Tailwind

    React Compiler와 Tailwind는 모두 No로 두고 기본 개념부터 익힌다

  4. 교재 경로
    src · App Router · alias

    src와 App Router는 Yes, alias는 기본값 @/*를 유지한다

모든 질문에 답하고 나면, create-next-app은 필요한 파일과 의존성을 다운로드하고 프로젝트를 생성하기 시작합니다.

이 과정은 네트워크 속도에 따라 몇 분 정도 소요될 수 있습니다.

성공적으로 프로젝트가 생성되면 다음과 비슷한 메시지를 볼 수 있습니다.

Success! Created my-next-app at /path/to/my-next-app

Inside that directory, you can run these commands:

  npm run dev
    Starts the development server.

  npm run build
    Builds the app for production.

  npm run start
    Runs the built app in production mode.

  npm run lint
    Runs ESLint to catch code issues.

We suggest that you begin by typing:

  cd my-next-app
  npm run dev

아래 다이어그램은 프로젝트 생성 명령부터 브라우저 확인까지의 실행 흐름을 한 번에 점검할 수 있도록 정리한 것입니다.

Success 메시지를 본 뒤에는 폴더 이동, 개발 서버, 브라우저 확인, 첫 수정까지 이어진다

성공 메시지는 끝이 아니라 다음 명령 안내다. 안내된 순서대로 실행해야 방금 만든 프로젝트를 확인할 수 있다.

단계명령/행동확인할 결과의미
1Success! Created 메시지 확인생성된 경로가 표시됨프로젝트 폴더와 기본 파일이 만들어짐
2cd my-next-app터미널 위치가 프로젝트 내부로 이동이제 package.json scripts를 실행할 수 있음
3npm run devlocalhost 주소 출력Next.js 개발 서버가 시작됨
4브라우저에서 주소 열기초기 화면 표시렌더링과 번들링이 정상 동작함
5page.tsx 문구 수정브라우저가 자동 갱신개발 루프가 완성됨

생성된 프로젝트 구조 살펴보기

생성된 폴더 구조는 App Router의 라우팅, 전역 레이아웃, 정적 파일, 패키지 스크립트를 나눠 보여줍니다.

생성된 Next.js 프로젝트를 직접 수정할 소스, 정적 자산, 계약, 설정, 생성물로 구분한 트리
Next.js 프로젝트 책임 트리 프로젝트 루트 아래에 직접 수정하는 src/app과 public, 실행 계약 package.json, 설정 next.config, 다시 생성되는 .next와 node_modules가 놓인다. project root src/app/ 라우트 소스 public/ 정적 자산 package.json 의존성·명령 계약 next.config.* 프레임워크 설정 .next/ node_modules/ 다시 생성됨

project root/아래 역할별 항목

  • src/app/

    page·layout·loading·error를 직접 수정

  • public/

    URL 루트로 제공할 이미지·폰트

  • package.json

    의존성과 dev·build·start 명령

  • next.config.*

    프레임워크 동작을 명시적으로 변경

  • .next/ · node_modules/

    도구가 다시 만들므로 직접 편집하지 않음

첫 수정은 src/app/page.tsx에서 시작하고, 전역 영향은 layout.tsxglobals.css에서 확인한다.

이제 생성된 my-next-app 디렉터리로 이동해 보세요.

cd my-next-app

프로젝트 폴더 안에는 Next.js 애플리케이션 개발에 필요한 기본적인 파일과 디렉터리가 생성되어 있습니다.

주요 디렉터리와 파일은 다음과 같습니다.

  • node_modules/: 프로젝트에 설치된 모든 Node.js 패키지(라이브러리)가 저장되는 곳입니다. 이 폴더는 Git과 같은 버전 관리 시스템에 포함시키지 않습니다.
  • public/: 이미지, 폰트 등 정적 파일을 저장하는 곳입니다. 이 안에 있는 파일들은 루트 경로에서 직접 접근할 수 있습니다.
  • src/ (또는 app/): 이 책에서는 src 디렉터리 안에 app 디렉터리가 생성될 것입니다.
    • src/app/: App Router를 사용하는 핵심 디렉터리입니다. 웹 애플리케이션의 모든 라우팅과 컴포넌트들이 이 안에 정의됩니다.
      • src/app/page.tsx: 애플리케이션의 홈(루트) 페이지를 나타내는 파일입니다.
      • src/app/layout.tsx: 애플리케이션 전체에 적용되는 레이아웃을 정의하는 파일입니다.
      • src/app/globals.css: 전역 스타일을 정의하는 파일입니다.
  • .next/: Next.js가 빌드된 결과물이나 캐시를 저장하는 디렉터리입니다. 직접 수정할 필요는 없습니다.
  • package.json: 프로젝트의 메타데이터(이름, 버전 등)와 설치된 패키지 목록, 그리고 스크립트(명령어)가 정의된 파일입니다.
  • package-lock.json (또는 yarn.lock): 설치된 패키지들의 정확한 버전 정보를 기록하여, 다른 환경에서도 동일한 의존성을 유지할 수 있도록 돕습니다.
  • next.config.ts: Next.js 애플리케이션의 설정을 커스터마이징할 때 사용하는 파일입니다.
  • tsconfig.json (TypeScript를 선택했을 경우): TypeScript 컴파일러 설정을 정의하는 파일입니다.

개발 서버 실행하기

프로젝트 생성이 완료되고 폴더 구조를 살펴보셨다면, 이제 우리가 만든 Next.js 애플리케이션을 브라우저에서 직접 확인해 볼 시간입니다.

프로젝트 디렉터리(my-next-app)에서 다음 명령어를 실행하여 개발 서버를 시작합니다.

npm run dev

또는 yarn을 사용한다면

yarn dev

명령어를 실행하면 터미널에 다음과 비슷한 메시지가 나타날 것입니다.

ready - started server on 0.0.0.0:3000, url: http://localhost:3000

이 메시지는 개발 서버가 성공적으로 시작되었으며, http://localhost:3000 주소로 접속하면 애플리케이션을 확인할 수 있다는 의미입니다.

이제 웹 브라우저를 열고 해당 주소로 접속해 보세요.

Next.js의 환영 페이지가 보인다면 성공적으로 첫 프로젝트를 생성하고 실행한 것입니다.

개발 서버는 코드를 수정하면 자동으로 변경 사항을 감지하여 브라우저에 반영해 줍니다.

따라서 개발 중에는 서버를 다시 시작할 필요 없이 바로바로 변경 사항을 확인할 수 있습니다.

개발 서버를 종료하려면 터미널에서 Ctrl + C (Windows/Linux) 또는 Cmd + C (macOS)를 누르면 됩니다.

프로젝트 생성 과정은 질문 선택과 실행 확인이 이어지는 흐름이므로, 아래 다이어그램으로 각 선택이 무엇을 결정하는지 다시 정리해 보세요.

create-next-app 질문은 프로젝트의 기본 경계를 만든다

각 선택이 생성 파일과 import·style·routing 위치를 어떻게 바꾸는지 연결해 고른다.

  1. recommended defaults
    검증된 묶음

    TypeScript·ESLint·Tailwind·App Router·Turbopack을 한 번에 선택

  2. Linter
    검사 도구

    ESLint·Biome·None 중 프로젝트 규칙에 맞게 선택

  3. React Compiler
    컴파일 최적화

    자동 최적화가 필요할 때 명시적으로 사용

  4. source layout
    src · App Router

    소스 위치와 route tree의 기준을 함께 정함

  5. style · alias
    프로젝트 규칙

    Tailwind 사용 여부와 import prefix를 마지막에 확정

프로젝트 생성 후에는 화면이 열리는지뿐 아니라 스크립트, 폴더, 의존성, 개발 서버 상태가 맞는지도 함께 확인합니다.

프로젝트 생성이 끝나면 화면, 명령, 폴더, 의존성, 개발 서버 상태를 함께 확인한다

브라우저 화면만 열렸다고 모든 준비가 끝난 것은 아니다. 다음 실습이 막히지 않도록 기본 신호를 점검한다.

점검 항목좋은 상태확인 방법문제가 있으면
화면localhost에서 초기 페이지가 열림브라우저 주소와 터미널 로그 확인포트 충돌, 서버 로그, 방화벽 확인
scriptsdev, build, start와 선택한 linter 명령이 구성됨package.json과 ESLint·Biome 설정 읽기linter 선택과 설치 로그 확인
폴더 구조src/app 또는 app 디렉터리가 존재page.tsx, layout.tsx 위치 확인App Router 선택 여부 확인
의존성node_modules와 lockfile이 생성됨설치 로그와 파일 목록 확인npm install 재시도, cache, 네트워크 확인
수정 반영page.tsx 수정 시 화면이 갱신됨문구를 작게 바꿔 저장개발 서버 재시작, 저장 여부 확인

마지막으로 create-next-app 질문들이 이후 폴더 구조와 학습 흐름에 어떤 영향을 주는지 연결합니다.

create-next-app 선택지는 이후 학습 주제의 출발점을 미리 배치한다

초기 옵션을 왜 고르는지 알면 다음 장에서 파일 경로와 개념이 갑자기 등장하지 않고 자연스럽게 이어진다.

초기 선택생기는 기준이어지는 학습초반에 확인할 파일
Recommended / Customize권장 묶음 또는 항목별 결정생성 옵션이 파일 구조에 미치는 영향package.json, 생성 로그
TypeScript / Linter타입 계약과 코드 검사 방식props 타입, ESLint·Biome·None 차이tsconfig.json, linter 설정
React Compiler컴파일 단계의 자동 최적화 여부컴파일러 적용 범위와 디버깅next.config, package.json
App Router / srcroute tree와 소스 코드 위치segment, layout, loading, errorsrc/app/page.tsx, layout.tsx
Tailwind / alias스타일 진입점과 import 경로CSS 구성과 모듈 분리globals.css, tsconfig.json paths