-
Notifications
You must be signed in to change notification settings - Fork 0
๐ป Context API์ Provider ์ง์ฅ๊ณผ ๊ท์ฌ์ด ๊ณฐ๋์ด ๐ป
WebRTC ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ๊ด๋ฆฌํ ์ํ๊ฐ ๋ง์์ก๋ค. ๋งค์ฐ ๋ง์ด!!
๊ทธ๋์ Props Drilling ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ , ์ ์ญ์ํ์ ๋์
์ด ํ์ํ๋ค.
์ฒ์์๋ Context API๋ก ์ด๋ฅผ ํด๊ฒฐํด๋ณด๋ ค ์๋ํ๋ค.
ํ์ง๋ง ๋์ค์ ์ฌ์ฉ์ฑ์ด ์ข์ง ๋ชปํ๋ค๊ณ ํ๋จํ๊ณ , Zustand๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
์ฒ์์๋ UI์ ๊ด๋ จ๋ ์ํ๋ง ์๊ฐํ๋ค. ๊ทธ๋์ ์ ์ญ ์ํ ๊ด๋ฆฌ์ ๋ํด ์๊ฐ์ ํ์ง ๋ชปํ๋ค.
๊ทธ๋ฐ๋ฐ WebRTC ๊ธฐ๋ฅ์ ๊ตฌํ ํ๋ค๋ณด๋ ์ฒ์์ ์์ํ๋๊ฒ๋ณด๋ค ๊ด๋ฆฌํ ์ํ๊ฐ ๋ง์์ก๋ค...๐จ
๊ทธ๋์ ์ผ๋จ WebRTC ๊ธฐ๋ฅ์ ๋ด๋นํ๋ useWebRTC ํ
์ ์ด ์ํ๋ฅผ ์ ๋ถ ๋ฃ์ด์คฌ๋ค.
์ง๊ธ ์๊ฐํด๋ณด๋ฉด ๊ทธ๊ฑด ๋งค์ฐ ํฌ๋ํฐ ์ค์์๋ค... ์๋ง ๊ฑฐ๊ธฐ๋ถํฐ ๋ชจ๋ ๊ฒ ์๋ชป๋๋๊ฒ ๊ฐ๋ค.
์์ ์ฝ๋๋ง ๋ด๋ ๋ฒ์จ ์ํ๊ฐ ๋ง์๋ฐ ์์ผ๋ก ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด ๋ ๋์ด๋ ์์ ์ด๋ค.
ํํ Context API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฆฌ๋ ๋๋ง ์ด์๊ฐ ์กด์ฌํ๋ค๊ณ ํ๊ณ ์ด๋ฅผ ์ต์ ํ ํด์ผํ๋ค๊ณ ํ๋ค.
๊ทผ๋ฐ ์ด๊ฑธ ์ฌ์ฉํ๋ฉด์ ๋๋ ๋ด์ฉ์ ํ์ตํ๊ณ ์ ๋ฆฌํ๊ธฐ ์ ๊น์ง๋ ์ ํํ ์ด์ ๋ฅผ ๋ชฐ๋๋ค!!!
๊ทธ๋์ ์ด๊ฑธ ์ต์ ํ ํ๋ ค๊ณ ํ๋๋ฐ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ์ฝ๋ ์ค๋ณต์ด ๋ง์์ก๊ธฐ์ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์๋ณด๊ฒ ๋์๋ค.
NameAgeProvider ์๋์ <Name/>
๊ณผ <Age/>
๊ฐ ์๋ ์ํฉ์ ํ๋ฒ ๊ฐ์ ํด๋ณธ๋ค.
๋ง์ฝ <Name/>
์์ ์ํ๋ณ๊ฒฝ์ ์ผ์ผํค๋ฉด <Name/>
์ ๋ฆฌ๋ ๋๋ง ๋๋๊ฒ ๋จธ๋ฆฌ์ ๊ทธ๋ ค์ง๋ค.
๊ทผ๋ฐ <Age/>
๋ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ๋ค.
์๋ํ๋ฉด ๋ฆฌ์กํธ๋ Provider ์์ ์ํ๊ฐ ๋ณ๊ฒฝ ๋์์ ๋ useContext๋ก
๊ทธ ์ํ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋ง ์์ผ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ Context API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋์ Provider๋ฅผ ์ต๋ํ ์๊ฒ ์ชผ๊ฐ์ผํ๋ค.
์ ์ฌ์ง์ ๊ธฐ์กด NameAgeProvder๋ฅผ NameProvider์ AgeProvider๋ก ๋ถ๋ฆฌ์ํจ ๋ชจ์ต์ด๋ค.
๋ง์ฝ ์ด๋ ๊ฒ ํ๋ฉด ๋๊ฐ์ ์ปดํฌ๋ํธ๋ ์๋ก ๋ค๋ฅธ Context๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก ์ํ๊ฐ ๋ฐ๋์ด๋ ๋ฆฌ๋ ๋๋ง์ด ์ผ์ด๋์ง ์๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ Provider๋ฅผ ์๊ฐ ์ชผ๊ฐ๋ฉด Provider ์ง์ฅ์ด ํผ์ณ์ง๋ค.
์ฒ์์๋ ๋ฆฌ๋ ๋๋ง ๋๋ ์ปดํฌ๋ํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ์ง๋ง ์ปดํฌ๋ํธ์ ์๊ฐ ๋์๋ก ๊ธฐํ๊ธ์์ ์ผ๋ก ์ด๋ ค์์ง๊ฒ์ด๋ค.
Context API๋ฅผ ํฌ๊ธฐํ ์ฒซ๋ฒ์งธ ์ด์ ๋ค.
์ถ๊ฐ์ ์ผ๋ก ์ํ๋ฅผ ๋ฐ๊พธ๋ ํจ์๋ค๋ ๊ด๋ฆฌ ํด ์ฃผ์ด์ผ ํ๋ค.
์ด๋ ๊ณง ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋ ์๊ฐ ๋์ด๋๋ค๋ ๋ป๊ณผ ๊ฐ๋ค.
๊ทธ๋ฆฌ ๊ธธ์ง๋ ์์ง๋ง ๋งจ ์๋ถ๋ถ์ Provider ์์ ์๋์ง ํ์ธํ๋ ๊ณผ์ ์ ๋ฐ๋์ ๊ฑฐ์ณ์ผ ํ ๊ฒ์ด๊ณ
Provider ๊ฐ์๋งํผ ์ด๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ํ
์ ๊ฐ์๋ ๋์ด๋ ๊ฒ์ด๋ค.
Context API๋ฅผ ํฌ๊ธฐํ ๋๋ฒ์งธ ์ด์ ๋ค.
Redux, Recoil, Zustand ์ด๋ ๊ฒ ์ธ๊ฐ์ง ์ ๋๋ฅผ ๊ณ ๋ฏผํ๋ค.
Redux๋ ๊ฐ์ฅ ์ ๋ช
ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ ๋งํ ํ์๋ ์๊ณ Recoil์ ํธ๋ฆฌ์ฑ์ด ๋๊ธฐ์ ๊ฐ์ด ๊ณ ๋ฏผํ๋ค.
๊ทธ๋ฆฌ๊ณ Zustand๋ Recoil๊ณผ ๋ค๋ฅด๊ฒ ์์ ์ ์ธ ๋ฒ์ ์ด ์กด์ฌํ๊ณ Recoil๋งํผ ์ฌ์ฉํ๊ธฐ ํธํ๋ค๊ธฐ์ ๊ณ ๋ฏผํ๋ค.
์ธ๊ฐ์ง ํ๋ณด์ค ์น์๋ Zustand๋ค.
์ฐ์ ์ด์ ๋ ๊ณฐ๋์ด๊ฐ ๊ท์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๊ท์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
์ ์ผ ์ปธ๋ ์ด์ ๋ ๊ณฐ๋์ด๊ฐ ๊ท์ฌ์ ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ Recoil์ ๋์
ํ๋ ค ํ๋๋ฐ ๊ณฐ๋์ด๋ฅผ ๋ณด๊ณ ๋ง์์ด ๋ฐ๋์๋ค.
๋ฌ๋์ปค๋ธ๊ฐ ๋งค์ฐ ๋ฎ์๋ค. ์๋ ์ฝ๋๋ ๊ณต์๋ฌธ์์ ์ฝ๋์ธ๋ฐ ์ ๋ง ์งง๊ณ ์ดํดํ๊ธฐ ์ฝ๋ค.
๋น ๋ฅธ ๋์
์ด ํ์ํ๊ธฐ์ ๋ฎ์ ๋ฌ๋์ปค๋ธ๋ ์ ๋ง ์ค์ํ๋ค.
์ด์ ๋๋ฉด ํ๋ก ํธ์๋๋ฅผ ๋ชจ๋ฅด๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋ด๋ ์ฌ์ธ๊ฑฐ๋ผ ์๊ฐํ๋ค.
import { create } from 'zustand'
const useStore = create((set) => ({
count: 1,
inc: () => set((state) => ({ count: state.count + 1 })),
}))
function Counter() {
const { count, inc } = useStore()
return (
<div>
<span>{count}</span>
<button onClick={inc}>one up</button>
</div>
)
}
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด inc ๋ผ๋ ํจ์๋ฅผ create ํจ์ ์์์ ํจ๊ป ์์ฑํ๊ณ ์๋ค.
Redux๋ ์์ ๋น์ทํ์ง๋ง ์กฐ๊ธ ๋ ๋ณต์กํ๊ณ , recoil์ ์ ํ ๊ทธ๋ฌ์ง ์๋๋ค.
๊ทธ๋ฆฌ๊ณ Context API๋ ๋ฐ๋ก ํ
์ผ๋ก ๊ด๋ฆฌ ํด์ค์ผ ํ๋ค.
Recoil์ ๊ฒฝ์ฐ key๋ก atom์ ๊ตฌ๋ถํ๋ค. ๊ทธ๋์ key๊ฐ ์ค๋ณต๋๋ฉด ์๋๊ณ ๊ด๋ฆฌ๋ฅผ ํด ์ค์ผํ๋ค.
๊ทผ๋ฐ Zustand๋ ๊ทธ๋ฐ ๋ถ๋ถ๋ ์๋ค.
์ง์ ๋น๊ต ํด๋ด๋ 1.1kB๋ก ์ ์ผ ๋ฎ์๊ฑธ ํ์ธํ ์ ์๋ค.
๐ฎ ํ๋ก๋ฐํฌํฐ
๐ป ํ๋ก์ ํธ
- ์ผ ๋๋ ๋ฌด์ค๋จ ๋ฐฐํฌ ํ ์ ์์ด ๐ซต
- SWAGํ๊ฒ Swagger ์ฌ์ฉํ๋ ๋ฒ ๐ค (Feat. Swagger ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ํ ํจํค์ง ๋ง๋ค๊ธฐ)
- ์ธํฐ๋ํฐ๋ธ ์น: ์นด๋ ์ ๋๋ฉ์ด์
- ๐ป Context API, Provider ์ง์ฅ ๊ทธ๋ฆฌ๊ณ ๊ท์ฌ์ด ๊ณฐ๋์ด ๐ป
- ๐ ๋ณต์กํจ์ ๋จ์ํ๊ฒ, ๋ ๋์ ๊ฒฝํ์ผ๋ก ๐
- UX๋ฅผ ์ํด AI ์ฑํ ๋ฐ์ ์๋๋ฅผ 84.87%๊น์ง ๊ฐ์ ํ ๋ฐฉ๋ฒ ๐
- ์์ผ ์์ด๊ณ ๐ (Feat. socket.io๋ ํ์ฑ์ ํด)
- ๐ ์ ์ ํ์ผ public vs src/assets
- ๐ ์นด์นด์คํก ๊ณต์
- ๐ ์ธํฐ๋ํฐ๋ธ ์น ๊ตฌํ
- ๐ ๋ฐ์ํ ์น - ๋จ์๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํ๊ธฐ
- ๐ชฒ vite์์ tailwindcss ์ ์ฉ ์ด์
- ๐ชฒ tailwind์ ์ฅ๋จ์
- ๐ NCP ์ธํ๋ผ ๊ตฌ์ถํ๊ธฐ
- ๐ GitHub Actions๋ก CI/CD ์๋ํํ๊ธฐ
- ๐ SSL ์ธ์ฆ์ ๋ฐ๊ธ๋ฐ๊ธฐ
- ๐ ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฌด์ค๋จ ๋ฐฐํฌ ๊ตฌํํ๊ธฐ
- ๐ graceful shutdown์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ ์ ํ ๋ฐฉ์งํ๊ธฐ
- ๐ winston๊ณผ sentry๋ก ์๋ฒ๊ฐ ํฐ์ง๋ ์ด์ ๋ถ์ํ๊ธฐ (+ slack webhook)
- ๐ ์นด์นด์ค ๋ก๊ทธ์ธ ๋์ ํ๊ธฐ
- ๐ health check๋ก ์๋ฒ ์ํ ํ์ธํ๊ธฐ
- ๐ Jest์ Supertest๋ก ์ฝ๋ ๋์ ํ ์คํธํ๊ธฐ
- ๐ ๋์ปค ์บ์ฑ์ผ๋ก ๋น๋์๊ฐ 67% ๊ฐ์ ํ๊ธฐ
- ๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํํ๊ธฐ
- ๐ชฒ 521 Web server is down
- ๐ชฒ ๋์ปค ์ปจํ ์ด๋์์ ํธ์คํธ MySQL์ ์ ๊ทผ ๋ชปํ๋ ์ด์