-
Notifications
You must be signed in to change notification settings - Fork 2
๐ฉ FE ๊ธฐ์ ์ ํ์ด์
๋ถ์ผ | ์์ฑ์ | ์์ฑ์ผ |
---|---|---|
FE | ์กฐ๋ฐฐ๊ฒฝ | 24๋ 11์ 06์ผ |
์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋ฆฌ์กํธ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋จ์๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ด๋ฌํ ์ปดํฌ๋ํธ๋ฅผ ์กฐ๋ฆฝํ์ฌ UI๋ฅผ ๊ฐ๋ฐํ ์ ์๋ค. ๋ฐ๋ผ์ ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ์๊ตฌ์ฌํญ์ ๋ํ ์ ์ฐํ ๋์์ด ๊ฐ๋ฅํ๋ค.
- ์ปดํฌ๋ํธ๋ณ๋ก ์ฑ ์๊ณผ ์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ค๋ฉด ์ฝ๋ ๊ด๋ฆฌ์ ์ ์ง๋ณด์๊ฐ ํธ๋ฆฌํ๋ค.
- ์ด๋ฌํ ์ฅ์ ์ ์ด๋ ค์ ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ์ปดํฌ๋ํธ๋ฅผ ์ ์ง๋ณด์๊ฐ ์ฝ๊ฒ ์ค๊ณํด๋ณด๊ณ ์ถ๋ค.
- ์ด๋ฒ ํ๋ก์ ํธ๋ ํ ํ์ด์ง์์ ๋ง์ ๋์์ด ์ด๋ค์ง๋, ๋์๋ณด๋ ํํ๊ฐ ๋ง๋ค.
- SPA๋ ์๋ก์ด ๋ฐ์ดํฐ ์์ฒญ์ด ์์ ๋ ํ์ํ ๋ฐ์ดํฐ๋ง ์ ๋ฌ๋ฐ์ ํ์ด์ง๋ฅผ ๊ฐฑ์ ํ๊ธฐ ๋๋ฌธ์, ์ธํฐ๋ ์ ์ ๋ํ ๋ฐ์์ด ์ข๋ค. ๋ฐ๋ผ์ ๋ฐ๋ผ์ ์ฌ์ฉ์ ๊ฒฝํ ํฅ์์ ์ํด, SPA ๋ฐฉ์์ด ํ์ํ๋ค.
- Next.js์ ์ฅ์ ์ธ SSR ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ๋ณด๋ค๋, ์ฐ์ ์ปดํฌ๋ํธ ์ค๊ณ์ ์ฌ์ฌ์ฉ์ ์ง์คํด๋ณด๊ณ ์ถ์๋ค.
๋ฆฌ์กํธ ๋น๋ ๋๊ตฌ
๊ธฐ์กด์ webpack, rollup๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ ๋๊ตฌ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ณ ๊ฐ๋จํ ์ค์ ๋๋ฌธ์ ์ ํํ๊ฒ ๋์๋ค.
- ๋น๋๊ณผ์ ์ค ํ๋๋ก, ์ฌ๋ฌ ๊ฐ์ javascript ํ์ผ์ ํ๋๋ก ํฉ์น๋ ๊ณผ์ ์ด๋ค.
- ๋ฒ๋ค๋ง์ ํตํด ํ๋ก๊ทธ๋จ ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ , ์คํ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ ์ ์๋ค.
- webpack, rollup๊ณผ ๊ฐ์ ๋๊ตฌ๋ก ์คํํ ์ ์๋ค.
- ์ค์ฝํ ๋ฌธ์
- ์ฌ๋ฌ ๋ชจ๋์ด ์์ ๋, ๊ฐ ๋ชจ๋์์ ์ ์๋ ๋ณ์๋ ํจ์๋ ์๋ก ๋ค๋ฅธ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค.
- ๋ฒ๋ค๋ง์ ํตํด ํ๋์ ํ์ผ๋ก ํฉ์น๋ฉด, ์ด ํ์ผ ๋ด์์ ์ค์ฝํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ฌ์์ง๋ค.
- ์ฑ๋ฅ ์ต์ ํ
- ๋ฒ๋ค๋ง์ ํตํด HTTP ์์ฒญ ์๋ฅผ ์ค์ผ ์ ์๋ค.
- ์ฌ๋ฌ ํ์ผ์ ํ๋๋ก ํฉ์น๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ์ ์์ฒญํ๋ ํ์๊ฐ ์ค์ด๋ค์ด, ํ์ด์ง ๋ก๋ฉ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
- ๊ธฐ์กด์ ๋ฒ๋ค๋ฌ ๋๋น 10-100๋ฐฐ ๋น ๋ฅธ ์๋๋ฅผ ์ ๊ณตํ๋ค.
- Vite์ ์ญํ
- Dev Server: ๊ฐ๋ฐ ํ๊ฒฝ์์ HMR ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ฉ ์๋ฒ ๊ธฐ๋ฅ
- Build: Production ๋ฐฐํฌ๋ฅผ ์ํ ์์ค์ฝ๋ ๋ฒ๋ค๋ง ๊ธฐ๋ฅ
๊ธฐ์กด ๋ฒ๋ค๋ฌ ๊ธฐ๋ฐ ๋๊ตฌ์ ๋ฌธ์ | vite |
---|---|
๋ชจ๋ ๊ฐ์๊ฐ ๋์ด๋ ์๋ก, ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ ์ ์๋ค. | rollup์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋น๋ ์์คํ ์ ์ฌ์ฉํ์ฌ, ํ๋ก๋์ ํ๊ฒฝ์์ ์ต์ ํ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ ๊ณตํ๋ค. |
์์ค ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ๊ฒ ๋๋ฉด ๋ฒ๋ค๋ง ๊ณผ์ ์ ๋ค์ ๊ฑฐ์น๋ค. | ์์ ๋ ๋ชจ๋๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ๋ง ๊ต์ฒดํ๊ณ , ๋ธ๋ผ์ฐ์ ์์ ํด๋น ๋ชจ๋์ ์์ฒญํ๋ฉด ๊ต์ฒด๋ ๋ชจ๋์ ์ ๋ฌํ๋ค. |
์ ํธ๋ฆฌํฐ ํด๋์ค ๊ธฐ๋ฐ์ CSS ํ๋ ์์ํฌ
- tailwind์ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ,
- ํธ๋ฆฌํ๊ณ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์๊ณ , html๊ณผ css์ ๋ถ๋ฆฌ ๋์ด ์์ง ์์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ค.
- ๋ํ ์ผ๊ด๋ ๋์์ธ์ด ๊ฐ๋ฅํ๋ค.
- ๋งค๋ฒ ํด๋์ค๋ช ์ ๊ณ ๋ฏผํ ์๊ฐ์ ์ ์ฝํ ์ ์๋ค.
- ๋ฏธ๋ฆฌ ์ ์๋ ์์ ๋จ์์ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ฅผ ์กฐํฉํ์ฌ ์ฌ์ฉํ๋ ์ ๊ทผ ๋ฐฉ์
์๋ฒ๋ก๋ถํฐ ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- tanstack query๋ฅผ ํตํด ๋ฐ์ดํฐ ํจ์นญ์ ํ๋ฉด, ๋ก๋ฉ ์ํ, ์๋ฌ ์ํ, ๋ฐ์ดํฐ ์ํ๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋ค.
- ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์๋์ผ๋ก UI๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์์ UX ๊ฒฝํ์ด ํฅ์๋ ์ ์๋ค.
- ์ฟผ๋ฆฌํค๋ฅผ ํตํ ์บ์ฑ์ ํตํด ๋์ผํ ๋ฐ์ดํฐ์ ๋ํ ์ค๋ณต ์์ฒญ์ ์ค์ผ ์ ์๋ค.
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ํ๋ฅผ ์ฝ๊ฒ ๋๊ธฐํํ ์ ์๋ค.
๋ธ๋ผ์ฐ์ ์ node.js์์ ์ฌ์ฉํ ์ ์๋ Promise ๊ธฐ๋ฐ HTTP ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
fetch์๋ ์๋ ์์ฒญ ํ์์์, interceptor ๊ธฐ๋ฅ, json ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ด ์ ํํ๋ค.
- fetch๋ es6 ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, axios์ ๋ง์ฐฌ๊ฐ์ง๋ก http ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค.
fetch | axios |
---|---|
์๋ต์ json์ผ๋ก ๋ณํํ๊ธฐ ์ํด .json()์ ํธ์ถํด์ผํ๋ค. | ์๋ต ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก JSON์ผ๋ก ๋ณํํ๋ค. |
interceptor ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ง ์๋ค. | ์์ฒญ์ด๋ ์๋ต์ ๊ฐ๋ก์ฑ์ด ์ฒ๋ฆฌํ๋ interceptor ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. |
ํ์์์ ๊ธฐ๋ฅ์ด ์๋ค. | ์์ฒญ ํ์์์์ ์ค์ ํ ์ ์์ด, ์ง์ ๋ ์๊ฐ ๋ด์ ์๋ต์ด ์์ผ๋ฉด ์๋์ผ๋ก ์์ฒญ์ด ์ทจ์๋๋ค. |
๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์๋ค. | ๋ชจ๋ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์ node.js ํ๊ฒฝ์์ ์ผ๊ด๋๊ฒ ์๋ํ๋ค. |
React์์ URL ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ณ , SPA์์ ๋งค๋๋ฌ์ด ํ์ด์ง ์ ํ์ ๊ด๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- URL ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ์ฌ, ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์๋ค.
- ๋ถ๋ชจ ๋ผ์ฐํธ๊ฐ ์์ ๋ผ์ฐํธ๋ฅผ ํฌํจํ๋ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ด, ๋ณต์กํ UI ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
- ์ฌ์ฉ์์๊ฒ ํ์ํ ์ ๋ณด๋ฅผ URL์ ํฌํจ์์ผ ๊ด๋ฆฌํ ์ ์๋ค.
- tanstack router์ ์ฅ์ ์ผ๋ก ๊ผฝํ๋ ํ์ ์์ ์ฑ, ๋ผ์ฐํ ๋ฐ์ดํฐ ํจ์นญ์ ํตํฉ์ด ์ ์๋ฟ์ง ์์๋ค. ์ด๊ฒ์ ํ์์ฑ์ ๋๋ผ๊ฒ ๋ ๋์ฏค ์ฌ์ฉํด๋ณด๊ณ ์ถ๋ค.
- ๊ทธ ์ธ์ ์ด์ ๋ก๋ react router๋ณด๋ค ์์ ์ปค๋ฎค๋ํฐ, ์ฒ์ ์ ํ๋๋งํผ ๊ฒช๊ฒ๋ ๋ฌ๋์ปค๋ธ๊ฐ ์๋ค.
UI ์ปดํฌ๋ํธ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ํ ์คํธํ ์ ์๊ฒ ํด์ฃผ๋ ์คํ ์์ค ๋๊ตฌ
์ด๋ฒ ๋ฆฌ์กํธ ์ฌ์ฉ์ ๋ชฉํ๋ก ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ํฅ์์ธ๋ฐ, ์คํ ๋ฆฌ๋ถ์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ฒ ์๋ฎฌ๋ ์ด์ ํ๊ณ ํ ์คํธํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋, ๋ฌธ์ํ๋ฅผ ํตํด ๋ชจ๋ ํ์์ ์ปดํฌ๋ํธ์ ๋ํ ์ดํด๋ฅผ ํฅ์์ํค๊ณ ์ ์ํ๊ณ ์ ํ๋ค.
- ๐ฉ FE ๊ธฐ์ ์ ํ์ด์
- โจ ์ฐจํธ์ ๋ฐ์ํ ๊ตฌํ๊ณผ useRef ํ์ ๋ฌธ์
- ๐ฃ ๋ถ๋ชจ ์์์ ์ํ์ ๋ฐ๋ผ ์์ ์์๋ ์คํ์ผ ๋ณํ ๋ถ์ฌํ๊ธฐ
- ๐ zod ๋์ ํ๊ธฐ
- ๐ useInfiniteQuery๋ฅผ ์ฌ์ฉํ ๊ทธ๋ํ ๋ฌดํ์คํฌ๋กค ๊ตฌํ
- ๐ซ ์ฌ์ฉ์์ ์์ ๋ณํ ์๋ ๊ทธ๋ํ ์คํฌ๋กค ๊ตฌํํ๊ธฐ
- ๐งช ์๋ง์ ๊ทธ๋ํ ๋ฐ์ดํฐ ์์ฒญ์ ์ด๋ป๊ฒ ์ค์ผ๊น
- ๐ ๋คํฌ๋ชจ๋์์ ์๋ก๊ณ ์นจ ์ ๋ผ์ดํธ๋ชจ๋๊ฐ ์ ๊น ๋ณด์ด๋ ๋ฌธ์
- ๐ ์น์์ผ์ ์ฑํ ๋ฐ์ดํฐ์ REST API์ ์ฑํ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๊ด๋ฆฌํ๊ธฐ
- ๐ก BE ๊ธฐ์ ์ ํ ์ด์
- โ๏ธ Node WebSocket ํ๊ณ ๋ค๊ธฐ
- โ๏ธ TypeORM Datasource mock ๋ง๋ค๊ธฐ
- โ๏ธ oauth ID range ๋ฌธ์
- ๐ custom pipe์์ Nan์ด ๋ฐ์์ง๋ ๋ฌธ์
- ๐ช nest Websocket์ ์ธ์ ์ด ์๋๋ค๊ณ ?
- ๐ด nginx websocket ์ฐ๊ฒฐ ์ ๋ฌธ์ ๋ฐ์
- ๐ WebPush ๊ตฌํ
- ๐ง ์ฐ์ ์์ ํ๋ก ์์ฒญ ์ ์ดํ๊ธฐ
- ๐ websocket์ด ๋ฆ๊ฒ ํ ๋น๋์ด ๋ฐ์๋๋ ๋ฌธ์
- ๐ฅณ typeorm์ ์ด์ฉํ FCM ์๋ฆผ ์๋น์ค
- ๐ฆ ๋ค์ค ์ ์ ๋์์ฑ ์ ์ด โ ์ฑ๊ธํค, ๋ฎคํ ์ค
- ๐ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ๊ณตํ๊ธฐ์ํ ์ ๋ต
- ๐ ๏ธ ์ธํ๋ผ ๊ธฐ์ ์คํ ์ ํ ์ด์
- ๐ Ncloud ์ค์ ๊ณผ์
- ๐ ORM ๊ธฐ์ ์คํ ๋น๊ต
- ๐ค RabbitMQ๋ก ๋ถ์ฐ ์๋ฒ์๊ฒ ๋ฉ์์ง๋ฅผ ๋ถ๋ฐฐํ๊ธฐ
- ๐ข private DB ์๋ฒ์ ์ ์ํ์ง ๋ชปํ๋ ํ์
- ๐ 1์ฃผ์ฐจ ๋ฐํ
- ๐ 2์ฃผ์ฐจ ๋ฐํ
- ๐ 3์ฃผ์ฐจ ๋ฐํ
- ๐ 4์ฃผ์ฐจ ๋ฐํ
- ๐ 5์ฃผ์ฐจ ๋ฐํ
- ๐ ์ต์ข ๋ฐํ