An image showing Sumin

NEXT.JS 튜토리얼 폴더 구조 분석

NEXT.JS 튜토리얼 폴더 구조 분석

nextjs 공식문서에 있는 튜토리얼을 진행하면서 공부하다가 폴더구조에 관심이 생겨서 분석하게 되었다. 사실 여태까지 폴더구조에 관심이 크게 없어서 그런지 이게 좋은 구조인지는 잘 모르겠지만 공식문서 튜토리얼에서 이런 구조를 채택했다는건 이유가 있지 않을까 싶은 마음에 이걸 베이스로 공부하기로 결정했다.

nextjs dashboard 폴더구조

app
 ┣ dashboard
 (overview)
 ┃ ┃ ┣ loading.tsx
 ┃ ┃ ┗ page.tsx
 ┃ ┣ customers
 ┃ ┃ ┗ page.tsx
 ┃ ┣ invoices
 ┃ ┃ ┣ [id]
 ┃ ┃ ┃ ┗ edit
 ┃ ┃ ┃ ┃ ┣ not-fount.tsx
 ┃ ┃ ┃ ┃ ┗ page.tsx
 ┃ ┃ ┣ create
 ┃ ┃ ┃ ┗ page.tsx
 ┃ ┃ ┣ error.tsx
 ┃ ┃ ┗ page.tsx
 ┃ ┗ layout.tsx
 ┣ lib
 ┃ ┣ action.ts
 ┃ ┣ data.ts
 ┃ ┣ definitions.ts
 ┃ ┣ placeholder-data.js
 ┃ ┗ utils.ts
 ┣ login
 ┃ ┗ page.tsx
 ┣ ui
 ┃ ┣ customers
 ┃ ┃ ┗ table.tsx
 ┃ ┣ dashboard
 ┃ ┃ ┣ cards.tsx
 ┃ ┃ ┣ latest-invoices.tsx
 ┃ ┃ ┣ nav-links.tsx
 ┃ ┃ ┣ revenue-chart.tsx
 ┃ ┃ ┗ sidenav.tsx
 ┃ ┣ invoices
 ┃ ┃ ┣ breadcrumbs.tsx
 ┃ ┃ ┣ buttons.tsx
 ┃ ┃ ┣ create-form.tsx
 ┃ ┃ ┣ edit-form.tsx
 ┃ ┃ ┣ pagination.tsx
 ┃ ┃ ┣ status.tsx
 ┃ ┃ ┗ table.tsx
 ┃ ┣ acme-logo.tsx
 ┃ ┣ button.tsx
 ┃ ┣ fonts.ts
 ┃ ┣ global.css
 ┃ ┣ home.module.css
 ┃ ┣ login-form.tsx
 ┃ ┣ search.tsx
 ┃ ┗ skeletons.tsx
 ┣ layout.tsx
 ┗ page.tsx

이 폴더 구조는 어플리케이션의 다양한 부분을 구성하는 파일과 디렉토리를 보여준다. 크게 애플리케이션 로직(app, lib), 사용자 인터페이스(ui), 그리고 레이아웃 및 페이지 관련 파일(layout.tsx, page.tsx)로 구분할 수 있다.

app 디렉토리

dashboard : 대시보드 관련 컴포넌트 및 페이지를 포함한다. 여기에는 overview, customers, invoices 등 대시보드의 다양한 섹션이 포함됩니다. 각 섹션은 자신의 page.tsx 파일을 가지고 있어 해당 섹션의 메인 페이지를 정의한다.

  • overview : 대시보드의 개요 부분을 나타낸다. loading.tsxpage.tsx 를 포함하여 로딩 상태와 개요 페이지를 관리한다.
  • customers : 고객 정보와 관련된 페이지를 포함한다.
  • invoices : 인보이스 관련 페이지를 포함한다. 여기에는 인보이스 생성(create), 편집([id]/edit), 오류 처리(error.tsx) 등이 포함된다.

lib 디렉토리

  • 애플리케이션에서 사용되는 다양한 라이브러리 함수, 유틸리티, 정의 등을 포함한다. 예를 들어, action.ts, data.ts, definitions.ts 등이 있으며, 이들은 데이터 처리, 타입 정의 등의 기능을 제공한다.

login 디렉토리

  • 로그인 페이지와 관련된 컴포넌트 및 로직을 포함한다. page.tsx 파일이 로그인 페이지를 정의한다.

ui 디렉토리

  • 사용자 인터페이스 요소를 포함한다. 버튼, 테이블, 폼, 네비게이션 링크 등과 같은 재사용 가능한 UI 컴포넌트가 이 디렉토리 안에 정의되어 있다.
  • dashboard, customers, invoices 등의 서브 디렉토리는 특정 애플리케이션 영역에 대한 UI 컴포넌트를 포함한다.

최상위 파일들

  • layout.tsx : 애플리케이션의 전반적인 레이아웃을 정의하는 컴포넌트이다.
  • page.tsx : 애플리케이션의 기본 페이지 또는 메인 페이지를 정의할 수 있는 컴포넌트이다.

이 폴더 구조는 app, lib, ui 와 같은 폴더들이 특정 기능이나 관심사에 따라 그룹화되어 있어 기능별 폴더 구조의 특성을 많이 담고 있는 거 같다.

;