Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dev-junehee/nextjs-dashboard-app-tutorial


https://github.com/dev-junehee/nextjs-dashboard-app-tutorial

Last synced: 20 days ago
JSON representation

Awesome Lists containing this project

README

        

## πŸ–€ Next.js Dashboard App Tutorial

이 ν”„λ‘œμ νŠΈλŠ” [Next.js Dashboard App Tutorial](https://nextjs.org/learn/dashboard-app)에 κΈ°λ°˜ν•˜μ—¬ Next.js App Routing을 κ³΅λΆ€ν•˜κΈ° μœ„ν•œ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ ν•™μŠ΅ κ³Όμ •κ³Ό κ³Όμ • 쀑 생긴 μ§ˆμ˜μ‘λ‹΅μ— λŒ€ν•΄ κΈ°λ‘ν•©λ‹ˆλ‹€. πŸ‘©πŸ»β€πŸ’»


> **진행 κΈ°κ°„** : 2023. 11. 21 (TUE) ~ 진행 쀑
**배포 μ‚¬μ΄νŠΈ** : [μ•„μ§μ΄μ—μš”!]()


## 🌷 진행 κ³Όμ •

### 1일차

- [x] Chapter1 : ν”„λ‘œμ νŠΈ μ‹œμž‘
- [x] Chapter2 : CSS μŠ€νƒ€μΌλ§

### 2일차

- [x] Chapter3 : 폰트 및 이미지 μ΅œμ ν™”
- [x] Chapter4 : λ ˆμ΄μ•„μ›ƒ 및 νŽ˜μ΄μ§€ λ§Œλ“€κΈ°
- [x] Chapter5 : νŽ˜μ΄μ§€ 탐색

### 3일차

- [ ] Chapter6 : λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •
- [ ] Chapter7 : 데이터 fetching
- [ ] Chapter8 : 정적 및 동적 λ Œλ”λ§
- [ ] Chapter9 : 슀트리밍
- [ ] Chapter10 : λΆ€λΆ„ 사전 λ Œλ”λ§
- [ ] Chapter11 : 검색 및 νŽ˜μ΄μ§€λ„€μ΄μ…˜ μΆ”κ°€
- [ ] Chapter12 : 데이터 λ³€ν˜•
- [ ] Chapter13 : μ—λŸ¬ 핸듀링
- [ ] Chapter14 : μ ‘κ·Όμ„± κ°œμ„ 
- [ ] Chapter15 : 인증 μΆ”κ°€
- [ ] Chapter16 : 메타 데이터 μΆ”κ°€


## πŸ’¬ 회고

### μƒˆλ‘­κ²Œ μ•Œκ²Œλœ 것

- [clsx 라이브러리](https://github.com/lukeed/clsx)
- [next/font](https://nextjs.org/docs/pages/api-reference/components/font)
- [next/image](https://nextjs.org/docs/pages/api-reference/components/image)
- [app λΌμš°νŒ…](https://nextjs.org/docs/app/building-your-application/routing)
- [λΆ€λΆ„ λ Œλ”λ§](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#3-partial-rendering)

### 배운 점

- NEXT.jsλŠ” `next/font` λͺ¨λ“ˆμ„ μ‚¬μš©ν•΄ 폰트λ₯Ό μžλ™μœΌλ‘œ μ΅œμ ν™” ν•œλ‹€. ν°νŠΈμ— λŒ€ν•œ μΆ”κ°€ λ„€νŠΈμ›Œν¬ μš”μ²­μ΄ 없도둝 λΉŒλ“œ μ‹œ 폰트 νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ ν•˜κ³  λ‹€λ₯Έ 정적 데이터와 ν•¨κ»˜ ν˜ΈμŠ€νŒ…ν•œλ‹€.
- `next/font`λŠ” λͺ¨λ“  폰트 νŒŒμΌμ— λŒ€ν•œ λ‚΄μž₯ μžλ™ μ…€ν”„ ν˜ΈμŠ€νŒ… κΈ°λŠ₯이 ν¬ν•¨λ˜μ–΄ μžˆμ–΄ μ›Ή 폰트λ₯Ό 졜적으둜 λ‘œλ“œν•˜μ—¬ λ ˆμ΄μ•„μ›ƒ μ‹œν”„νŠΈ(Layout shift) ν˜„μƒμ΄ 생기지 μ•Šλ„λ‘ ν•œλ‹€.
- `next/image`의 `` μ»΄ν¬λ„ŒνŠΈλŠ” `` νƒœκ·Έμ˜ ν™•μž₯이며 μžλ™ 이미지 μ΅œμ ν™” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. (이미지 λ‘œλ“œ μ‹œλ ˆμ΄μ•„μ›ƒ 이동 방지, μžλ™ 리사이징, 이미지 지연 λ‘œλ”©, Webp 같은 μ΅œμ‹  ν˜•μ‹μœΌλ‘œ 이미지 제곡)
- NEXT.jsλŠ” 파일 μ‹œμŠ€ν…œ λΌμš°νŒ…μ„ 톡해 쀑첩 경둜λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. 폴더λ₯Ό μ‚¬μš©ν•΄ μƒˆ 경둜 μ„Έκ·Έλ¨ΌνŠΈλ₯Ό μƒμ„±ν•˜κ³ , 폴더 내뢀에 `page.tsx`λ₯Ό μΆ”κ°€ν•œλ‹€.
- `layout.tsx`λ₯Ό μ‚¬μš©ν•˜λ©΄ νŽ˜μ΄μ§€ 탐색 μ‹œ νŽ˜μ΄μ§€ ꡬ성 μš”μ†Œλ§Œ μ—…λ°μ΄νŠΈλ˜κ³  λ ˆμ΄μ•„μ›ƒμ€ λ‹€μ‹œ λ¦¬λ Œλ”λ§ λ˜μ§€ μ•ŠλŠ”λ‹€. (= λΆ€λΆ„ λ Œλ”λ§)
- `/app/layout.tsx`λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λͺ¨λ“  νŽ˜μ΄μ§€μ˜ UI에 곡유되고(= RootLayout), `/app/dashboard/layout.tsx`λŠ” λŒ€μ‹œλ³΄λ“œ νŽ˜μ΄μ§€λ§ˆλ‹€ κ³΅μœ λœλ‹€. 즉 μ—¬λŸ¬ νŽ˜μ΄μ§€μ— 걸쳐 UIλ₯Ό κ³΅μœ ν•΄μ•Ό ν•  경우 λ ˆμ΄μ•„μ›ƒ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ΄μš©ν•˜λŠ” 것이 μ’‹λ‹€.
- `next/link`의 `` μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜λ©΄ `` νƒœκ·Έμ™€ λ™μΌν•˜κ²Œ μž‘λ™ν•˜μ§€λ§Œ, νŽ˜μ΄μ§€ 전체 μƒˆλ‘œκ³ μΉ¨μ„ ν•˜μ§€ μ•Šκ³  μ›Ή μ•±μ²˜λŸΌ νŽ˜μ΄μ§€ 탐색이 κ°€λŠ₯ν•˜λ‹€. μ™œλƒν•˜λ©΄ NEXT.jsλŠ” 경둜 μ„Έκ·Έλ¨ΌνŠΈλ³„λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ λΆ„ν• ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. νŠΉμ • νŽ˜μ΄μ§€μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•΄λ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ‚˜λ¨Έμ§€ 뢀뢄은 μ •μƒμ μœΌλ‘œ μž‘λ™ν•œλ‹€.
- NEXT.jsλŠ” `` ꡬ성 μš”μ†Œκ°€ λΈŒλΌμš°μ € λ·°ν¬νŠΈμ— λ‚˜νƒ€λ‚  λ•Œ, μ—°κ²°λœ κ²½λ‘œμ— λŒ€ν•œ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ 미리 κ°€μ Έμ˜€κΈ° λ•Œλ¬Έμ— μ‚¬μš©μžκ°€ 링크λ₯Ό 클릭할 경우 λŒ€μƒ νŽ˜μ΄μ§€μ˜ μ½”λ“œκ°€ 이미 λ°±κ·ΈλΌμš΄λ“œμ— λ‘œλ“œλ˜μ–΄ μžˆμ–΄ νŽ˜μ΄μ§€ μ „ν™˜μ΄ 거의 μ¦‰κ°μ μœΌλ‘œ 이루어진닀.

### μ•„μ‰¬μš΄ 점

- TailWind CSS μ½”λ“œκ°€ λŒ€λΆ€λΆ„ μž‘μ„±λ˜μ–΄ μžˆμ–΄ μ œλŒ€λ‘œ μ—°μŠ΅ν•  수 μ—†μ—ˆλ˜ 점
- ν•™μŠ΅ 쀑간에 κΈ°μ—… λ©΄μ ‘ λŒ€λΉ„λ₯Ό μœ„ν•΄ 2μ£Ό κ°€λŸ‰ 텀이 생긴 점


## πŸ“‚ 폴더 ꡬ쑰

- `/app`: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•œ λͺ¨λ“  경둜, ꡬ성 μš”μ†Œ 및 논리가 ν¬ν•¨λ˜μ–΄ 있으며 μ—¬κΈ°μ„œ 주둜 μž‘μ—…ν•˜κ²Œ λ©λ‹ˆλ‹€.
- `/app/lib`: μž¬μ‚¬μš© κ°€λŠ₯ν•œ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜, 데이터 κ°€μ Έμ˜€κΈ° ν•¨μˆ˜ λ“± μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜κ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
- `/app/ui`: μΉ΄λ“œ, ν…Œμ΄λΈ”, 양식 λ“± μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ“  UI ꡬ성 μš”μ†Œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
- `/public`: 이미지와 같은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ“  정적 μžμ‚°μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
- `/scripts`: 이후 μž₯μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ±„μš°λŠ” 데 μ‚¬μš©ν•  μ‹œλ“œ μŠ€ν¬λ¦½νŠΈκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
- `next.config.js` : μ‘μš©ν”„λ‘œκ·Έλž¨μ˜ λ£¨νŠΈμ— next.config.js와 같은 Config νŒŒμΌλ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 이 νŒŒμΌλ“€μ€ λŒ€λΆ€λΆ„ create-next-app을 μ‚¬μš©ν•˜μ—¬ μƒˆ ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•  λ•Œ μƒμ„±λ˜κ³  미리 κ΅¬μ„±λ©λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œλŠ” μˆ˜μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.


## πŸ‘€ ν”„λ‘œμ νŠΈ ν…ŒμŠ€νŠΈ

### clone project

```bash
$ git clone
[email protected]:dev-junehee/nextjs-dashboard-app-tutorial.git
```

### go to project

```bash
$ cd nextjs-dashboard-app-tutorial
```

### install npm

```bash
$ npm install
```

### start project

```bash
$ npm run dev
```