-
Notifications
You must be signed in to change notification settings - Fork 2
๐ FSD ์ฌ์ฉ๊ธฐ, ๊ทผ๋ฐ ์ด์ ๋๋ง์ ๊ท์น์ ๊ณ๋ค์ธ
FSD(Feature-Sliced Design), ๊ธฐ๋ฅ ๋ถํ ์ค๊ณ
- ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ์ก๋ ์ํคํ ์ฒ ๋ฐฉ๋ฒ๋ก ์ด๋ค
- ์ฝ๋ ๊ตฌ์ฑ์ ๊ดํ ๊ท์น๊ณผ ๊ด๋ก๋ฅผ ๋ชจ์๋ ๊ฒ์ด๋ค
- FSD๋ Layers, Slices, Segments ์ธ๊ฐ์ง ํํธ๋ก ๋๋์ด์ง๋ค
- Depth๋ 3์ผ๋ก ์ ํํ๋ค
-
src
ํด๋ ์๋ ์ต์์ ๋๋ ํ ๋ฆฌ์ด์ ์ ํ๋ฆฌ์ผ์ด์ ๋ถํด์ ์ฒซ ๋จ๊ณ์ด๋ค - ์ต๋ 7๊ฐ๋ก ์ ํ๋์ด ์์ผ๋ฉฐ, ๋ชจ๋ ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ ํ์๋ ์์ง๋ง, ์ด๋ฆ์ ์ค์ํ๋ค
โโโ src/
โโโ app/
โโโ processes/ (deprecated)
โโโ pages/
โโโ widgets/
โโโ features/
โโโ entities/
โโโ shared/
- app : ์ ํ๋ฆฌ์ผ์ด์
๋ก์ง์ด ์ด๊ธฐํ ๋๋ entry point์ด๋ค
- ํ๋ก๋ฐ์ด๋, ๋ผ์ฐํฐ, ์ ์ญ ์คํ์ผ, ์ ์ญ ํ์ ์ ์ธ ๋ฑ์ด ์ฌ๊ธฐ์ ์ ์๋๋ค
- processes : ์ฌ๋ฌ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง ๋ฑ๋ก๊ณผ ๊ฐ์ด ์ฌ๋ฌ ํ์ด์ง์ ๊ฑธ์ณ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๋ค
- pages : ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ด์ง๊ฐ ํฌํจ๋๋ค (๋ธ๋ผ์ฐ์ ์ฃผ์ ๋จ์์ ์ปดํฌ๋ํธ)
- widgets : ํ์ด์ง์ ์ฌ์ฉ๋๋ ๋ ๋ฆฝ์ ์ธ UI ์ปดํฌ๋ํธ๊ฐ ํฌํจ๋๋ค
- features : ๋น์ฆ๋์ค ๊ฐ์น๋ฅผ ์ ๋ฌํ๋ ์ฌ์ฉ์ ์๋๋ฆฌ์ค์ ๊ธฐ๋ฅ์ ๋ค๋ฃฌ๋ค. ์ข์์, ๋ฆฌ๋ทฐ ์์ฑ, ์ ํ ํ๊ฐ ๋ฑ์ด ์๋ค
- entities : ๋น์ฆ๋์ค ์ํฐํฐ๋ฅผ ๋ํ๋ธ๋ค. ์ฌ์ฉ์, ๋ฆฌ๋ทฐ, ๋๊ธ ๋ฑ์ด ํฌํจ๋ ์ ์๋ค
- shared : ํน์ ๋น์ฆ๋์ค ๋ก์ง์ ์ข
์๋์ง ์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ์ ์ ํธ๋ฆฌํฐ๊ฐ ํฌํจ๋์ด ์๋ค
- UI ํคํธ, axios ์ค์ , type ์ค์ , ์ ํ๋ฆฌ์ผ์ด์ ์ค์ , ๋น์ฆ๋์ค ๋ก์ง์ ๋ฌถ์ด์ง ์์ ํผํผ ๋ฑ์ด ํฌํจ๋๋ค
- app๊ณผ shared๋ ๋ค๋ฅธ ๋ ์ด์ด๋ค๊ณผ ๋ฌ๋ฆฌ ์ฌ๋ผ์ด์ค๋ฅผ ๊ฐ์ง์ง ์์ผ๋ฉฐ, ์ง์ ์ธ๊ทธ๋จผํธ๋ก ๊ตฌ์ฑ๋๋ค
- preocesses๋ ๋ ์ด์ ์ฌ์ฉ ๋์ง ์๋๋ค
- ํ ๋ ์ด์ด์ ๊ตฌ์ฑ ์์๋ ๋ฐ๋์ ์๋์ ์๋ ๋ ์ด์ด์ ๊ตฌ์ฑ ์์๋ง ์ ์ ์๊ณ ์ํฌํธํ ์ ์๋ค
- ๋ ์ด์ด์ ๋ด๋ถ ํด๋๋ค์ด๋ฉฐ, ์ฌ๋ผ์ด์ค๋ ๋๋ฉ์ธ์ ๋ฐ๋ผ ๋ ์ด์ด๋ฅผ ๋๋๋ค
- ์์ ๋กญ๊ฒ ์ด๋ฆ์ ์ ํํ ์ ์๊ณ , ์ํ๋ ๋งํผ ๋ง์ด ๋ง๋ค ์ ์๋ค
- ๊ฐ์ ๋ ์ด์ด ์์์ ๋ค๋ฅธ ์ฌ๋ผ์ด์ค๋ฅผ ์ฐธ์กฐํ ์ ์์ผ๋ฉฐ, ๋์ ์๋ฅ๋์ ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์ ์งํ๋ ๋ฐ ๋์์ด ๋๋ค
- ์ฌ๋ผ์ด์ค ๋ด๋ถ ํด๋๋ค์ด๋ฉฐ, ์ธ๊ทธ๋จผํธ๋ ์ฝ๋์ ๊ธฐ๋ฅ์ ๋ชฉ์ , ๋ค์๋งํด ์ฝ๋๊ฐ ์ํํ๋ ์ญํ ์ ๋ฐ๋ผ ๋๋๋ค
- ์ธ๊ทธ๋จผํธ ์ด๋ฆ์ ํ์ค์ ์ํด ์ ํ๋์ง ์์ง๋ง, ์ผ๋ฐ์ ์ธ ๋ชฉ์ ์ ์ํ ๋ช ๊ฐ์ง ๊ด๋ก์ ์ธ ์ด๋ฆ์ด ์๋ค
- ui : UI์ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ - ์ปดํฌ๋ํธ, ๋ ์ง ํฌ๋งทํฐ, ์คํ์ผ ๋ฑ
- api : ๋ฐฑ์๋ ์ฌ์ฉํธ์์ฉ - request ํจ์, ๋ฐ์ดํฐ ํ์ , mapper ๋ฑ
- model : ๋ฐ์ดํฐ ๋ชจ๋ธ - ์คํค๋ง, ์ธํฐํ์ด์ค, ์คํ ์ด, ๋น์ฆ๋์ค ๋ก์ง
- lib : ์ฌ๋ผ์ด์ค ์์ ์๋ ๋ค๋ฅธ ๋ชจ๋์ด ํ์๋ก ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋
- config : ์ค์ ํ์ผ๊ณผ ๊ธฐ๋ฅ ํ๋๊ทธ
ํ๋ก์ ํธ๋ฅผ ์์ํ ๋, ํ๋ก์ ํธ ํด๋ ๊ตฌ์กฐ์ ๊ณ ๋ฏผ์ ๋ง์ด ํ๋ค
ํ๋ก์ ํธ์ ๋ํด ๋ชจ๋ฅด๋ ๋๊ตฐ๊ฐ๊ฐ ์ฝ์์ ๋, ์ดํดํ ์ ์๋๊ฐ๋ ํญ์ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ์๋ค
ํ์ ํ ๋์๋ ์ฐพ๊ธฐ ์ฌ์ด ํด๋์ ํ์ผ์ ์์น๋ ๊ฐ๋ฐ ๋ฅ๋ฅ ์ ์ฌ๋ฆฌ๋ ์ข์ ํ์ ์ด๋ค
๋ฆฌ์กํธ์์ ์ ํํ๋ ํจํด์ด๋ผ๋ฉด Container-Presenter, Container Component ํจํด์ ๋ง์ด ์ฌ์ฉํ๋ค
๋ฐ์ดํฐ์ UI๋ฅผ ๊ธฐ์ค์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋ ํจํด๋ค์ด๋ค
๊ธฐ๋ฅ์ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํ๋ FSD๋ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์๋ค
- ๊ท ์ผ์ฑ
- ๊ตฌ์กฐ๊ฐ ํ์คํ๋์ด ์์ด, ํ๋ก์ ํธ๊ฐ ๊ท ์ผํด์ง๋ฉฐ, ์๋ก์ด ๊ตฌ์ฑ์์ด ํ๋ก์ ํธ๋ฅผ ์ดํดํ๊ธฐ ํธํ๊ฒ ํด์ค๋ค
- ๋ณ๊ฒฝ๊ณผ ๋ฆฌํฉํ ๋ง์ ๋ํ ์์ ์ฑ
- ํ ๋ ์ด์ด์ ๊ตฌ์ฑ ์์๋ ๊ฐ์ ๋ ์ด์ด๋ ์์ ๋ ์ด์ด์ ๋ค๋ฅธ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ฑ์ ์ฌ์ด๋ ์ดํํธ ์์ด ๊ฒฉ๋ฆฌ๋ ์์ ์ ํ ์ ์๋ค
- ๋ก์ง ์ฌ์ฌ์ฉ์ ํต์ฌ
- ๋ ์ด์ด์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ๋งค์ฃผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋๋ ๋งค์ฐ ์ง์ญ์ ์ผ๋ก ๋ง๋ค ์ ์๋ค
- ๋น์ฆ๋์ค์ ์ฌ์ฉ์ ์๊ตฌ์ ๋ํ ์งํฅ์ฑ
๋จ์ ์ ๋ค์๊ณผ ๊ฐ๋ค
- ๋ค๋ฅธ ๋ง์ ์ํคํ ์ฒ ์๋ฃจ์ ๋ค์ ๋นํด ๋์ ์ง์ ์ฅ๋ฒฝ์ด ์๋ค
- ์ธ์, ํ ๋ฌธํ ๋ฐ ๊ฐ๋ ์ค์๊ฐ ํ์ํ๋ค
- ๋์ ๊ณผ์ ์ ๋ฌธ์ ๋ฅผ ๋์ค์ด ์๋ ์ฆ์ ํด๊ฒฐํด์ผ ํ๋ค.
์ผ๋ฐ์ ์ธ ๊ตฌ์กฐ๊ฐ ์๋๋ค๋ณด๋, ๊ฐ๋ฐ์ ํ๋ ์๊ฐ๋ณด๋ค ํด๋น ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ์ ์ด๋ ํด๋์ ์์นํด์ผ ํ๋์ง๋ฅผ ๊ณ ๋ฏผํ๊ฒ ๋๋ค
๋ฆฌํฉํ ๋ง์ด๋ผ๋ ํ๋ ๋ ์๋ ํด๋ ๊ตฌ์กฐ๊ฐ ๋ ๋ฐ๊ณ , ์ ์ ์๊ฐํ๋ ์ด์์ ์ธ FSD ํจํด๊ณผ ๋ฉ์ด์ง๋ ๋๋์ ๋ฐ์๋ค
๋ฆฌํฉํ ๋ง ์ ์ ์ ์ค๊ณํด์ผ ๋์ค์ ์ ํผ๊ณคํ๋ค๋ ๊ฒ์ ์ฅ์ ์ด ๋ ์๋ ์์ ๊ฒ ๊ฐ๋ค
FSD๋ฅผ ์ฌ์ฉํ๋ฉด์ ๊ถ๊ธํ๊ณ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ ์ ๋ฆฌํ๋ค
react-router์์ ์ค์ฒฉ ๋ผ์ฐํ ์ ํ๋ค๋ณด๋ Layout ์ปดํฌ๋ํธ๊ฐ ์๊ธฐ๊ฒ ๋์๋ค. ์ด๋์ ๋์ด์ผ ํ๋ ๊ฑธ๊น?
์์ํ ๋งํฌ์ ๋ ์ด์์์ด ํ์ํ๋ค๋ฉด shared/ui ์ ๋ณด๊ดํ ์ ์๋ค. ์์ ๊ณ์ธต์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ๋ช ๊ฐ์ง ์ต์ ์ด ์๋ค
- ๋ ์ด์์์ด ํ์ ์์ ์๋ ์๋ค. ๋ ์ด์์์ด ๋ช ์ค ๋ฐ์ ์๋๋ค๋ฉด, ์ถ์ํํ๊ธฐ๋ณด๋ค ๊ฐ ํ์ด์ง์์ ์ฝ๋๋ฅผ ์ค๋ณตํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์๋ค
- ๋ ์ด์์์ด ํ์ํ๋ค๋ฉด, ๋ณ๋์ ์์ ฏ์ด๋ ํ์ด์ง๋ก ๋ง๋ค๊ณ App์ ๋ผ์ฐํฐ ์ค์ ์์ ์กฐํฉํ ์ ์๋ค. ์ค์ฒฉ ๋ผ์ฐํ ๋ ๋ค๋ฅธ ์ต์ ์ด๋ค
entity๋ ์ฑ์ด ๋ค๋ฃจ๋ ์ค์ ๊ฐ๋ ์ด๋ค feature๋ ์ฑ ์ฌ์ฉ์์๊ฒ ์ค์ ๊ฐ์น๋ฅผ ์ ๊ณตํ๋ ์ํธ์์ฉ, ์ฆ ์ฌ๋๋ค์ด entity๋ก ํ๊ณ ์ถ์ด ํ๋ ๊ฒ์ด๋ค
๐ ffmpeg๋ stderr๋ก ๋๋ฒ๊น
์ ํ๋ ์ด์
๐ HLS ํ๋กํ ์ฝ์ ๊ดํ ์ ๋ฆฌ ๋ฐ FFmpeg ์ฌ์ฉ๊ธฐ
๐ ๋นํธ๋ tsconfig.json์ด ์ธ ๊ฐ?
๐ NestJS ๊ธฐ๋ณธ ๊ฐ๋
- Modules
๐ Socket.io ์ต(๊ฐ)์ ํ
๐ ๋์ปค์ nginx์ ์ฌ์ฉ๊ธฐ
๐ ๋ถํํ
์คํธ๋ฅผ ํด๋ณด์
๐ FSD ์ฌ์ฉ๊ธฐ, ๊ทผ๋ฐ ์ด์ ๋๋ง์ ๊ท์น์ ๊ณ๋ค์ธ
๐ CICD ๊ตฌ์กฐ ์์
๐ ์จ๋ฒ ๋จ์๋ก ์คํธ๋ฆฌ๋ฐ ํ๊ธฐ (with HLS)
๐ HLS๋ก ์์
์ฃผ๊ณ ๋ฐ๊ธฐ
๐ vite + react + typescript ํ๊ฒฝ์์ path alias ์ค์
๐ React Scan์ด ๋ญ์ฃ ?
๐ ๋ก์ปฌ ํ๊ฒฝ ๊ฐ๋ฐ ๋ชจ๋ ๋ฐฐํฌ
๐ ์จ๋ฒ ์ ์ฒด๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ค๊ณ ? (with HLS)
๐ ์ฝ๋์ ์์ ์ฑ์ ๋์ด๊ธฐ ์ํด ํ
์คํธ์ฝ๋๋ฅผ ์์ฑํด๋ณด์
๐ ์๋ก๊ณ ์นจ ์ HLS ERROR
๐ input ํ๊ทธ์ ํ๊ธ ์
๋ ฅ ํ, Enter๋ฅผ ๋๋ฅด๋ฉด ํจ์๊ฐ ๋๋ฒ ํธ์ถ๋๋ ์ค๋ฅ
๐ nginx proxy pass๋ฅผ ๋ฐ๊ฟจ๋๋ ์๊ธด ์๋ฌ - ์ค์จ๊ฑฐ ์ธ์ ๋ฌธ์
๐ ๋ฐฐํฌ ํ๊ฒฝ์์ ํด๋ผ์ด์ธํธ-์๋ฒ WS handshake
๐ ๋ ๋๋ง ๋ฒ์ธ์ ํ๋!
๐ ๊ทธ๋ผ์ด๋ ๋ฃฐ
๐ฅ ํ์ ์๊ฐ
๐ ์ฝ๋ & ๊น ์ปจ๋ฒค์
๐ณ ๊น branch ์ ๋ต
๐ ๋
ธ์
๋ฌธ์ ์ ์ฅ์
๐จ ํผ๊ทธ๋ง
๐งโ๐ป ๊ธฐํ ๊ณต์ ๋ฐํ ์๋ฃ
๐ค 2์ฃผ์ฐจ ๋ฐํ ์๋ฃ
๐ ๋ฐฑ๋ก๊ทธ
๐ 1์ฃผ์ฐจ
๐ 2์ฃผ์ฐจ
๐ 3์ฃผ์ฐจ
๐ 4์ฃผ์ฐจ
๐ 5์ฃผ์ฐจ
๐๏ธ 1์ฃผ์ฐจ
๐๏ธ 2์ฃผ์ฐจ
๐๏ธ 3์ฃผ์ฐจ
๐๏ธ 4์ฃผ์ฐจ
๐๏ธ 5์ฃผ์ฐจ
โจ 1์ฃผ์ฐจ
โจ 2์ฃผ์ฐจ
โจ 3์ฃผ์ฐจ
โจ 4์ฃผ์ฐจ