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

https://github.com/designsystemlab/challenge-flow

๐Ÿ’ช Challenge Flow
https://github.com/designsystemlab/challenge-flow

Last synced: 10 months ago
JSON representation

๐Ÿ’ช Challenge Flow

Awesome Lists containing this project

README

          

## ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

[ChallengeFlow](https://challenge-flow.herokuapp.com/)๋Š” ๊ทธ๋ฃน์„ ๊ตฌ์„ฑํ•˜์—ฌ ์›ํ•˜๋Š” ์ฃผ์ œ์— ๋Œ€ํ•ด ์„œ๋กœ ํ•™์Šต์„ ๋„๋ชจํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

## ์ฃผ์š” ๊ธฐ๋Šฅ

| GitHub ๋กœ๊ทธ์ธ | ์ฑŒ๋ฆฐ์ง€ ์ƒ์„ฑ |
| :--------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------- |
| ![02-user-login](https://github.com/DesignSystemLab/challenge-flow/assets/46988995/6c70079c-fcf8-4f6b-af80-f1f4594f9404) | ![new-challenge](https://github.com/DesignSystemLab/challenge-flow/assets/46988995/e115a7a8-d45a-4e58-8266-91d0bc44373c) |
| **์ฑŒ๋ฆฐ์ง€ ์ƒ์„ธ** | **์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ชฉ๋ก** |
| ![04-view-challenge](https://github.com/DesignSystemLab/challenge-flow/assets/46988995/1106e683-6824-4eca-a025-4c6d81dc3802) | ![06-workspace-infinite-scroll](https://github.com/DesignSystemLab/challenge-flow/assets/46988995/360f46fc-aa19-4c95-91eb-85e04ce68509) |
| **์›Œํฌ์ŠคํŽ˜์ด์Šค ์ƒ์„ธ** | **์ด๋ฉ”์ผ ๋กœ๊ทธ์ธ** |
| ![07-workspace-view](https://github.com/DesignSystemLab/challenge-flow/assets/46988995/76666ddb-cdde-4553-a495-09852939abe2) | ![08-email-login](https://github.com/DesignSystemLab/challenge-flow/assets/46988995/dabfe62b-332d-493d-bdd7-28ba9339d7d5) |

### ์„ ์–ธ์ ์ธ ์ฝ”๋“œ

์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ ์–ธ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ์˜ˆ๋กœ, React 18 ๋ฒ„์ „์—์„œ ์ œ๊ณตํ•˜๋Š” Suspense์™€ ErrorBoundary๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋กœ๋”ฉ ์ƒํƒœ์™€ ์˜ค๋ฅ˜ ๊ฒฝ๊ณ„๋ฅผ ๊ตฌ์„ฑํ–ˆ์œผ๋ฉฐ, ๋กœ๋”ฉ๊ณผ ์˜ค๋ฅ˜ UI์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€๋กœ ์œ„์ž„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

```jsx


} suspense={}>

```

### ์ง€์—ญ์„ฑ์„ ๊ณ ๋ คํ•œ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

```plaintext
๐Ÿ“ฆroot/src
โ”œโ”€โ”€ ๐Ÿ“‚ auth
โ”œโ”€โ”€ ๐Ÿ“‚ challenge
โ”œโ”€โ”€ ๐Ÿ“‚ layout
โ”œโ”€โ”€ ๐Ÿ“‚ pages
โ”‚ โ”œโ”€โ”€ ๐Ÿ“‚ api
โ”‚ โ”œโ”€โ”€ ๐Ÿ“‚ challenge
โ”‚ โ”œโ”€โ”€ ๐Ÿ“‚ profile
โ”‚ โ””โ”€โ”€ ๐Ÿ“‚ workspace
โ”œโ”€โ”€ ๐Ÿ“‚ reaction
โ”‚ โ”œโ”€โ”€ ๐Ÿ“‚ comment
โ”‚ โ””โ”€โ”€ ๐Ÿ“‚ emoji
โ”œโ”€โ”€ ๐Ÿ“‚ shared
โ””โ”€โ”€ ๐Ÿ“‚ workspace
```

์ง€์—ญ์„ฑ์„ ๊ณ ๋ คํ•œ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ž€, ์—ฐ๊ด€์„ฑ์ด ๋†’์€ ์ฝ”๋“œ๋ผ๋ฆฌ ๊ฐ™์€ ํด๋” ๋‚ด์— ์œ„์น˜์‹œํ‚ค๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ•จ์œผ๋กœ์จ ๋‘๊ฐ€์ง€ ํฐ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

**1. ๋†’์€ ์‘์ง‘๋„**
ํด๋” ๋‚ด๋ถ€๋Š” ์„œ๋กœ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ํ•ด๋‹น ํŒจํ‚ค์ง€ ๋‚ด์—์„œ ๋Œ€๋ถ€๋ถ„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒํ•˜๊ณ , ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

**2. ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„**
์„œ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๊ฐ„์˜ ์˜์กด์„ ์ตœ์†Œํ™”ํ•จ์œผ๋กœ์จ, ํ•œ ํด๋” ๋‚ด์—์„œ์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ํด๋”์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ „์ฒด์ ์ธ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ๋Š” `auth`,`challenge`,`reaction`,`workspace`๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ๊ฐ ๋„๋ฉ”์ธ๋ณ„๋กœ ์ปดํฌ๋„ŒํŠธ, ํ›… ๋“ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ฐ ๋„๋ฉ”์ธ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

### ๋””์ž์ธ์‹œ์Šคํ…œ ํ™œ์šฉ

ํŒ€ ์ž์ฒด์ ์œผ๋กœ ๊ฐœ๋ฐœํ•œ [๋””์ž์ธ์‹œ์Šคํ…œ](https://github.com/DesignSystemLab/design-system)์„ ํ™œ์šฉํ•˜์—ฌ ๋ฏธ๋ฆฌ ์„ค๊ณ„๋œ UI ์ปดํฌ๋„ŒํŠธ ๋ฐ ์Šคํƒ€์ผ ํ—ฌํผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

## ๊ธฐ์ˆ  ์„ ํƒ

ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ๋œ ๊ธฐ์ˆ ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

### ReactQuery

React Query๋Š” API์™€์˜ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•˜๋ฉฐ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์บ์‹œํ•˜๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ํ•ญ์ƒ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด ํŽ˜์ด์ง€ ์ด๋™์‹œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React Query๋Š” React์™€ ํ†ตํ•ฉ์ด ์ž˜ ๋˜์–ด ์žˆ๊ณ  ContextAPI์™€ Suspense๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋” ๋‚˜์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

### IntersectionObserver API

๋ฌดํ•œ์Šคํฌ๋กค ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•ด `react-intersection-observer `๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์„ ์–ธ์ ์ธ hook์„ ์ œ๊ณตํ•˜๊ณ , IntersectionObserver API๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

### NextAuth

NextAuth๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” Firebase๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, NextAuth์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธ์ฆ ๊ณต๊ธ‰์ž(Provider)์™€ ์—ฐ๋™ํ•˜์—ฌ ํšŒ์› ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  API ํ†ต์‹  ์‹œ ์„œ๋ฒ„ ๋‚ด์—์„œ ์„ธ์…˜์„ ํ™œ์šฉํ•œ ์ธ์ฆ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

### Firebase

Challenge Flow๋Š” Firebase๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ๊ตฌ์ถ•ํ•˜๊ณ  ์œ ์ง€๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๊ฐœ๋ฐœ์— ๋”์šฑ ์ง‘์ค‘ํ•˜๊ณ , ํ”„๋กœ์ ํŠธ์˜ ์ดˆ๊ธฐ๋ฒ„์ „์„ ์‹ ์†ํ•˜๊ฒŒ ๋ฆด๋ฆฌ์ฆˆํ•˜๋Š”๋ฐ ์ดˆ์ ์„ ๋งž์ถœ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธฐ๋ฒ„์ „์—์„œ๋Š” ์‹ ์†ํ•œ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด Firebase๋ฅผ ํ™œ์šฉํ–ˆ์ง€๋งŒ ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ์žฅํ•˜๋ฉด์„œ ๋” ๋ณต์žกํ•˜๊ณ  ํƒ„ํƒ„ํ•œ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ Firebase๋ฅผ Node.js์™€ RDBS๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํ™˜ํ•  ๊ณ„ํš์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

### XState

UI ๊ด€์ ์—์„œ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด '์œ ํ•œ์ƒํƒœ๊ธฐ๊ณ„' ๊ฐœ๋…์„ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ ํ•œ์ƒํƒœ๊ธฐ๊ณ„๋ž€, ์‹œ์Šคํ…œ์ด ํŠน์ • ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ƒํƒœ๋กœ ์ „์ด๋˜๋Š” ๊ณผ์ •์„ ๋ชจ๋ธ๋งํ•˜๋Š” ์ˆ˜ํ•™์  ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๊ด€์  ์ƒํƒœ ๊ด€๋ฆฌ๋ณด๋‹ค ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.