[statUs] ์ํํ ํ ์ ๋ฌด์ ํ ๋ด ์ปค๋ฎค๋์ผ์ด์ ์ ๋์์ฃผ๋ ์๋น์ค
ํ์ ์ผ์ ์ ํ์ธํ๋ค! ๋๊ฐ ์ด๋ค ์ผ์ ์ด ์๋์ง ํ์ธํ๋ค! ํ์์ด ์ด๋ค ์ํ์ธ์ง ๋ณด์ฌ์ค๋ค!
๐ Status ์๋น์ค ์ด์ฉํ๊ธฐ
๐ Status ๋ ธ์ ๋ฐ๋ก๊ฐ๊ธฐ
- ๊ฐ๋ฐ ๊ธฐ๊ฐ: 2022๋ 11์ 11์ผ ~ 2022๋ 12์ 16์ผ
- ์ด์ ๊ธฐ๊ฐ: 2022๋ 12์ 07์ผ ~ 2022๋ 12์ 15์ผ
๐จ๐ปโ๐ป ํ์ธ์ค: https://github.com/hansejun
๐จ๐ปโ๐ป ์์น์: https://github.com/Returnmakdo
๐จ๐ปโ๐ป ๊น์ ํ: https://github.com/1005jh
๐จ๐ปโ๐ป ์ ํ์ง: https://github.com/hyunjin9603
๐จ๐ปโ๐ป ์ ๋ํฌ: https://github.com/donghee44
๐จ๐ปโ๐ป ๋ฌธ์์ง
-
- ์ด๋ฉ์ผ ์ธ์ฆ์ ํตํ ํ์๊ฐ์
- ์นด์นด์ค ๋ก๊ทธ์ธ์ ํตํ ๊ฐํธํ ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ
- ๋ก๊ทธ์ธ ์ ๊ฐ์ฅ ์ต๊ทผ์ ์ ์ํ ๊ทธ๋ฃน ํ์ด์ง๋ก ์ด๋
-
- ์์ ๊ฒ์ํ๊ณผ ๊ณต์ง๊ฒ์ํ์ผ๋ก ๋๋์ด ๋ณด์ฌ์ค
- ์์ ๊ฒ์ํ์ ๊ฒ์๊ธ์ ๋ฑ๋กํ์ฌ ๊ณต์ง๊ฒ์ํ์ผ๋ก ์ด๋ ๊ฐ๋ฅ
- ์ข์์ ๋ฐ ๋๊ธ ์์ฑ ๊ฐ๋ฅ
- ์์ฑํ ๊ธ์ ์์ฝ๋ ์ ๋ณด๋ก ๋ณด์ฌ์ง๋ฉฐ ํด๋ฆญ์ ํตํด ์์ธ ๊ฒ์๊ธ ๋ชจ๋ฌ์ ํ์ธ ๊ฐ๋ฅ
- ์์ธ ๊ฒ์๊ธ ๋ชจ๋ฌ์์๋ ๊ฒ์๊ธ์ ๋ํ ์ ์ฒด ์ ๋ณด๊ฐ ๋ณด์ฌ์ง๋ฉฐ ์ด๋ฏธ์ง ํด๋ฆญ์ ํตํด ์์ธ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ผ์ด๋๋ก ํ์ธ ๊ฐ๋ฅ

๐ท๐ปโโ๏ธ ํ์ธ์ค
- ๋ ์ด์์: ๋ ์ด์์, ๊ธ๋ก๋ฒ ์คํ์ผ, ์ ๋๋ฉ์ด์ ํจ๊ณผ
- ๊ทธ๋ฃน ๊ตฌํ: ๊ทธ๋ฃน ์์ฑ/์์ /์ญ์ , ๊ทธ๋ฃน ์ด๋
- ๊ทธ๋ฃน ์ ์ : ์ํ ๋ฉ์์ง ๋ฐ ์ํ ์์ด์ฝ, ํ๋กํ ๋ณ๊ฒฝ
- ์์ผ : ์ค์๊ฐ ์ฑํ / ์์ฝ์ ๋ฉ์์ง ์๋ฆผ / ์ค์๊ฐ ์ ์ ์ ์ ํ์
- ํ์ํ util ํจ์ ์ ์ : token ๋์ฝ๋, ์ฟ ํค ์ฌ๋ถ, ์๊ฐ ๊ด๋ จ ํจ์
๐ท๐ปโโ๏ธ ์์น์
- ๋ก๊ทธ์ธ, ํ์๊ฐ์ : ์ ํจ์ฑ ๊ฒ์ฆ, ์ด๋ฉ์ผ์ ํตํ ์ธ์ฆ ํ์ธ, ์์ ๋ก๊ทธ์ธ
- ์บ๋ฆฐ๋ ๊ตฌํ : ์ํ ์์ฑ/์์ /์ญ์ , ์ผ์ ์์ฑ/์์ /์ญ์ , ๋๋๊ทธ์ค๋๋กญ
- ๊ฒ์ํ ๊ตฌํ : ๊ฒ์๊ธ ์์ฑ/์์ /์ญ์ , ๋๊ธ ์์ฑ/์์ /์ญ์ , ์ข์์. ์์ธํ์ด์ง, ์์ธ ์ด๋ฏธ์ง, ์ด๋ฏธ์ง ์ฌ๋ผ์ด๋
- ์์ธ์ฒ๋ฆฌ : ์์ธ์ ๋ํ alert ์์
- ๋ฐฐํฌ : Vercel์ ํตํ ๋ฐฐํฌ
| ์ฌ์ฉ ๊ธฐ์ | ๊ธฐ์ ๊ฒฐ์ ์ด์ |
|---|---|
Socket.io |
webSocket์ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๋ณ๋ก ์ง์ ๋ฒ์ ์ด ๋ค๋ฅด๊ฑฐ๋ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ๋ ์์ด์ ์ผ๊ด๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด์ socket.io๋ฅผ ์ ์ฉํ์์ต๋๋ค. |
React-Query |
์๋ฒ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ๊ณ ๋ฐ์ดํฐ ํจ์นญ ์, ๋ก๋ฉ ๋ฐ ์๋ฌ์ฒ๋ฆฌ๊ฐ ์ฝ๊ฒ ๊ฐ๋ฅํ๊ณ ๋ณ๋์ ์ค์ ์์ด ์ฆ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ฌ๋ฌ๋ฒ์ ์์ฒญ์ด ์์ ์ ์ค๋ณต์ ์ ๊ฑฐํด์ฃผ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฅ์ ์ผ๋ก๋ ๋ฐ์ดํฐ๊ฐ ์ค๋๋์๋ค๊ณ ํ๋จํ๋ฉด ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ต์ ํํ๋ฉฐ, ๋น๋๊ธฐ ๊ณผ์ ์ ์ ์ธ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ณ , ์ถ๊ฐ์ ์ผ๋ก Redux-Thunk๋ฅผ ์ฌ์ฉํ ์ ๋ถํ์ํ BoilerPlate์ฝ๋๊ฐ ๋ฐ๋ณต๋๋ ๊ฒ์ ๋นํด ๋ถํ์ํ ์ฝ๋๊ฐ ๋งค์ฐ์ค๊ธฐ ๋๋ฌธ์ React-Query๋ฅผ ์ ํํ์์ต๋๋ค. |
Recoil |
์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก React์ useState ํ
๊ณผ ๋น์ทํ๊ฒ ๋์ํ์ฌ ์ง๊ด์ ์ด๋ฉด์ ๊ฐ๋จํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋๊ท๋ชจ ์ํ๋ฅผ ๊ด๋ฆฌํด์ผํ๋ ํ๋ก์ ํธ๋ผ๋ฉด redux๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉํ๋ค๋ ์๊ฐ์ด ๋ค์ง๋ง ํ์ฌ ํ๋ก์ ํธ ๊ท๋ชจ์์๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ๋ ์๋๊ณ , Redux์ ๋นํด ์๋์ ์ผ๋ก ์ ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ recoil์ ์ ํํ์์ต๋๋ค. |
Axios |
response timeout (fetch์๋ ์๋ ๊ธฐ๋ฅ) ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ด ์กด์ฌ Promise ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ํธ๋ฆฌํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ํธํ์ด fetch๋ณด๋ค ๋ฐ์ด๋๊ธฐ ๋๋ฌธ์ ์น ์ฑ์ ์ผ๋ํ ๊ณฐ๊ณฐ ์๋น์ค์ ์ ํฉํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. |
Styled components |
CSS๋ฅผ ์ปดํฌ๋ํธ ๋จ์๋ก ์ชผ๊ฐค์ ์์ด ์ฌ์ฉ ๋น๋๊ฐ ๋์ CSS๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ณ , CSS SCSS์ ๋ฌ๋ฆฌ ์ ์ญ์ ์ธ ๊ด๋ฆฌ๋ฅผ ํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ์ ์ง ๋ณด์์ ์ฉ์ดํ๋ค๋ ์ฅ์ ๋๋ฌธ์ ์ ํํ์์ต๋๋ค. |
Vercel |
FrontEnd ํธ์คํ ์ฌ์ดํธ๋ก์ ๋ณต์กํ ์ ์ฐจ์์ด GitHub ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ๋น ๋ฅธ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅ ํ๋ค๋ ์ฅ์ ์ด ์์ด ์ ํํ์์ต๋๋ค. |
์ฑํ state์ ์ด๊ธฐํ
โ ๋ฌธ์
- ํ์ด์ง๋ฅผ ์ด๋ํด๋ ์ฑํ ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ state๊ฐ ์ฌ๋ผ์ง์ง ์์
- React-Query๋ฅผ ํตํด ๊ธฐ์กด์ ์ฃผ๊ณ ๋ฐ์ ์ฑํ ๋ด์ญ(์๋ฒ ๋ฐ์ดํฐ)์ ๋ถ๋ฌ์ state์ ๋ด๋๋ค.
- ์์ผ์ ํตํด ์ค์๊ฐ์ผ๋ก ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๋ state์ ๋ด๋๋ค.
- roomId (params) ์ด๋ ์์ react-query๋ params์ ๋ง๋ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค์ง๋ง state๋ ์ด์ ์ฑํ ๋ฐฉ์์ ๋๋ ๋ฐ์ดํฐ๊ฐ ๊ทธ๋๋ก ๋จ๋๋ค.
- ์ฑํ ๋ฐ์ดํฐ(์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์ฑํ ๋ฐ์ดํฐ) => ์ฑํ state์ ๋ด๋ ๋ฐฉ์
1๏ธโฃ 1์ฐจ ์ ๊ทผ
- ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌ์์ผ ํ์ ์ปดํฌ๋ํธ์ ์ฑํ state๋ฅผ ์์ฑํ๊ณ ์๋ฒ๋ฐ์ดํฐ(useQuery)๋ฅผ props๋ก ๋ด๋ ค์ฃผ๋ฉด params๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์์ฐ์ค๋ฝ๊ฒ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํด state๊ฐ ์ด๊ธฐํ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐ.
- ํ์ง๋ง state๊ฐ ๊ทธ๋๋ก ๋จ์์๋ ํ์์ ๊ทธ๋๋ก.
2๏ธโฃ 2์ฐจ ์ ๊ทผ
- useEffect()๋ฅผ ํตํด ์ธ๋ง์ดํธ ๋์์ ๋ ํด๋ฆฐ์ ํจ์๋ก ์ฑํ ์ ๋ํ state ๊ฐ์ ์ด๊ธฐํํ๋ฉด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐ. ํ์ง๋ง ํ๋ฉด์ ์ฑํ ๋ฐ์ดํฐ๊ฐ ํ๋๋ ๋ณด์ด์ง ์๊ฒ ๋จ.
3๏ธโฃ 3์ฐจ ์ ๊ทผ
- ๋ง์ดํธ ๋์์ ๋ state๊ฐ์ ์ด๊ธฐํ ์ํค๊ณ ์ฑํ ๋ฐ์ดํฐ(์๋ฒ๋ฐ์ดํฐ)๋ฅผ ๊ฐ์ ธ์ค๋๋ฐ ์ฑ๊ณตํ๋ค๋ฉด ๊ทธ๋ state์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค๊ณ ์๊ฐ.
- ํ์ง๋ง ์์ ๊ฐ์ด ์ฑํ ๋ฐ์ดํฐ๊ฐ ๋ณด์ด์ง ์๋๊ฑด ๋ง์ฐฌ๊ฐ์ง.
- ๊ทธ๋ ๋ค๋ฉด ๋น๋๊ธฐ์ ๋ฐ๋ฅธ ์คํ ์์์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ๋จ setTimeout()์ ์ด์ฉํด์ ์๋ฒ๋ฐ์ดํฐ๋ฅผ state์ ๋ด์์ฃผ๋ ์๊ฐ์ ์กฐ๊ธ ๋ฆ์ถฐ๋ด.
- ์ฑ๊ณต์ ์ด์์ผ๋ ์ฝ๊ฐ์ ์๊ฐ์ฐจ์ด ๋๋ฌธ์ ์ฌ์ฉ์์ ์ ์ฅ์์ ๋ถํธํจ์ ๋๋ ์ ์์ด ์คํจ๋ก ๊ฐ์ฃผ.
โ๏ธ ํด๊ฒฐ
- ๋ฌดํ ์คํฌ๋กค์ ์ํด ์์ฑํด๋ pages๋ state ๊ฐ์ useEffect์ ์์กด์ฑ ๋ฐฐ์ด์ ๋ฃ๊ณ ์ธ๋ง์ดํธ ๋์์ ๋ pages๋ฅผ 0์ผ๋ก ์ด๊ธฐํ. ( pages๋ 1์ด ์ถ๊ฐ๋ ๋๋ง๋ค ํด๋น ํ์ด์ง์ ์ฑํ ๊ฐ์ ๋ถ๋ฌ์ค๋ ์ญํ )
- useEffect์์ ์กฐ๊ฑด๋ฌธ์ ํตํด pages๊ฐ 0์ด๋ฉด์ query data๊ฐ ์์ ๊ฒฝ์ฐ์๋ query data๋ฅผ ๋ฃ์ด์ฃผ๊ณ query data๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋น๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๋ ํด๊ฒฐ
- ์ฑํ ๋ฐฉ ๋๊ฐ(pages๋ฅผ ์ด๊ธฐํ) โ ์ฑํ ๋ฐฉ ์ ์ฅ(์๋ฒ ๋ฐ์ดํฐ ๊ฐ์ ธ์ด) โ ์๋ฒ ๋ฐ์ดํฐ์ pages์ ๋ํ ์กฐ๊ฑด๋ฌธ์ ํตํ ์ฑํ state ์ ๋ฐ์ดํธ
๋ก๊ทธ์ธ ์ ์ ์ธ์ ๋ฌธ์
โ ๋ฌธ์
- ์ด์ ๋ก๊ทธ์ธ ๊ณ์ A , ํ์ฌ ๋ก๊ทธ์ธ ๊ณ์ B๊ฐ ์๋ค.
- B๋ก ๋ก๊ทธ์ธํ์์ ๋ ์๋ก๊ณ ์นจ์ ํ๊ธฐ ์ ๊น์ง๋ A์ ๊ณ์ ์ด๋ผ๊ณ ์๋ฒ์์ ์ธ์์ํ๊ณ
- A์ ๊ณ์ ์ ๋ณด๋ฅผ ๋ณด๋ด์ฃผ๋ ๋ฌธ์ ๊ฐ ๋ฐ์
1๏ธโฃ ์ ๊ทผ
- ์ฒ์์๋ ์๋ฒ์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ฌ ๋ก๊ทธ์ธํ์์ ๋ response๋ก ๋ฐ๋ ์ ์ ์ Id์ ํ ํฐ์ ํ์ธํด๋ณด์์ผ๋ ํ์ฌ ๋ก๊ทธ์ธ ๊ณ์ B์ ๋ํ id์ ํ ํฐ์ธ ๊ฒ์ ํ์ธํจ.
- ๊ทธ๋ผ ๋ค์์ผ๋ก ์๊ฐํด๋ณผ๊ฒ์ useQuery์ ์บ์ฑ ๋ฌธ์ ๊ฐ ์๋์ง ํน์ ์๋ฒ์ ์ธ์ฆ ๋ฏธ๋ค์จ์ด์ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํด๋ณด๊ธฐ๋ก ๊ฒฐ์ .
- ์ฐ์ ์๋ฒ์์ ํ ํฐ์ ํตํด ์ด๋ค ์ ์ ๋ก ์ธ์ํ๊ณ ์๋๊ฐ๋ฅผ ํ์ธํ์๋๋ฐ ์ด์ ๋ก๊ทธ์ธ ๊ณ์ A์ ํ ํฐ์ผ๋ก ์ธ์.
- ๊ทธ๋ ๋ค๋ฉด ์๋ฒ์์๋ ๋ฌธ์ ๊ฐ ์๊ณ A์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ useQuery๋ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ๋จ.
- ๋ก๊ทธ์ธํ ๋๋ง๋ค ํ ํฐ์ ๊ณ์ํด์ ์ต์ ํ๊ฐ ๋๊ณ ์์์๋ ์๋ก๊ณ ์นจ ์ด์ ๊น์ง๋ ์ด์ ๊ณ์ ์ ํ ํฐ์ด ์ ์ก๋๊ณ ์๊ธฐ ๋๋ฌธ์ โ์๋ก๊ณ ์นจโ์ด๋ผ๋ ํค์๋์ ์ง์คํด๋ณด๊ธฐ๋ก ํจ.
- ๋ก๊ทธ์ธ์ด ๋์์ ๋ navigate(โ/โ)๋ก ํํ์ด์ง ์ด๋์ ์์ผฐ๋๋ฐ ์ด ์ ํน์ ๋ค์ window.location.reload()์ ๊ฐ์ ์๋ก๊ณ ์นจ ์ฝ๋๋ฅผ ์ถ๊ฐ๋ก ๋ฃ์ด์ค๋ค๋ฉด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์์ง๋ง ์คํจ.
โ๏ธ ํด๊ฒฐ
- naviagate๋ history๊ฐ ๋จ์ง๋ง replace๋ history๊ฐ ๋จ์ง ์๋๋ค๋ ์ ์ ํ์ธํด ๋ก๊ทธ์ธ ์ฑ๊ณต์์ navigate(โ/โ)๊ฐ ์๋ window.location.replace(โ/โ)๋ก ๋ณ๊ฒฝํ์ฌ ํด๊ฒฐ.
ํ์ผ๋ฆฌ์คํธ๋ฅผ ์๋ฒ์ ์ ์ก
โ ๋ฌธ์
- ํ๋์ ์ด๋ฏธ์ง ํ์ผ์ ๋ณด๋์ ๋๋ ์๋ฒ์์ req.file์ ํตํด ๋ฐ์์ค๋๋ฐ ์ฑ๊ณต ํ์ง๋ง ์ฌ๋ฌ๊ฐ์ ์ด๋ฏธ์ง ํ์ผ์ ๋ณด๋์ ๋๋ ์๋ฒ์์ req.files๋ฅผ ํตํด ๋ฐ์์ค์ง ๋ชปํ๋ ์ํฉ ์ง๋ฉด.
- ๊ธฐ์กด ๋ฐฉ์์ formData๋ฅผ ์์ฑํ์ง ์๊ณ ์์ฒญ์ headers๋ฅผ "multipart/form-dataโ ๋ก ์ค์ ํ์ฌ {image:file}์ ์ ์กํ์ง๋ง {image:fileList}๋ก ์ ์กํ ๊ฒฝ์ฐ ใ arr.forEach arr์ ๋ฐฐ์ด์ด ์๋๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์.
1๏ธโฃ 1์ฐจ ์ ๊ทผ
- ์ด๋ฏธ์ง๋ฅผ ๋ด๋ images๋ผ๋ state ๋ฅผ ๋ง๋ค์ด ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค state ์ ์ถ๊ฐ.
- ์๋ฒ์์๋ ๋ฐฐ์ด ํํ๋ก ์ด๋ฏธ์ง๋ค์ ๋ฐ์์ผํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์
{image:images}๋ก ์ ๋ฌ โ ์คํจํจ.
์คํจ์ด์
FileList ํํ๊ฐ ์๋ [file,file,file] ํํ์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ req.files๋ก ์ธ์๋ถ๊ฐ
โ๏ธ ํด๊ฒฐ
- formData ๊ฐ์ฒด๋ฅผ ์์ฑํด state ์ ๋ฐ๋ณต๋ฌธ์ ํตํด append(โimageโ,state[i])๋ก ์ถ๊ฐํ์ฌ ์๋ฒ์ ์ ๋ฌ ์ฑ๊ณต
๋ค๋ฅธ ์ ์ ์ ์ผ์ ์ ๋ฐ์ดํธ
โ ๋ฌธ์
- ๋ณธ์ธ์ ์ผ์ ์ด ์๋ ๋ค๋ฅธ ์ฌ๋์ drag&drop์ ํตํ ์ ๋ฐ์ดํธ๋ฅผ ์๋ํ์ ๋ DB๋ณํ๋ ์์ง๋ง ํ๋ก ํธ๋จ์์๋ ์๋ก๊ณ ์นจ ํ๊ธฐ ์ด์ ์๋ ์คํ๋๋๊ฒ์ฒ๋ผ ๋ณด์ฌ์ง๋ ํ์์ด ๋ฐ์.
- ๊ฐ์ ์ ์ธ optimistic ui
1๏ธโฃ 1์ฐจ ์ ๊ทผ
- ์๋๋ฐฉ์ ์ผ์ ์ drag&drop์ ํตํด ์ ๋ฐ์ดํธํ ๋ ํด๋น ์ผ์ ์ userId๋ฅผ ๊ฐ์ ธ์์ ํ์ฌ ๋ก๊ทธ์ธ๋์ด์๋ userId์ ์ผ์นํ์ง ์๋ค๋ฉด ์ ๋ฐ์ดํธ ํจ์๋ฅผ ์คํํ์ง ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์๋ํ์ผ๋ ์คํจ
- ์บ๋ฆฐ๋๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ตฌํํ๋๋ฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด ์์ฑ์ dragToMove์ dragToResize๋ผ๋ ์ ๋ฐ์ดํธ ๊ด๋ จ ์์ฑ์ด true๊ฐ์ผ๋ก ๊ณ ์ ๋์ด์์ด, ํ๋ฉด์ ์ ๋ฐ์ดํธ๊ฐ ๋ฌด์กฐ๊ฑด ์คํ์ด ๋๊ฒ ๋์ด์์
2๏ธโฃ 2์ฐจ ์ ๊ทผ
- dragToMove์ dragToResize๋ผ๋ ์์ฑ์ ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ userId๊ฐ ๋ง์ง์๋ค๋ฉด ๊ฐ์ ๋ฐ๊ฟ๋ณด๊ธฐ๋ก ์๋ํ์ผ๋ ์คํจ
- ๋ ์์ฑ๋ค์ Component return ๋ถ๋ถ์ ์ํด์์ด์ drag&drop์ด๋ resizingํ ์ผ์ ์ userId๋ฅผ ๊ฐ์ ธ์ฌ ๋ฐฉ๋ฒ์ด ์์
3๏ธโฃ 3์ฐจ ์ ๊ทผ
- ๊ทธ๋ ๋ค๋ฉด ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๊ฐ ํ๋ฉด์์์๋ง ๋ณด์ผ๋ฟ DB์๋ ์ ์ฅ๋์ง ์์ผ๋, drag&drop ๊ณผ resizing ํ๋ ํจ์์ ์ ์ฒด ์ผ์ ์ data์ธ myEvents๋ผ๋ state๋ฅผ useQuery์์ ๊ฐ์ ธ์จ data๋ก setState๋ฅผ ํด์ค์ ํ๋ก ํธ๋จ์ ์ผ์ ๋ ์๋๋๋ก ๋์์ค๊ฒ ๋ ์๋ํ์ผ๋ ์คํจ
- setState๋ฅผ ํด์ค ํ data๋ฅผ ์ฝ์์ ์ฐ์ด๋ดค์ ๋ ์ผ์ ์ ์์ ๋ ์ง์ ๋๋๋ ๋ ์ง ์์ฒด๊ฐ DB์ ์ ์ฉ๋๊ธฐ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด์ ์์ ๋ ๋ฐ์ดํฐ๋ก ๋ค์ด์ค๊ฒ ๋์ ์คํจํจ
โ๏ธ ํด๊ฒฐ
- ์ค๋ฅ ํ ์คํธํ๋ ์ค ๋ฐ๊ฒฌํ๋ ์๋ก๊ณ ์นจ์ ํ์ ๋ ํ๋ก ํธ๋จ์์๋ ์๋๋๋ก ๋ฐ์ดํฐ๊ฐ ๋์์ค๋ ๊ฒ์ ํ์ธ
- drag&drop ๊ณผ resizingํ๋ ํจ์์ ํด๋น ์ผ์ ์ userId์ ํ์ฌ ๋ก๊ทธ์ธํ ์ ์ ์ userId๊ฐ ๊ฐ์ง์๋ค๋ฉด useQuery์์ ๊ฐ์ ธ์จ refetch๋ฅผ ์คํํ๋ ๋ก์ง์ผ๋ก ํด๊ฒฐ ์๋ฃ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ฉด์ ์์ ์ ๋ง์ ๋ฐฉ๋ฒ์ด ์๊ธฐ์ ํ๋ฉด ์์ => ์์ด๋๊ฐ ์ผ์นํ์ง ์๋๋ค๋ฉด ์๋กญ๊ฒ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ => state๋ฅผ ์ต์ ํ





