🚀✚ React, TypeScript, 귞늬고 Next.js로 완성하는 완벜한 폮더 구조! 🎉🔧

김동혁·6음 전
8

늬엑튞 묞법

목록 볎Ʞ
9/9
post-thumbnail

안녕하섞요, 개발자 여러분! 👋 였늘은 React, TypeScript, 귞늬고 Next.js륌 활용하여 프로젝튞륌 시작할 때 ꌭ 알아알 할 폮더 구조에 대핮 재믞있고 유익하게 읎알Ʞ핎볎렀고 í•Žìš”! 🥳 폮더 구조는 프로젝튞의 유지볎수성곌 확장성에 큰 영향을 믞치니, 올바륞 구조륌 갖추는 것읎 얌마나 쀑요한지 핚께 알아볌까요? 🧐✚


🏠 폮더 구조의 마법: 왜 쀑요한가? 🀔

폮더 구조는 프로젝튞의 댈대와 같아요. 🊎 잘 짜읞 폮더 구조는 닀음곌 같은 장점을 가젞닀쀍니닀:

  • 유지볎수 용읎성: 윔드가 잘 정늬되얎 있얎 버귞 수정읎나 Ʞ능 추가가 쉬워요. 🛠
  • 협업 횚윚성: 팀원듀읎 각자의 역할을 쉜게 읎핎하고 작업할 수 있얎요. 🀝
  • 확장성: 프로젝튞가 컀젞도 쉜게 ꎀ늬할 수 있얎요. 📈

📖 에플소드: 폮더 구조의 쀑요성을 깚달은 순간

한 번은 팀 프로젝튞에서 폮더 구조가 엉망읎얎서 쀑요한 파음을 찟지 못핎 밀을 새며 버귞륌 고쳐알 했던 겜험읎 있얎요. 😱 ê·žë•Œ 깚달았죠. 잘 짜여진 폮더 구조가 얌마나 쀑요한지! 읎후로는 항상 첎계적읞 구조륌 유지하렀고 녞력하고 있습니닀. 여러분도 읎런 싀수륌 반복하지 않도록 믞늬 대비핎볎섞요! 😉


📁 Ʞ볞적읞 폮더 구조 삎펎볎Ʞ

뚌저, Create React App(CRA)곌 Next.js로 생성된 Ʞ볞 폮더 구조륌 삎펎볌게요. 🛠

Create React App + TypeScript Ʞ볞 구조

my-app/
├── node_modules/
├── public/
│   ├── index.html
│   └── ...
├── src/
│   ├── App.tsx
│   ├── index.tsx
│   └── ...
├── tsconfig.json
├── package.json
└── ...

Next.js Ʞ볞 구조

my-next-app/
├── node_modules/
├── public/
│   ├── favicon.ico
│   └── ...
├── pages/
│   ├── index.tsx
│   ├── about.tsx
│   └── api/
│       └── hello.ts
├── styles/
│   ├── globals.css
│   └── Home.module.css
├── tsconfig.json
├── package.json
└── ...

읎 구조듀은 작고 닚순한 프로젝튞에 적합하지만, 프로젝튞가 컀지멎 파음읎 혌잡핎질 수 있얎요. 😅 귞래서 좀 더 첎계적읞 폮더 구조가 필요하답니닀! 🎯


🌟 확장 가능한 폮더 구조 섀계하Ʞ

프로젝튞의 규몚와 복잡성에 따띌 닀양한 폮더 구조륌 선택할 수 있는데요, 여Ʞ서는 Ʞ능별 분류(Feature-based)와 파음 유형별 분류(Type-based) 두 가지 접귌법을 소개할게요. 귞늬고 두 가지륌 혌합한 혌합 접귌법도 핚께 알아볎겠습니닀! 🧩

1. Ʞ능별 분류 (Feature-based) 🔍

Ʞ능별 분류는 프로젝튞륌 Ʞ능 닚위로 나누얎 폎더륌 구성하는 방법읎에요. 각 Ʞ능별로 ꎀ렚 파음듀을 핚께 두얎 ꎀ늬하Ʞ 쉬워요. 🌟

src/
├── components/
│   ├── Header/
│   │   ├── Header.tsx
│   │   ├── Header.module.css
│   │   └── Header.test.tsx
│   └── Footer/
│       ├── Footer.tsx
│       ├── Footer.module.css
│       └── Footer.test.tsx
├── features/
│   ├── auth/
│   │   ├── components/
│   │   │   ├── Login.tsx
│   │   │   └── Register.tsx
│   │   ├── hooks/
│   │   │   └── useAuth.ts
│   │   ├── services/
│   │   │   └── authService.ts
│   │   └── authSlice.ts
│   └── posts/
│       ├── components/
│       │   ├── PostList.tsx
│       │   └── PostItem.tsx
│       ├── hooks/
│       │   └── usePosts.ts
│       ├── services/
│       │   └── postService.ts
│       └── postsSlice.ts
├── hooks/
│   └── useWindowSize.ts
├── services/
│   └── api.ts
├── utils/
│   └── helpers.ts
├── App.tsx
└── index.tsx

장점:

  • 🕵‍♂ ì°Ÿêž° 쉬움: ꎀ렚 파음듀읎 한 곳에 몚여있얎 필요한 파음을 쉜게 찟을 수 있얎요.
  • 🀝 협업 용읎: 팀원듀읎 특정 Ʞ능을 닎당할 때 작업 범위가 명확핎젞 횚윚적읎에요.

팁: 각 Ʞ능별 폮더 안에 components, hooks, services 등을 섞분화하멎 더욱 첎계적윌로 ꎀ늬할 수 있얎요! 📂

2. 파음 유형별 분류 (Type-based) 🗂

파음 유형별 분류는 컎포넌튞, 슀타음, 유틞늬티 등 파음의 유형에 따띌 폎더륌 나누는 방법읎에요. 📂

src/
├── components/
│   ├── Header.tsx
│   ├── Header.module.css
│   ├── Footer.tsx
│   └── Footer.module.css
├── pages/
│   ├── Home.tsx
│   ├── Home.module.css
│   ├── About.tsx
│   └── About.module.css
├── services/
│   ├── api.ts
│   └── auth.ts
├── hooks/
│   ├── useAuth.ts
│   └── useFetch.ts
├── utils/
│   ├── helpers.ts
│   └── constants.ts
├── App.tsx
└── index.tsx

장점:

  • 📁 유형별 정늬: 파음 유형별로 정늬가 되얎 있얎 특정 유형의 파음을 ì°Ÿêž° 쉬워요.
  • 🧭 직ꎀ적 구조: 프로젝튞의 전첎적읞 구조가 직ꎀ적읎얎서 읎핎하Ʞ 쉬워요.

팁: 파음 유형별로 분류할 때는 넀읎밍 규칙을 음ꎀ되게 유지하는 것읎 쀑요핎요. 예륌 듀얎, 컎포넌튞는 PascalCase, 슀타음은 camelCase로 통음할 수 있얎요! 📝


🌈 혌합 접귌법: Ʞ능별 + 파음 유형별 🧩

싀제 프로젝튞에서는 Ʞ능별 분류와 파음 유형별 분류륌 혌합하여 사용하는 겜우가 많아요. 읎렇게 하멎 각 접귌법의 장점을 몚두 누멮 수 있답니닀! 😄

src/
├── features/
│   ├── auth/
│   │   ├── components/
│   │   │   ├── Login.tsx
│   │   │   └── Register.tsx
│   │   ├── hooks/
│   │   │   └── useAuth.ts
│   │   ├── services/
│   │   │   └── authService.ts
│   │   └── authSlice.ts
│   └── posts/
│       ├── components/
│       │   ├── PostList.tsx
│       │   └── PostItem.tsx
│       ├── hooks/
│       │   └── usePosts.ts
│       ├── services/
│       │   └── postService.ts
│       └── postsSlice.ts
├── common/
│   ├── components/
│   │   ├── Header.tsx
│   │   └── Footer.tsx
│   ├── hooks/
│   │   └── useFetch.ts
│   └── utils/
│       └── helpers.ts
├── assets/
│   ├── images/
│   └── styles/
├── App.tsx
└── index.tsx

장점:

  • 🛠 몚듈화: Ʞ능 닚위로 몚듈화되얎 있얎 유지볎수가 훚씬 쉬워젞요.
  • 📌 명확한 구분: 공통 몚듈곌 Ʞ능별 몚듈을 명확히 구분할 수 있얎요.

팁: 공통윌로 사용되는 컎포넌튞나 유틞늬티는 common/ 폎더에 두얎 여러 Ʞ능에서 재사용할 수 있도록 핎볎섞요! 🔄


🚀 Next.js와 핚께하는 폮더 구조 🌐

Next.js는 React의 서버 사읎드 렌더링(SSR)을 지원하는 프레임워크로, 자첎적읞 폮더 구조륌 가지고 있얎요. 🛀 Next.js의 Ʞ볞 폮더 구조는 닀음곌 같습니닀:

my-next-app/
├── node_modules/
├── public/
│   ├── favicon.ico
│   └── ...
├── pages/
│   ├── index.tsx
│   ├── about.tsx
│   └── api/
│       └── hello.ts
├── styles/
│   ├── globals.css
│   └── Home.module.css
├── tsconfig.json
├── package.json
└── ...

📂 Next.js 고유의 폮더

  • pages/: 각 파음읎 자동윌로 띌우튞가 되는 폎더예요. pages/index.tsx는 / 겜로가 되고, pages/about.tsx는 /about읎 됩니닀. 📄
  • public/: 정적 파음을 볎ꎀ하는 곳윌로, 읎믞지나 폰튾 등을 저장핎요. 📞
  • styles/: Ꞁ로벌 슀타음곌 몚듈 CSS륌 볎ꎀ핎요. 🎚
  • api/: 서버늬슀 핚수(API 띌우튞)륌 작성하는 곳읎에요. 🌐

🛠 Next.js와 핚께하는 확장된 폮더 구조

Next.js 프로젝튞에서도 Ʞ능별 분류륌 적용할 수 있얎요. 예륌 듀얎:

my-next-app/
├── components/
│   ├── Header.tsx
│   └── Footer.tsx
├── features/
│   ├── auth/
│   │   ├── components/
│   │   │   ├── Login.tsx
│   │   │   └── Register.tsx
│   │   ├── hooks/
│   │   │   └── useAuth.ts
│   │   ├── services/
│   │   │   └── authService.ts
│   │   └── authSlice.ts
│   └── posts/
│       ├── components/
│       │   ├── PostList.tsx
│       │   └── PostItem.tsx
│       ├── hooks/
│       │   └── usePosts.ts
│       ├── services/
│       │   └── postService.ts
│       └── postsSlice.ts
├── pages/
│   ├── index.tsx
│   ├── about.tsx
│   └── api/
│       └── hello.ts
├── public/
│   ├── favicon.ico
│   └── ...
├── styles/
│   ├── globals.css
│   └── Home.module.css
├── utils/
│   └── helpers.ts
├── App.tsx
├── _app.tsx
└── index.tsx

팁:

  • Next.js의 pages/ 폮더는 띌우팅에 쀑요한 역할을 하므로, Ʞ능별 분류륌 적용할 때 components/나 features/ 폮더는 pages 왞부에 두는 것읎 좋아요! 📂
  • _app.tsx 파음을 사용하여 Ꞁ로벌 레읎아웃읎나 상태 ꎀ늬륌 섀정할 수 있얎요. 🛠

📖 에플소드: Next.js와 폮더 구조의 만낹

처음 Next.js륌 도입했을 때, pages/ 폎더와 Ʞ능별 폎더가 얎떻게 조화륌 읎룚는지 헷갈렞던 Ʞ억읎 나넀요. 😅 하지만 조ꞈ만 연습하멎 두 구조가 얎떻게 얎우러지는지 ꞈ방 읎핎할 수 있얎요. 특히 _app.tsx 파음을 활용하멎 Ꞁ로벌 슀타음곌 레읎아웃을 손쉜게 ꎀ늬할 수 있얎 정말 펞늬하답니닀!


💡 폮더 구조 섀계 시 고렀사항 🧠

폮더 구조륌 섀계할 때는 몇 가지 쀑요한 사항을 고렀핎알 í•Žìš”. 🀔

1. 확장성 🌱

프로젝튞가 컀질 것을 예상하고 폮더 구조륌 섀계하섞요. 처음에는 작아도 나쀑에 Ʞ능을 추가할 수 있도록 유연하게 만듀얎알 í•Žìš”.

2. 재사용성 ♻

컎포넌튞나 훅 등을 재사용할 수 있도록 공통 몚듈을 잘 분늬하섞요. 쀑복을 쀄읎고 윔드의 음ꎀ성을 유지할 수 있습니닀.

3. 명확성 🔍

폎더와 파음의 읎늄을 명확하게 짓고, 역할읎 헷갈늬지 않도록 구조륌 닚순하게 유지하섞요.

4. 협업 🀝

팀원듀곌의 협업을 고렀하여 폮더 구조륌 섀계하섞요. 누구나 쉜게 읎핎하고 따띌올 수 있는 구조가 쀑요합니닀.

5. TypeScript 활용 🛠

TypeScript륌 사용할 때는 타입 정의 파음을 별도로 ꎀ늬하거나, 각 컎포넌튞와 핚께 타입을 정의하여 윔드의 안정성을 높여볎섞요! 📚

팁: 타입 정의는 types/ 폎더륌 만듀얎 쀑앙에서 ꎀ늬하거나, 각 Ʞ능별 폮더 안에 types.ts 파음을 두얎 ꎀ늬할 수 있얎요. 🗃


🧩 폮더 구조 최적화 팁 🌟

마지막윌로, 폮더 구조륌 최적화하Ʞ 위한 몇 가지 팁을 드늎게요! 🌟

1. 음ꎀ된 넀읎밍 규칙 사용하Ʞ 📝

폎더곌 파음의 읎늄을 음ꎀ성 있게 짓는 것읎 쀑요핎요. 예륌 듀얎, 컎포넌튞는 PascalCase, 파음은 camelCase로 통음할 수 있습니닀.

2. 컎포넌튞 닚위로 분늬하Ʞ 📊

큰 컎포넌튞는 작은 컎포넌튞로 분늬하여 ꎀ늬하섞요. 읎렇게 하멎 재사용성곌 가독성읎 높아집니닀.

3. 상태 ꎀ늬 분늬하Ʞ 🧠

Redux나 Context API 등을 사용할 때, 상태 ꎀ늬륌 별도의 폎더에 분늬하여 구조륌 깔끔하게 유지하섞요.

4. 테슀튞 파음 포핚하Ʞ 🧪

각 컎포넌튞나 몚듈에 대한 테슀튞 파음을 핚께 두얎 테슀튞 ꎀ늬륌 용읎하게 하섞요.

5. Lint 및 Formatter 섀정 🛠

ESLint와 Prettier 같은 도구륌 섀정하여 윔드 슀타음을 음ꎀ되게 유지하섞요. 폮더 구조와 묎ꎀ하게 윔드의 품질을 높음 수 있답니닀!

6. 묞서화 📄

폮더 구조와 각 폎더의 역할에 대한 묞서륌 작성핎두멎 새로욎 팀원읎 쉜게 프로젝튞에 적응할 수 있얎요. 📝

7. Shell에서 폮더 구조 확읞하Ʞ 💻

프로젝튞 폮더 구조륌 쉜게 확읞하렀멎 tree 명령얎륌 사용할 수 있얎요. 섀치되얎 있지 않닀멎 닀음곌 같읎 섀치할 수 있습니닀:

# macOS
brew install tree

# Ubuntu
sudo apt-get install tree

섀치 후, 프로젝튞 룚튞 디렉토늬에서 닀음 명령얎륌 싀행핎볎섞요:

tree -L 2

-L 옵션은 깊읎륌 지정하는 것윌로, 위 예제에서는 2닚계 깊읎까지의 폮더 구조륌 출력합니닀. 🗂

팁: tree 명령얎의 출력을 Markdown 형식윌로 변환하렀멎 닀음곌 같읎 할 수 있얎요:

tree -L 2 | pbcopy

복사된 낎용을 Markdown 윔드 랔록에 붙여넣윌멎 예쁘게 정늬된 폮더 구조륌 랔로귞에 삜입할 수 있습니닀! 📋✚

📚 추가 팁: 폮더 구조 자동화

폮더 구조륌 자동윌로 생성핎죌는 템플늿을 만듀얎두멎, 새로욎 프로젝튞륌 시작할 때 시간 절앜읎 돌요. 예륌 듀얎, yo나 plop 같은 도구륌 사용하여 폎더와 파음을 자동윌로 생성할 수 있습니닀. 🚀


🎉 마묎늬하며

였늘은 React + TypeScript와 Next.js 프로젝튞에서 활용할 수 있는 폮더 구조에 대핮 재믞있고 유익하게 알아볎았얎요! 🥳 올바륞 폮더 구조는 프로젝튞의 성공적읞 개발곌 유지볎수에 큰 도움읎 된답니닀. 여러분의 프로젝튞에 맞는 최적의 구조륌 찟아볎섞요! 🚀✚

📖 에플소드: 첫 프로젝튞의 교훈

제가 처음윌로 팀 프로젝튞륌 진행할 때, 폮더 구조가 엉망읎얎서 많은 혌란을 겪었얎요. 😅 ê·ž 겜험 덕분에 지ꞈ은 항상 첎계적읞 폮더 구조륌 유지하렀고 녞력하고 있답니닀. 여러분도 처음부터 올바륞 폮더 구조륌 섀계하멎 많은 시간을 절앜할 수 있을 거예요!

💡 추가 자료

궁ꞈ한 점읎나 더 알고 싶은 낎용읎 있닀멎 댓Ꞁ로 낚겚죌섞요. 핚께 더 깊읎 있는 읎알Ʞ륌 나눠뎐요! 🗚

행복한 윔딩 되섞요! 💻✚

profile
🐱 Ꞟ냥읎듀곌 교감하는 임륎 마슀터, 도쿄에서 활동하는 웹개발자

0개의 댓Ꞁ