๋๋ฅผ ๋ง๋๋ ์ง๋ฌธ, ํ์ธ๊ณผ ๋๋๋ ์ต๋ช ํธ์ง ๊ณผ๋ํ ์๊ทน์ ์๋์, ์ฑ์ฐฐ๊ณผ ์ง์ ์ฑ ์๋ ์ฐ๊ฒฐ์ ๋ค์ ๊บผ๋ด๋ ํธ์ง ์๋น์ค
์ฌ์ฉ์ ์๋น์ค: https://www.soksak-letter.com
๊ฐ์ฒ๋(FE: 3๋ช , BE: 3๋ช ) + ์ญ์ค๋(PM, Designer, FE) => ์ฒ์ญ์ด
| ๋ถ์ผ | ์ด๋ฆ | ํฌ์ง์ |
|---|---|---|
| PM | ์ธ์ด/์์์ฐ | ํ๋ก์ ํธ ๋งค๋์ง, ์๊ตฌ์ฌํญ ์ ์, ์ผ์ /๋ฆฌ์คํฌ ๊ด๋ฆฌ |
| Design | ์ฐ๋/์กฐ์ ์ด | ๋์์ธ ์์คํ , UX/UI, ํ๋กํ ํ์ |
| FE | ์ /๊น์ง์, ์๋/์ฐจ์๋ฆฐ, ์์/์์์ง, ์ ๋/๋จ์ง์ค | ์ฌ์ฉ์ ํ๋ก์ฐ ๊ตฌํ, API ์ฐ๋, ์ํ/์บ์ ๊ด๋ฆฌ |
| BE | ํธ๋ฏธ/๊น์์ค, ๋๋ถ/์กฐ์ฐ์ค, ๊ท์/๋ฐ์น์ฃผ | API/DB ์ค๊ณ, ์ธ์ฆ/๋ณด์, ๋ฐฐํฌ/์ด์ |
๋๋ฅผ ๋ง๋๋ ์ง๋ฌธ, ํ์ธ๊ณผ ๋๋๋ ์ต๋ช ํธ์ง ์๋น์ค
- ๋งค์ผ ๋์ฐฉํ๋ โ์ค๋์ ์ง๋ฌธโ์ ๋ตํ๋ฉฐ ์๊ฐ์ ์ ๋ฆฌํ๊ณ
- ๋งค์นญ๋ ์๋์ ์ต๋ 10ํ ํธ์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ
- 3์ผ ๋ค ๋์๊ฒ ์ค๋ ํธ์ง(D+3) ๋ก ๋ฆฌํ ์ ๊ณผ ํ๋ณต ๊ฒฝํ์ ๋ง๋ ๋ค
ํ๋์ AI/SNS ์ฌ์ฉ์๋ ์ํผยทSNSยทAI Slop ๋ฑ ๋ํ๋ฏผ์ฑ ์ ๋ณด ๊ณผ์์ ๋ ธ์ถ๋์ด, ๊ฐ์ ์ ์ผ๋ก ์ง์ณค์ ๋ ์ฆ๊ฐ์ ์ธ ์๊ทน์ ์์กดํ๊ฒ ๋ฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ โ์๊ฐํ ์๊ฐโ์ด ์ค์ด ์๊ธฐ ์ฑ์ฐฐ์ด ์ด๋ ค์์ง๊ณ , ์ฅ๊ธฐ์ ์ผ๋ก ๋ฒ์์/๊ณ ๋ฆฝ๊ฐ์ด ๋์ ๋ฉ๋๋ค.
- ๊ทผ๋ณธ ์์ธ: ๋ด๋ฉด์ ๋ถ์์ ์ฑ + ๊ฑด๊ฐํ ์ฌ์ ๋ฅผ ์ํ ์ฐฝ๊ตฌ ๋ถ์ฌ
- ์ฌ์ด ํด๊ฒฐ(์ฆ๊ฐ ์๊ทน, AI ์์กด)๋ก ๊ณ ํต์ ํํผํ๋ ์ต๊ด ๊ฐํ
- ๊ธฐ์กด ํด๊ฒฐ์ฑ (์ผ๊ธฐ/๋ช ์ ์ฑ)์ ๋ถ๋ดยท์ง๋ฃจํจ์ผ๋ก ์ง์ ์ฌ์ฉ ์ ๋ ์คํจ
- ์๊ธฐ ๊ฐ๊ดํ ๋ฅ๋ ฅ ์ ํ โ ๊ฐ์ ์๋ชจ ์ฆ๊ฐ
- ์ธ๋ถ ์๊ทน ์์กด ๊ฐํ โ ์ฌ๋ฆฌ์ ํผ๋ก/๊ณ ๋ฆฝ๊ฐ ์ ํ
- ์ฅ๊ธฐ์ ์ผ๋ก ์ ์ ์ ๊ฑด๊ฐ์ ๋ถ์ ์ ์ํฅ
ํธ์ง์ ๊ฐ์น๋ฅผ ํตํด, ์ฌ์ฉ์์๊ฒ ์ฑ์ฐฐ๊ณผ ์ํต์ ๊ธฐํ๋ฅผ ์ ๊ณตํ์ฌ ์ฅ๊ธฐ์ ์ธ ์ฌ๋ฆฌ์ ์์ ๊ฐ์ ์ค๋ค.
| Fact | Insight |
|---|---|
| ๋์งํธ ๋ํก์ค/๋ํ๋ฏผ ๋ํก์ค ํธ๋ ๋ ํ์ฐ | ์ฌ์ฉ์๋ ์๊ทน์ ์ ์ํ์ ์ง์ณค๊ณ , ์ต๊ด ๊ต์ ํ ๊ฒฝํ์ ์ํ๋ค |
| SNS ์ฌ์ฉ ์ฆ๊ฐ โ ๋น๊ต ์ฌํ๋ก ์ธํ ๊ณ ๋ฆฝ๊ฐ | ์ธ๋ก์์ ์ฐ๊ฒฐ์ ๋ถ์ฌ๊ฐ ์๋๋ผ ์ฐ๊ฒฐ์ ํ์ง ๋ฌธ์ ๋ค |
| ์ฌ๋ฆฌ์๋ด ์์ฅ ์ฑ์ฅ, ์ฌํ์ ๊ณ ๋ฆฝ ์ด์ ํ๋ | ํฐ ๋น์ฉ/์๊ฐ ์์ด ์ผ์ ์์์ ์๋ฐฉ์ ์๊ธฐ๊ด๋ฆฌ ๋์ฆ๊ฐ ์๋ค |
์ฐธ๊ณ (์์): ์์ธ์ โ์ฌํ์ ๊ณ ๋ฆฝโ ์ ์ฑ ์๋ฃ: https://www.seoul.go.kr/policy/view.do?id=1056&lan=KO
- ๋ํ์
- 20๋ ์ง์ฅ์ธ
- 20๋ AI/SNS ํค๋น ์ ์
โ์ ์ โ ํ์ โ ๋งค์นญ/์ํต โ ์ข ๋ฃ/ํผ๋๋ฐฑ โ ์ฌ๋ฐฉ๋ฌธ/ํ์ฅโ์ ๊ฒฝํ์ ํ ์ฅ์ผ๋ก ์ค๊ณ
| ๋จ๊ณ | 1. ์ ์ ๋ฐ ์จ๋ณด๋ฉ | 2. ํ์ | 3. ๋งค์นญ ๋ฐ ์ํต | 4. ์ข ๋ฃ ๋ฐ ํผ๋๋ฐฑ | 5. ์ฌ๋ฐฉ๋ฌธ ๋ฐ ํ์ฅ |
|---|---|---|---|---|---|
| ์ฌ์ฉ์ ๋ชฉํ | ๋น ๋ฅด๊ฒ ๊ฐ์ ํ๊ณ ๊ฐ์น ํ์ธ | ์ค๋์ ์ง๋ฌธ ํ์ธ | ํฐํคํ์นด ๋๋ ๋ํ | ๊น๋ํ ๋ง๋ฌด๋ฆฌ/ํ๊ฐ | ๊ธฐ๋ก ํ์ธ/์ถ๊ฐ ์์ฑ |
| ์ฃผ์ ํ๋ | ์์ ๋ก๊ทธ์ธ โ ํ๋กํ โ D+3 ํธ์ง(ํ์) โ ์๋ฆผ | ์ง๋ฌธ ํ์ธ โ ๋ต๋ณ ์์ฑ | ๋ฐ์กโ๋งค์นญโ๊ตํ(์ต๋ 10ํ) | ์ข ๋ฃ(10ํ/48h) โ ์จ๋/ํ๊ทธ | 3์ผ ์ ํธ์ง ๋์ฐฉ โ ์ฃผ๊ฐ ๋ฆฌํฌํธ |
| ํฐ์นํฌ์ธํธ | ๋๋ฉ/์จ๋ณด๋ฉ/OS ์๋ฆผ | ํ(์ค๋์ ์ง๋ฌธ ์นด๋) | ์ฑํ ๋ฐฉ/์นด์ดํฐ | ๋ฆฌ๋ทฐ ๋ชจ๋ฌ/์ข ๋ฃ ํ์ด์ง | ๋ณด๊ดํจ/๋ฆฌํฌํธ/DatePicker |
| ๊ธฐํ์์ธ | Lock-in(๋ฏธ๋ ๋ณด์) | ํฌ์์ฑ(24h) | ํ์ง๊ด๋ฆฌ(๋ต์ฅ๋ฅ /์จ๋) | ๋ฐ์ดํฐ ์ ์ํ | ์ ๋ฃํ ํ์ฅ |
-
์ค๋์ ์ง๋ฌธ(24์๊ฐ)
๋งค์ผ ์ง๋ฌธ ๊ฐฑ์ / ์นด์ดํธ๋ค์ด / ๋ต๋ณ ์ง์ -
์ต๋ช ๋งค์นญ & ํธ์ง ๊ตํ(์ต๋ 10ํ, 48์๊ฐ)
๋ํ ํ์ ์นด์ดํธ, ๋ง๋ฃ ์ฒ๋ฆฌ -
D+3 ๋์๊ฒ ์ฐ๋ ํธ์ง(์จ๋ณด๋ฉ ํ์) โ๋ฏธ๋์ ๋โ์๊ฒ ๋ณด๋ด๋ ์์ฝ ํธ์ง, ์๋ฆผ์ผ๋ก ํ์
-
์ข ๋ฃ ๋ฆฌ๋ทฐ(์จ๋ ์ฌ๋ผ์ด๋ + ํ๊ธฐ ํ๊ทธ)
๊ฒฝํ ๋ฐ์ดํฐ ์์ง โ ๋ค์ ๋งค์นญ ํ์ง ๊ฐ์ -
์ฃผ๊ฐ ๋ฆฌํฌํธ
์ผ์ฃผ์ผ ๊ธฐ๋ก ์์ฝ/๊ฐ์ ๋ถํฌ/ํค์๋ ์ธ์ฌ์ดํธ ์ ๊ณต -
์น๊ตฌ ๊ธฐ๋ฅ / ํ ๋ง ๋ฐฐ๊ฒฝ / ํฐํธ ์ต์ / ์์ฝ ํธ์ง ํ์ฅ
-
React + Vite
์์ญํธ์ง๋ ๋ชจ๋ฐ์ผ 375px ๊ณ ์ UI ๊ธฐ๋ฐ์ SPA ์๋น์ค๋ก, SSR์ด ํ์์ ์ธ ๊ตฌ์กฐ๋ ์๋๋๋ค. ๋น ๋ฅธ ๊ฐ๋ฐ ์๋์ ๊ฐ๋ฒผ์ด ๋ฒ๋ค ํ๊ฒฝ์ ์ ๊ณตํ๋ Vite ๊ธฐ๋ฐ React ๊ตฌ์กฐ๋ฅผ ์ฑํํ์ฌ ๊ฐ๋ฐ ํจ์จ์ฑ๊ณผ ๋น๋ ์๋๋ฅผ ๋์์ ํ๋ณดํ์์ต๋๋ค. -
TypeScript
ํธ์ง, ๋งค์นญ, ๋ฆฌํฌํธ ๋ฑ ๋๋ฉ์ธ์ด ๋ช ํํ๊ณ API ์๋ต ๊ตฌ์กฐ๊ฐ ์ค์ํ ์๋น์ค ํน์ฑ์ ํ์ ์์ ์ฑ์ด ์ค์ํฉ๋๋ค. TypeScript๋ฅผ ํตํด ํ์ ์ ์๋๋ฅผ ๋ช ํํ ํ๊ณ , ๋ฆฌํฉํ ๋ง ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ๊ณ ์ ์ ์ ํ์์ต๋๋ค. -
TanStack Query
์๋ฒ ๋ฐ์ดํฐ์ ํด๋ผ์ด์ธํธ ์ํ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๊ธฐ ์ํด TanStack Query๋ฅผ ๋์ ํ์์ต๋๋ค. ์บ์ฑ, ์๋ refetch, ๋ก๋ฉ/์๋ฌ ์ํ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ API ์ค์ฌ ๊ตฌ์กฐ์์ ์์ ์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ์ ์ ์งํ๊ณ ์ ํ์์ต๋๋ค. -
Zustand
์ ์ญ ์ํ๋ฅผ ์ต์ํ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๊ฒฝ๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Zustand๋ฅผ ์ฑํํ์์ต๋๋ค. ๋ถํ์ํ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์์ด ์ง๊ด์ ์ธ store ๊ตฌ์กฐ๋ฅผ ์ ์งํ ์ ์์ผ๋ฉฐ, ์ธ์ฆ ์ํ๋ ๋ชจ๋ฌ ๊ด๋ฆฌ ๋ฑ UI ์ค์ฌ ์ ์ญ ์ํ์ ์ ํฉํ๋ค๊ณ ํ๋จํ์์ต๋๋ค. -
Tailwind CSS
Figma ๊ธฐ๋ฐ ๋์์ธ ์์คํ ์ ๋น ๋ฅด๊ฒ ๊ตฌํํ๊ธฐ ์ํด Tailwind CSS๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ์ ํธ๋ฆฌํฐ ํด๋์ค ๊ธฐ๋ฐ ์คํ์ผ๋ง์ ํตํด ์ผ๊ด๋ ๋์์ธ์ ์ ์งํ๋ฉด์๋ ๊ฐ๋ฐ ์๋๋ฅผ ๋์ผ ์ ์์ด ์ ์ ํ์์ต๋๋ค. -
Framer Motion
ํธ์ง ์ ํ, ๋ชจ๋ฌ ๋ฑ์ฅ ๋ฑ ๊ฐ์ฑ์ ์ธ ์ธํฐ๋์ ์ด ์ค์ํ ์๋น์ค ํน์ฑ์ ๊ณ ๋ คํ์ฌ Framer Motion์ ๋์ ํ์์ต๋๋ค. ์ง๊ด์ ์ธ API์ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์ ๊ตฌํ์ด ๊ฐ๋ฅํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐํํ ์ ์์์ต๋๋ค.
-
Node.js + Express
์์ญํธ์ง๋ REST ๊ธฐ๋ฐ API ์๋ฒ ๊ตฌ์กฐ๋ก ์ค๊ณ๋์์ต๋๋ค. ๋น ๋ฅธ ๊ฐ๋ฐ๊ณผ ์ ์ฐํ ๋ผ์ฐํ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ Node.js์ Express๋ฅผ ํ์ฉํ์ฌ ํ๋ก ํธ์๋์์ ํ์ ํจ์จ์ ๋์ด๊ณ ์ ํ์์ต๋๋ค. -
MySQL
ํธ์ง, ์ ์ , ๋งค์นญ, ๋ฆฌ๋ทฐ ๋ฑ ๊ด๊ณํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ช ํํ ์๋น์ค์ด๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ RDBMS์ธ MySQL์ ์ฑํํ์์ต๋๋ค. ๋ฐ์ดํฐ์ ์์ ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐ ์ค์ ์ ๋์์ต๋๋ค. -
Redis
๋งค์นญ ๋๊ธฐ์ด ์ฒ๋ฆฌ ๋ฐ ์บ์ฑ๊ณผ ๊ฐ์ด ๋น ๋ฅธ ์๋ต์ด ํ์ํ ์์ญ์ ์ต์ ํํ๊ธฐ ์ํด Redis๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ฒ ๋ถํ๋ฅผ ์ค์ด๊ณ ์๋ต ์๋๋ฅผ ๊ฐ์ ํ๊ณ ์ ํ์์ต๋๋ค. -
JWT
๋ฌด์ํ ์ธ์ฆ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๊ธฐ ์ํด JWT ๊ธฐ๋ฐ ์ธ์ฆ ๋ฐฉ์์ ์ ์ฉํ์์ต๋๋ค. ์๋ฒ ํ์ฅ์ฑ๊ณผ ์ธ์ฆ ์ฒ๋ฆฌ์ ๋จ์ํ๋ฅผ ๊ณ ๋ คํ์ฌ ํด๋น ๋ฐฉ์์ ์ฑํํ์์ต๋๋ค.
-
๋ชจ๋ ํด๋๋ ์๋ฌธ์ ๋๋ kebab-case
- ์:
weekly-report,bottom-sheet
- ์:
-
๋๋ฉ์ธ ๋จ์๋ก ๋ถ๋ฆฌ (
feed,letters,friend๋ฑ) -
๊ณตํต UI๋
common/ -
์ ์ญ ๋์ ์ปดํฌ๋ํธ๋
system/
- React ์ปดํฌ๋ํธ:
PascalCase.tsx - Page ์ปดํฌ๋ํธ:
PascalCasePage.tsx - Tab/Section/Modal ๋ฑ ์ญํ ์ด ๋๋ฌ๋๋ ์ด๋ฆ ์ฌ์ฉ
- ์:
FriendTopTabs,LetterCard,ModalFrame
- ์:
- ๋ฐ๋์
use๋ก ์์ - camelCase
- ๋๋ฉ์ธ๋ณ ํ์ ํด๋ ์ ์ง
camelCaseStore.ts- ์:
activityStore.ts
- ์:
- ๋๋ฉ์ธ ๋จ์ ํ์ผ
friend.tsweeklyReport.ts
์ปค๋ฐ์ ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฅํ์ฌ ์์ฑํ๋ค.
- feat : ๊ธฐ๋ฅ ๊ฐ๋ฐ
- fix : ๋ฒ๊ทธ ์์
- style : CSS ์คํ์ผ ์์
- docs : ๋ฌธ์ ์์ (์ฃผ๋ก README ์์ฑ ๋ฑ)
- refactor : ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์์ด ๊ตฌ์กฐ/๋ก์ง ๊ฐ์
- chore : ํ์ผ ์ด๋, ์ด๋ฆ ๋ณ๊ฒฝ, ์ฃผ์ ์ถ๊ฐ ๋ฑ ๋จ์ ์์
์ปค๋ฐ ๋ฉ์์ง๋ ๋ค์ ํ์์ ๋ฐ๋ฅธ๋ค.
[#์ด์๋ฒํธ] <์ปค๋ฐ์ ํ> : <์ปค๋ฐ ๋ฉ์์ง>
- ์ปค๋ฐ ๋ฉ์์ง๋ ๋ฐ๋์ ํ๊ธ๋ก ์์ฑํ๋ค.
- ์ปค๋ฐ ์ ํ์ ์๋ฌธ ์๋ฌธ์๋ก ์์ฑํ๋ค.
- ํ์ ์ ๋ฉ์์ง ์์
[#์ด์๋ฒํธ]๋ฅผ ํฌํจํ๋ค. - ์ปค๋ฐ์ ๋
ผ๋ฆฌ์ ์ผ๋ก ๋
๋ฆฝ์ ์ธ ์์
๋จ์๋ก ์์ฑํ๋ค.
- ๋ ๋ฆฝ์ ์ผ๋ก ๋น๋ ๋ฐ ํ ์คํธ ๊ฐ๋ฅํด์ผ ํ๋ค.
- ๋กค๋ฐฑ ์ ์ต์ํ์ ์ํฅ์ ์ฃผ๋ ๋จ์์ฌ์ผ ํ๋ค.
- ์ค์ ์๋น์ค์ ๋ฐฐํฌ๋๋ ๋ธ๋์น
- ์ง์ ๊ฐ๋ฐํ์ง ์์ผ๋ฉฐ, dev ๋ธ๋์น๋ฅผ ํตํด ๋ณํฉ
- main์์ ๋ถ๊ธฐ๋๋ ๊ฐ๋ฐ ํตํฉ ๋ธ๋์น
- feature ๋ธ๋์น์์ ์์ ํ ๊ธฐ๋ฅ์ ๋ณํฉ
- ์ถฉ๋ถํ ํ ์คํธ ํ main์ผ๋ก ๋ฐฐํฌ
- ์ ๊ท ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ธ๋์น
- dev ๋ธ๋์น์์ ๋ถ๊ธฐ
- ๊ฐ๋ฐ ์๋ฃ ํ dev๋ก ๋ณํฉ
- ๋ธ๋์น๋ช
์ kebab-case ์ฌ์ฉ
์:
feature/#1-get-user
- ๋ฒ๊ทธ ์์ ๋ธ๋์น
- dev์์ ๋ถ๊ธฐํ์ฌ ์์ ํ dev๋ก ๋ณํฉ
- ๊ธฐ๋ฅ ๊ตฌํ ๋ธ๋์น๊ฐ dev์ ๋ณํฉ๋์ด ์๋์ง ํ์ธ ํ ์์
# FE
npm i
npm run dev
# BE
npm i
npm run start- ์ค๋์ ์ง๋ฌธ โ ๋ต๋ณ ์์ฑ โ ๋งค์นญ โ 10ํ ๊ตํ โ ์ข ๋ฃ ๋ฆฌ๋ทฐ
- D+3 ํธ์ง ์์ ์๋ฆผ โ ๋ณด๊ดํจ ํ์ธ โ ์ฃผ๊ฐ ๋ฆฌํฌํธ
๋ ธ์ ์ ์ฐธ๊ณ ํด์ฃผ์ธ์.