|
1 | | -# ๋กค๋ง ํ๋ก์ ํธ |
| 1 | +# Rolling |
| 2 | +๋ง์์ ์ข
์ด๋นํ๊ธฐ์ ๋ด์ ์ ํ์ธ์. ๋ถ๋ด ์์ด, ๋ฐ๋ปํ๊ฒ. |
| 3 | + |
| 4 | +## ๐ ๋ฐฐํฌ ์ฃผ์ |
| 5 | +[๋กค๋ง ๋ฐ๋ก๊ฐ๊ธฐ](https://rolling-gamma.vercel.app/) |
| 6 | + |
| 7 | +## ๐ ํ๋ก์ ํธ ์๊ฐ |
| 8 | +Rolling์ ์์คํ ์ฌ๋๋ค์๊ฒ ๋ง์์ ์ ํ ์ ์๋ ๋กค๋ง ํ์ดํผ ์๋น์ค์
๋๋ค. ์ด๋ฆ, ๋ฐฐ๊ฒฝ, ์์ญ์ ์ค์ ํ์ฌ ๋กค๋ง ํ์ดํผ๋ฅผ ๋ง๋ค๊ณ , ๋ฉ์์ง์ ์ด๋ชจ์ง ๋ฐ์์ ๋จ๊ฒจ๋ณด์ธ์. |
| 9 | + |
| 10 | +## ๐ ๊ธฐ์ ์คํ |
| 11 | +### Language |
| 12 | +<img src="https://img.shields.io/badge/javascript-%23323330.svg?style=for-the-badge&logo=javascript&logoColor=%23F7DF1E"> |
| 13 | + |
| 14 | +### FrontEnd |
| 15 | +<img src="https://img.shields.io/badge/react-61DAFB?style=for-the-badge&logo=react&logoColor=black"><img src="https://img.shields.io/badge/React_Router-CA4245?style=for-the-badge&logo=react-router&logoColor=white"> |
| 16 | + |
| 17 | +### Style |
| 18 | +<img src="https://img.shields.io/badge/SCSS-CC6699?style=for-the-badge&logo=sass&logoColor=white"><img src="https://img.shields.io/badge/CSS_Modules-000000?style=for-the-badge&logo=css-modules&logoColor=white"> |
| 19 | + |
| 20 | +### ๋๊ตฌ ๋ฐ ์ ํธ๋ฆฌํฐ |
| 21 | +<img src="https://img.shields.io/badge/vite-%23646CFF.svg?style=for-the-badge&logo=vite&logoColor=white"> |
| 22 | + |
| 23 | +### API |
| 24 | +<img src="https://img.shields.io/badge/axios-5A29E4?style=for-the-badge&logo=axios&logoColor=white"> |
| 25 | + |
| 26 | +### ์ฝ๋ ํฌ๋งคํฐ ๋ฐ ๊ฒ์ฌ ๋๊ตฌ |
| 27 | +<img src="https://img.shields.io/badge/ESLint-4B32C3?style=for-the-badge&logo=eslint&logoColor=white"><img src="https://img.shields.io/badge/Prettier-F7B93E?style=for-the-badge&logo=prettier&logoColor=black"> |
| 28 | + |
| 29 | +### ํ์
ํด |
| 30 | +<img src="https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white"><img src="https://img.shields.io/badge/Notion-%23000000.svg?style=for-the-badge&logo=notion&logoColor=white"><img src="https://img.shields.io/badge/Discord-%235865F2.svg?style=for-the-badge&logo=discord&logoColor=white"> |
| 31 | + |
| 32 | +### ๋ฐฐํฌ ๋ฐ CI/CD |
| 33 | +<img src="https://img.shields.io/badge/vercel-%23000000.svg?style=for-the-badge&logo=vercel&logoColor=white"><img src="https://img.shields.io/badge/GitHub_Actions-2088FF?style=for-the-badge&logo=github-actions&logoColor=white"> |
| 34 | + |
| 35 | + |
| 36 | +## ๐ฅ ํ์ ์๊ฐ ๋ฐ ์ญํ ๋ถ๋ด |
| 37 | +<table width="100%"> |
| 38 | + <tr align="center" bgcolor="#f8f8f8"> |
| 39 | + <th width="20%">๋ฐ๊ด๋ฏผ</th> |
| 40 | + <th width="20%">์ด์ฐฌํธ</th> |
| 41 | + <th width="20%">์ด์น๋ฏผ</th> |
| 42 | + <th width="20%">์ ์ง์ค</th> |
| 43 | + <th width="20%">์ค์ง์ฐ</th> |
| 44 | + </tr> |
| 45 | + <tr align="center"> |
| 46 | + <td><img src="https://github.com/user-attachments/assets/167246c7-9218-4208-a6ef-fcac9f3851e0" width="180" height="180"></td> |
| 47 | + <td><img src="https://github.com/user-attachments/assets/b7b784fc-30c3-4a1a-8b2f-14f899e1042c" width="180" height="180"></td> |
| 48 | + <td><img src="https://github.com/user-attachments/assets/d688f02f-f451-4364-b9a4-326f953d8206" width="180" height="180"></td> |
| 49 | + <td><img src="https://github.com/user-attachments/assets/4ea665ec-37f8-4068-aede-b3cbd62642f6" width="180" height="180"></td> |
| 50 | + <td><img src="https://github.com/user-attachments/assets/b106db3e-240f-4f58-814c-8c2171b2ba10" width="180" height="180"></td> |
| 51 | + </tr> |
| 52 | + <tr align="center"> |
| 53 | + <td style="text-align:center"><a href="https://github.com/minimo-9"><img src="https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white"/></a> </td> |
| 54 | + <td style="text-align:center"><a href="https://github.com/LeeCh0129"><img src="https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white"/></a> </td> |
| 55 | + <td style="text-align:center"><a href="https://github.com/dltmdals3929"><img src="https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white"/> </a></td> |
| 56 | + <td style="text-align:center"><a href="https://github.com/dkslel1225"><img src="https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white"/></a> </td> |
| 57 | + <td style="text-align:center"><a href="https://github.com/Yun-Jinwoo"><img src="https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white"/></a></td> |
| 58 | +</tr> |
| 59 | +</table> |
| 60 | + |
| 61 | +## ๐จ ์ญํ ๋ถ๋ด |
| 62 | +### ๋ฐ๊ด๋ฏผ |
| 63 | +- ๊ณต์ฉ ์ปดํฌ๋ํธ(Button, Input) ๊ฐ๋ฐ ๋ฐ ๋ฒํผ ์ค๋ณต ํด๋ฆญ ๋ฐฉ์ง ์ฒ๋ฆฌ |
| 64 | +- Axios ํต์ ๋ชจ๋ํ ๋ฐ API ๊ด๋ฆฌ, ์๋ฌ ๋ฐ์ ์ ์ฌ์ฉ์ ์๋ฆผ(Alert) ์ฒ๋ฆฌ |
| 65 | +- ๋ฉ์์ง ์์ฑ ํ์ด์ง ๋ฐ์ํ ๊ตฌํ ๋ฐ ๋ฉํํ๊ทธ๋ฅผ ํ์ฉํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ค์ |
| 66 | +- ์ ์ฒด ํฐํธ ์คํ์ผ ์ ์ฉ (์๋ํฐ ๋ฐ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฌผ์ ํด๋์ค ๊ธฐ๋ฐ ๋ฐ์) |
| 67 | +- ํ ํ์ด์ง ๋ฐ ๋ฉ์์ง ์์ฑ ํ์ด์ง ์ ๋๋ฉ์ด์
ํจ๊ณผ ๊ตฌํ |
| 68 | +- ๋ฉ์์ง ์์ฑ ํ์ด์ง(`/post/:id/message`) ๊ตฌํ |
| 69 | + - ๋๋กญ๋ค์ด ์ปดํฌ๋ํธ ๊ฐ๋ฐ |
| 70 | + - Rich Text Editor(Quill) ์ปค์คํ
ํด๋ฐ ๊ตฌ์ฑ (๋งํฌ, ์์, ๋ฆฌ์คํธ ๋ฑ ํฌํจ) |
| 71 | + - ํ๋กํ ์ด๋ฏธ์ง ์
๋ก๋ ๊ธฐ๋ฅ ๋ฐ ๊ธฐ๋ณธ ์ด๋ฏธ์ง ํด๋ฆญ ์ ์ด๊ธฐํ ์ฒ๋ฆฌ |
| 72 | + - ํผ/์๋ํฐ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ๋ฒํผ ๋นํ์ฑํ ์ฒ๋ฆฌ |
| 73 | + - ํ๋กํ ์ด๋ฏธ์ง GET ์์ฒญ ์ Skeleton UI ์ ์ฉ |
| 74 | + - ๊ธฐ์กด API ์ฐ๋(GET) ๋ฐ ๊ฒ์๊ธ ์์ฑ(POST) ๊ธฐ๋ฅ ๊ตฌํ |
| 75 | + - ์์ฑ ์๋ฃ ํ ํด๋น ์นด๋ ํ์ด์ง(`/post/:id`)๋ก ์ด๋ ์ฒ๋ฆฌ |
| 76 | + - ๋ก์ปฌ์คํ ๋ฆฌ์ง ์์ ์ ์ฅ ๋ฐ ๊ด๋ฆฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ |
| 77 | + - ์์ฑ ์ค ์์ ์ ์ฅ |
| 78 | + - ์ ์ถ ์ ์์ ์ ์ฅ ์ญ์ |
| 79 | + - ์ ์ฅ ํ 24์๊ฐ ๊ฒฝ๊ณผ ์ ์๋ ์ญ์ |
| 80 | + - ์ด๊ธฐ ์ํ ์ธํ
์ฒ๋ฆฌ (๊ธฐ๋ณธ ์ด๋ฏธ์ง, ๊ธฐ๋ณธ ํฐํธ ๋ฑ) |
| 81 | + |
| 82 | +### ์ด์ฐฌํธ |
| 83 | +- ํ๋ก์ ํธ ์ด๊ธฐ ์ธํ
|
| 84 | + - ESLint, Prettier ๋ฑ ๋๊ตฌ ์ค์ |
| 85 | +- ๊นํ๋ธ ํ๋ก์ ํธ ๊ด๋ฆฌ |
| 86 | + - PR ํ
ํ๋ฆฟ ์ค์ |
| 87 | + - ๋ธ๋์น ์ ๋ต ์๋ฆฝ ๋ฐ ๊ด๋ฆฌ |
| 88 | + - Fork Repository ์๋ ๋๊ธฐํ ์ํฌํ๋ก์ฐ ๊ตฌ์ถ |
| 89 | +- CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ |
| 90 | + - GitHub Actions ์ํฌํ๋ก์ฐ ์ค์ |
| 91 | + - Vercel ์๋๋ฐฐํฌ ํ๊ฒฝ ๊ตฌ์ฑ |
| 92 | + - Production/Preview ํ๊ฒฝ ๋ถ๋ฆฌ |
| 93 | +- ํค๋ ์๋น์ค ๊ตฌํ |
| 94 | + - ์ด๋ชจ์ง ๋ฆฌ์ก์
๊ธฐ๋ฅ (์ถ๊ฐ/์กฐํ/์นด์ดํ
) |
| 95 | + - Optimstic UI ํจํด ์ ์ฉ |
| 96 | + - ์ค๋ณต ํด๋ฆญ ๋ฐฉ์ง |
| 97 | + - ์นด์นด์คํก ๊ณต์ ๊ธฐ๋ฅ |
| 98 | + - URL ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ๊ธฐ๋ฅ |
| 99 | + - ํ ์คํธ ์๋ฆผ |
| 100 | + - ๋ฐ์ํ UI/UX ๊ตฌํ |
| 101 | + |
| 102 | +### ์ด์น๋ฏผ |
| 103 | +- ๋ฉ์ธ ํ๋ฉด ๊ตฌํ |
| 104 | +- ๋ฐ์ํ UI/UX ๊ตฌํ |
| 105 | + |
| 106 | +### ์ ์ง์ค |
| 107 | +- ๊ณตํต ํค๋ ์ปดํฌ๋ํธ ๊ตฌํ |
| 108 | +- /list ํ์ด์ง ์บ๋ฌ์
๊ตฌํ |
| 109 | + - ์ฌ๋ผ์ด๋ ๊ธฐ๋ฅ: ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ฒํผ, ํฐ์น, ๋๋๊ทธ ์
๋ ฅ ๋ฐฉ์์ผ๋ก ๋์ |
| 110 | + - ์บ๋ฌ์
๋ ๋๋ฌ ์ Bounce ์ ๋๋ฉ์ด์
์ ์ฉ |
| 111 | + - Skeleton UI์ ์ด๋ฏธ์ง Preload ์ฒ๋ฆฌ๋ก ์ด๊ธฐ ๋ก๋ฉ ์ ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ |
| 112 | + |
| 113 | + |
| 114 | +### ์ค์ง์ฐ |
| 115 | +- ๋กค๋ง ํ์ดํผ ์์ฑ ํ์ด์ง (`/post`) ๊ตฌํ |
| 116 | + - ๋ฐฐ๊ฒฝ ์์ ๋ฐ ์ด๋ฏธ์ง ์ ํ ๊ธฐ๋ฅ ์ ๊ณต |
| 117 | + - ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ์
๋ก๋ ๊ธฐ๋ฅ ์ถ๊ฐ ๊ตฌํ |
| 118 | + - ์
๋ ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก API์ POST ์์ฒญ ํ, ์์ฑ๋ ํ์ด์ง๋ก ์ด๋ |
| 119 | + - ์ด๋ฏธ์ง ๋ก๋ฉ ์ค ์ค์ผ๋ ํค UI๋ฅผ ์ ์ฉํด ์ฌ์ฉ์ ๊ฒฝํ ํฅ์ |
| 120 | + |
| 121 | +- ๋กค๋ง ํ์ดํผ ํ์ด์ง (`/post/{id}`) ๊ตฌํ |
| 122 | + - `IntersectionObserver`๋ฅผ ํ์ฉํ ๋ฌดํ ์คํฌ๋กค ๊ธฐ๋ฅ ๊ตฌํ (๋ฉ์์ง๋ฅผ ์ผ์ ๊ฐ์์ฉ ๋ฐ๋ณต ํธ์ถ) |
| 123 | + - ์ฌ์ฉ์ ์
๋ ฅ๊ฐ์ ๋ํด XSS ๋ฐฉ์ง๋ฅผ ์ํด `DOMPurify` ์ ์ฉ |
| 124 | + - ๋ฉ์์ง ํด๋ฆญ ์ ์์ธ ๋ด์ฉ์ ๋ชจ๋ฌ ์ฐฝ์ผ๋ก ์ถ๋ ฅ |
| 125 | + - ๋ฉ์์ง ๋ด์ฉ์ด ๊ธธ ๊ฒฝ์ฐ `...`์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๋ ์ด์์ ๊ท ํ ์ ์ง |
| 126 | + - ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ ์ถ๊ฐ๋ก ํ์ด์ง ํ์ ํธ์์ฑ ์ ๊ณต |
| 127 | + |
| 128 | +- ๋กค๋ง ํ์ดํผ ํธ์ง ํ์ด์ง (`/post/{id}/edit`) ๊ตฌํ |
| 129 | + - ๋ฉ์์ง ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ |
| 130 | + - ํ์ด์ง ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ (**์ค์ ๋ฐฉ์ง๋ฅผ ์ํด 2๋จ๊ณ ํ์ธ์ฐฝ์ ์ ์ฉํ์ฌ ์์ ์ฑ ๊ฐํ**) |
| 131 | + - ํธ์ง ๋ชจ๋์์๋ "์ถ๊ฐํ๊ธฐ" ๋ฒํผ์ด ์จ๊ฒจ์ง๋ฏ๋ก, ๋ฉ์์ง ๊ฐ์๋ฅผ ์กฐ์ ํด ๋ ์ด์์์ ์๊ฐ์ ๊ท ํ์ ์ ์ง |
| 132 | + |
| 133 | +- ์ฌ์ฉ์ ๊ฒฝํ(UX) ์ต์ ํ |
| 134 | + - ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ์ ์ง์์ ์ธ ์์ ๋ณํ ์ ๋๋ฉ์ด์
์ ์ ์ฉํด, ํน์ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ์์์๋ ๋์ ๋๋๋ก ๊ฐ์ |
| 135 | + - ๋ชจ๋ฌ ์ฐฝ ๋ฑ์ฅ ๋ฐ ์ข
๋ฃ์ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์
์ ์ ์ฉํด ์ฌ์ฉ์ ๋ชฐ์
๋ ํฅ์ |
| 136 | + - ๋ฉ์์ง ์ญ์ ๋ฒํผ์ hover ์ ๋๋ฉ์ด์
์ถ๊ฐ๋ก ์กฐ์ ํผ๋๋ฐฑ ์ ๊ณต |
| 137 | + |
| 138 | +## ๐ ํด๋ ๊ตฌ์กฐ |
| 139 | +``` bash |
| 140 | +project-root/ |
| 141 | +โโโ src/ |
| 142 | +โ โโโ api/ |
| 143 | +โ โโโ assets/ |
| 144 | +โ โ โโโ images/ |
| 145 | +โ โ โโโ styles/ |
| 146 | +โ โโโ components/ |
| 147 | +โ โ โโโ common/ |
| 148 | +โ โ โโโ layout/ |
| 149 | +โ โโโ context/ |
| 150 | +โ โโโ hooks/ |
| 151 | +โ โโโ pages/ |
| 152 | +โ โโโ utils/ |
| 153 | +โ โโโ App.jsx |
| 154 | +โ โโโ main.jsx |
| 155 | +โโโ ... |
| 156 | +``` |
| 157 | + |
| 158 | +## ๐ ์ปจ๋ฒค์
|
| 159 | + |
| 160 | +### ๐ง Commit Type & Emoji Guide |
| 161 | + |
| 162 | +| **commit type** | **description** | |
| 163 | +|---------------|----------------| |
| 164 | +| feat | โจ ๊ธฐ๋ฅ ์ถ๊ฐ | |
| 165 | +| feat | ๐ผ๏ธ ์์ด์ฝ ์ถ๊ฐ | |
| 166 | +| fix | ๐ ๋ฒ๊ทธ ์์ | |
| 167 | +| docs | ๐ ๋ฌธ์ ์์ | |
| 168 | +| style | ๐จ UI, ์คํ์ผ ๊ด๋ จ ์ถ๊ฐ ๋ฐ ์์ | |
| 169 | +| refactor | โป๏ธ ๋ฆฌํฉํ ๋ง | |
| 170 | +| chore | ๐ง ์ค์ , ๋น๋ ๋ณ๊ฒฝ | |
| 171 | +| chore | ๐ ํด๋ ๊ตฌ์กฐ ๋ณ๊ฒฝ ๋๋ ๋๋ ํ ๋ฆฌ ์์
| |
| 172 | +| remove | ๐ฅ ๋ถํ์ํ ์ฝ๋/ํ์ผ ์ ๊ฑฐ | |
| 173 | +| deploy | ๐ ํ๋ก์ ํธ ๋ฐฐํฌ | |
| 174 | + |
| 175 | + |
| 176 | + |
| 177 | +### ๐ ํด๋/ํ์ผ๋ช
๋ค์ด๋ฐ ์ปจ๋ฒค์
|
| 178 | + |
| 179 | +| **๋์** | **๊ท์น** | **์์** | |
| 180 | +|------|------|--------| |
| 181 | +| ํด๋๋ช
| ์ผ๋ฐฅ์ผ์ด์ค (kebab-case) | components, user-profile | |
| 182 | +| ์ปดํฌ๋ํธ ํ์ผ๋ช
| ํ์ค์นผ์ผ์ด์ค (PascalCase) | UserProfile.jsx | |
| 183 | +| ์คํ์ผ ํ์ผ๋ช
| ์ผ๋ฐฅ์ผ์ด์ค + .styles.js | user-profile.styles.js | |
| 184 | +| ์ด๋ฏธ์ง/์์ด์ฝ ํ์ผ๋ช
| ์ผ๋ฐฅ์ผ์ด์ค | logo-icon.png, profile-default.png | |
| 185 | +| ํจ์๋ช
/๋ณ์๋ช
| ์นด๋ฉ์ผ์ด์ค (camelCase) | fetchUserData, userList | |
| 186 | +| ํ๊ฒฝ๋ณ์ | ๋๋ฌธ์+์ค๋ค์ดํฌ์ผ์ด์ค | VITE_API_URL | |
| 187 | +| ํด๋์ค๋ช
| BEM ๋ฐฉ์ | .block__element--modifier | |
| 188 | + |
| 189 | +### ๐๏ธ Git Flow |
| 190 | + |
| 191 | +| **๋ธ๋์น๋ช
** | **์ค๋ช
** | |
| 192 | +|------------|---------| |
| 193 | +| main | ๋ฐฐํฌ ๋ธ๋์น | |
| 194 | +| develop | ํตํฉ ๊ฐ๋ฐ ๋ธ๋์น | |
| 195 | +| feature/* | ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ธ๋์น | |
| 196 | + |
| 197 | +### ๐ฟ ๋ธ๋์น ๋ค์ด๋ฐ ์ปจ๋ฒค์
|
| 198 | + |
| 199 | +| **๋ธ๋์น ์ข
๋ฅ** | **๋ค์ด๋ฐ ๊ท์น** | **์์** | |
| 200 | +|------|------|--------| |
| 201 | +| ๊ธฐ๋ฅ ๊ฐ๋ฐ | feature/{์ด๋ฆ} | feature/park | |
| 202 | +| ๋ฒ๊ทธ ์์ | fix/{๋ฒ๊ทธ-์ค๋ช
} | fix/login-button-bug | |
| 203 | +| ๋ฌธ์ ์์ | docs/{๋ฌธ์-์ค๋ช
} | docs/readme-update | |
| 204 | + |
0 commit comments