[React] 리액트 프로젝트에 좋은 폴더 구조 (+ Next)

김현수·2024년 3월 6일
3

React

목록 보기
22/31


🖋️ 리액트 프로젝트에 좋은 폴더 구조


  • 폴더 구조

src/
├── assets/               # 이미지, 아이콘, 글로벌 스타일 등의 자산
│   ├── images/
│   └── styles/
│       ├── global.scss
│       └── variables.scss
│
├── components/           # 전역으로 재사용 가능한 UI 컴포넌트
|   ├── UI/            # 재사용 가능한 UI 컴포넌트 (버튼, 입력 필드 등)
│   │   └── Button/
│   │       ├── Button.tsx
│   │       ├── Button.module.scss
│   │       └── Button.test.tsx
│   └── Layout/        # 애플리케이션의 레이아웃 컴포넌트 (헤더, 푸터, 사이드바 등)
│       └── Navbar/
│
├── constants/            # 애플리케이션 전반에서 사용되는 상수
│   └── index.ts
│
├── contexts/             # React Context API 정의
│   └── AuthContext.tsx
│
├── hooks/                # 커스텀 훅
│   └── useAuth.ts
│
├── modules/              # 기능별 모듈 (각 모듈은 독립적인 기능 단위)
│   ├── UserManagement/
│   │   ├── components/   # 모듈 내부 컴포넌트
│   │   │   └── UserProfile.tsx
│   │   ├── hooks/        # 모듈 내부 커스텀 훅
│   │   │   └── useUsers.ts
│   │   ├── services/     # 서비스 로직 (API 호출 등)
│   │   │   └── userService.ts
│   │   ├── UserManagement.module.scss
│   │   └── UserManagement.test.tsx
│   └── ProductCatalog/
│
├── services/             # 애플리케이션 전반에서 사용되는 API 호출 등의 서비스 로직
│   └── apiService.ts
│
├── types/                # TypeScript 타입 정의
│   ├── models.ts
│   └── global.d.ts
│
├── utils/                # 유틸리티 함수
│   └── helpers.ts
│
├── App.tsx
├── index.tsx
└── react-app-env.d.ts    # create-react-app 환경설정 타입

  • 폴더 구조 설명

    • 'components/'

      • APP 에서 공통으로 사용되는 컴포넌트를 저장
      • 'UI/' : 버튼, 입력 필드와 같은 재사용 가능한 기본 UI 컴포넌트를 포함
      • 'Layout/' : 헤더, 푸터 등의 레이아웃 관련 컴포넌트를 포함
    • 'features/'

      • 애플리케이션의 주요 기능별로 폴더를 구분
      • 각 기능에 필요한 컴포넌트와 로직을 포함
      • 이 구조는 기능의 추가 및 수정을 용이
    • 'hooks/'

      • 전역에서 사용할 수 있는 커스텀 훅을 저장
      • 예를 들어, 인증 상태를 관리하는 useAuth 훅이 이곳에 위치 가능
    • 'utils/'

      • 유틸리티 함수를 모아둔 곳
      • 데이터 형식 변환, 유효성 검사 등 공통으로 사용되는 함수를 포함
    • 'types/'

      • 타입스크립트를 사용하는 경우
      • 전역에서 사용될 타입 정의를 포함하는 폴더
    • 'styles/'

      • 애플리케이션의 공통 스타일과 테마를 정의
    • 'assets/'

      • 이미지, 아이콘 등 모아둔 곳

  • + 파일 설명

    • models.ts
      • 도메인 모델 또는 DTO(Data Transfer Object)의 타입 정의를 포함

    • global.d.ts
      • 전역 타입 정의 파일
      • 프로젝트 전반에 걸쳐 재사용될 수 있는 타입을 정의

    • react-app-env.d.ts
      • create-react-app을 사용할 경우
      • TypeScript 환경 설정 및 타입을 확장하기 위한 파일




  • 📢 Next.js 폴더 구조

src/
├── components/           # 전역으로 재사용 가능한 UI 컴포넌트
│   ├── Button/
│   │   ├── Button.tsx
│   │   ├── Button.module.scss
│   │   └── Button.test.tsx
│   └── Navbar/
│
├── constants/            # 애플리케이션 전반에서 사용되는 상수
│   └── index.ts
│
├── contexts/             # React Context API 정의
│   └── AuthContext.tsx
│
├── hooks/                # 커스텀 훅
│   └── useAuth.ts
│
├── modules/              # 기능별 모듈 (각 모듈은 독립적인 기능 단위)
│   ├── UserManagement/
│   │   ├── components/   # 모듈 내부 컴포넌트
│   │   ├── hooks/        # 모듈 내부 커스텀 훅
│   │   ├── services/     # 서비스 로직 (API 호출 등)
│   │   └── UserManagement.module.scss
│   └── ProductCatalog/
│
├── pages/                # 라우트와 페이지 컴포넌트
│   ├── _app.tsx          # 메인 애플리케이션 레이아웃
│   ├── _document.tsx     # 애플리케이션 HTML 문서 구조
│   ├──api                 # API 라우트 정의
│   │  └── auth/                 # 인증 관련 API 예시
│   │  └── [action].ts  
│   └── index.tsx         # 홈페이지
│
├── public/               # 정적 파일 저장소
│   ├── favicon.ico
│   └── images/
│
├── services/             # 애플리케이션 전반에서 사용되는 API 호출 등의 서비스 로직
│   └── apiService.ts
│
├── styles/               # 공통 스타일
│   └── globals.scss
│
├── types/                # TypeScript 타입 정의
│   ├── models.ts
│   └── global.d.ts
│
├── lib/                      # 서버 사이드 로직 및 데이터베이스 관리 등의 라이브러리
│   ├── db.ts                 # 데이터베이스 연결 및 관리
│   └── middleware.ts  
│
├── utils/                # 유틸리티 함수
│   └── helpers.ts
│
└── tests/                # 테스트 파일
    ├── integration/      # 통합 테스트
    └── unit/             # 단위 테스트

  • 폴더 구조 설명

    • 'modules/'

      • 특정 기능을 수행하는 독립적인 모듈을 구성
      • 각 모듈 내에는 그 기능과 관련된 컴포넌트, 훅, 서비스 로직 등이 포함
    • 'pages/'

      • Next.js의 파일 기반 라우팅에 따라 각 파일 또는 폴더는 라우트와 연결된 페이지 컴포넌트
      • _app.tsx는 전역 레이아웃을 _document.tsx는 서버 사이드에서 렌더링될 HTML 문서 구조를 정의
    • 'public/'

      • 이미지, 폰트, 기타 정적 자산을 저장
      • Next.js에서는 이 폴더 내의 파일들을 웹 서버의 루트 경로로부터 직접 접근
    • 'tests/'

      • 단위 및 통합 테스트 파일을 분류하여 저장
      • 프로젝트의 안정성을 검증하기 위한 테스트 코드를 포함
    • 'api/'

      • 서버리스 함수로 동작하는 API 라우트를 정의
      • Next.js에서는 이 폴더 내의 파일들이 자동으로 API 엔드포인트로 변환
    • 'lib/'

      • 데이터베이스 연결, 서버 사이드 로직 처리, 공통 함수 등의 백엔드 관련 코드를 포함
      • 이는 API 라우트에서 직접 사용
profile
일단 한다

0개의 댓글