- ์ฌ๋ฌ ์ผํ๋ชฐ์ ํ ๊ณณ์ ๋ชจ์ ์ฌ์ฉ์๋ค์ด ์ข ๋ ์ฝ๊ฒ ๋ค์ํ ์ผํ๋ชฐ์ ์ ๊ทผํ ์ ์๋๋ก ๋ง๋ ์ผํ๋ชฐ ์ฌ์ดํธ์ ๋๋ค.
| Front-End | Back-End | ||||||||
| ์ก๋์ | ๊น์น๊ท | ์กฐ์๋น | ๊นํฌ์ง | ๋ฌธ์ง์ | ํจ๋ค๋น | ๋ฌธ์ข ํ | ๋ฏผ๊ฒฝ์ | ์ ์ฌ์ค | ๊น์ฑํ |
- 2023.08 ~ 2023.09
TypeScriptReactStompJsRecoilAxiosEmotionReact-Query
- ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค๊ณผ์ ํ์ ์ ์ํ ๊ณตํต ์ปดํฌ๋ํธ ๊ฐ๋ฐ๋ก ๊ฐ๋ฐ ๋ฆฌ์์ค ์ ์ฝ ๋ฐ ์ปดํฌ๋ํธ ์ถ์ํ๋ฅผ ์ ์ฉํ์ต๋๋ค.
- ๊ฐ๋ฐ ๋ฆฌ์์ค๋ฅผ ์ค์ด๊ธฐ ์ํด ํ์๋ฅผ ํตํด ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ๋ฅผ ์ ๋ณ ํ ๋งก์ ๊ณตํต ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค.
- ๊ฐ๋ฐ ๋ฆฌ๋ก์ค ์ ์ฝ๊ณผ ์ปดํฌ๋ํธ ์ถ์ํ ๋ฐ ๋จ์ผ ์ฑ ์ ์์น ๊ธฐ๋ฐ์ผ๋ก ํด๋ฆฐ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค.
1. Button ๊ณต๋ ์ปดํฌ๋ํธ (์์ค์ฝ๋)
๊ณต๋ ์ปดํฌ๋ํธ ๊ณผ์
- ํผ๊ทธ๋ง์์ ์ฌ์ฉํ ๋ฒํผ๋ค์ ๋ชจ์์ ๋น์ทํ ๋ชจ์๋ผ๋ฆฌ ์ ๋ฆฌ ํ ์ ๋ฆฌํ ๋ฒํผ๋ค์ ํ ๋๋ก variant, size, color,width๋ฅผ ๊ธฐ์ค์ผ๋ก ์ถ์ํ ๊ณํ์ ์ธ์ ์ต๋๋ค.
- ์ด๋ ๊ฒ ์ฌ์ฉํ ์ปดํฌ๋ํธ์ Button ์ปดํฌ๋ํธ import์ props๋ก ์ํ๋ ๋ฒํผ์ ์ค์ ์ ๋ด๋ ค์ฃผ์ด ์ปดํฌ๋ํธ์ ์๊ตฌ๋๋ ๋ฒํผ์ ์์ฑํ ์ ์์์ต๋๋ค.
2. Catagory ๊ณต๋ ์ปดํฌ๋ํธ (์์ค์ฝ๋)
๊ณต๋ ์ปดํฌ๋ํธ ๊ณผ์
- Catagory ui๋ ๋์ผํ๊ณ ์์ ๋ด์ฉ๊ณผ icon์ด ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ icon, title, onClick(ํด๋ฆญํ์๋ ์ด๋ํ ์ฃผ์), options(category์ ํ์ category list)๋ฅผ ๊ธฐ์ค์ผ๋ก ์ถ์ํ ๊ณํ์ ์ธ์ ์ต๋๋ค.
- ์ด๋ ๊ฒ ์ฌ์ฉํ ์ปดํฌ๋ํธ์ category ์ปดํฌ๋ํธ import์ props๋ก ์ํ๋ ์์, ํ์ ์นดํ ๊ณ ๋ฆฌ์ ์ค์ ์ ๋ด๋ ค์ฃผ์ด ์ปดํฌ๋ํธ์ ์๊ตฌ๋๋ ์นดํ ๊ณ ๋ฆฌ๋ค์ ์์ฑํ ์ ์์์ต๋๋ค.
๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์ ๋ฐ ์๋น์ค ์์ ํ๋ฅผ ์ํด TypeScript๋ฅผ ์ฑํํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ปดํฌ๋ํธ์์ ํ์ํ ๋ฐ์ดํฐ์ ๋ํ ํ์ ์ ๋ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด, ์ปดํฌ๋ํธ ํต์ฌ ๋ฐ์ดํฐ ํ์ ์ ๋ณ๋๋ก ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ์์ต๋๋ค. ๋ํ, omit ๋ฐ pick๊ณผ ๊ฐ์ TypeScript์ ์ ํธ๋ฆฌํฐ ํ์ ์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ฌ, ํ์ ๊ด๋ฆฌ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ํํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ณ , ์ ์ฌ์ ์ธ ๋ฒ๊ทธ๋ฅผ ์ค์ผ ์ ์์์ต๋๋ค.
1. StompJS๋ฅผ ์ด์ฉํ ์ค์๊ฐ ์ฑํ
๊ตฌํ
์์ธํ์ด์ง์์ ์ค์๊ฐ์ผ๋ก ํ๋งค์์ ๊ตฌ๋งค์ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ด ๋ชฉํ์์ต๋๋ค. ๊ทธ๋์ Stompjs ์น ์์ผ ํ๋กํ ์ฝ์ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด WebSocket ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ stompjs์ Client ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ์ฌ ์๋ฒ์์ ์น ์์ผ ์ฐ๊ฒฐ์ ์ค์ ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ subscribe() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์ฃผ์ ์ ๋ํ ๋ฉ์์ง๋ฅผ ๊ตฌ๋
ํ๊ณ publish()ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์ฃผ์ ์ ๋ฉ์์ง๋ฅผ ์ ์กํ์ฌ ์๋๋ฐฉ์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์์ต๋๋ค. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๋ด๋นํ๊ธฐ ๋๋ฌธ์, ์ฑํ
์ฐฝ UI๋ฅผ ๊ตฌํํ๋ ๊ฒ๋ ์ ์ ์ญํ ์ค ํ๋์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๋ฉ์์ง๋ฅผ ์
๋ ฅํ๊ณ ์ ์กํ ์ ์๋ ์
๋ ฅ์ฐฝ์ ๋ง๋ค๊ณ , ์์ ๋ ๋ฉ์์ง๋ฅผ ํ๋ฉด์ ํ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ค์ ์๋ก์๊ฒ ์ค์๊ฐ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์์ต๋๋ค.
2. ์๋น์ค ๋ก์ง๊ณผ UI ๋ก์ง ๋ถ๋ฆฌ
์ปค์คํ
ํ
์ ์ด์ฉํด์ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ค ์ค์ํ ์์น ์ค ํ๋์ธ ๋จ์ผ ์ฑ
์ ์์น์ ์ํด ๋น์ฆ๋์ค ๋
ผ๋ฆฌ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์๋น์ค ๋ก์ง๊ณผ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ํธ์์ฉ๊ณผ ํ๋ฉด ๋ ๋๋ง์ ๊ด๋ จ๋ UI๋ก์ง์ ๋ถ๋ฆฌํด ๊ฐ์์ ์ญํ ์ ์ง์คํ ์ ์๋๋ก ํ์ต๋๋ค.
1. ๋ฆฌ๋ทฐ ์์ฑ๊ณผ ์ญ์ ๊ตฌํ
๋ฆฌ๋ทฐ ์์ฑ ๋ฐ ์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํ์ฌ ์ฌ์ฉ์๋ค์ด ์ค์ ๊ตฌ๋งคํ ์ํ์ ๋ํ ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํ๊ณ ์ญ์ ํ ์ ์๋๋ก ๊ตฌํํ์์ต๋๋ค. ๋ฆฌ๋ทฐ ์์ฑ ๊ธฐ๋ฅ์์๋ ๋ณ์ , ๋ฆฌ๋ทฐ ๋ด์ฉ, ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ์ง๋ฅผ ์
๋ก๋ํ๊ธฐ ์ํด FormData๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ค์ ์์ ์ ๊ฒฝํ๊ณผ ํ๊ฐ๋ฅผ ๋ค์ํ ์์๋ก ํํํ ์ ์๊ฒ ๋์์ต๋๋ค. ๋ํ, ์ ๋ขฐ์ฑ ์๋ ๋ฆฌ๋ทฐ๋ฅผ ์ ์งํ๊ณ , ์ฌ์ฉ์๋ค์ด ๊ตฌ๋งคํ ์ํ์ ๋ํ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํ ์ ์๋๋ก ์ ์ ๊ฐ ์ํ์ ๊ตฌ๋งคํ ๊ฒฝ์ฐ์๋ง ํด๋น ์ํ์ ๋ํ ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํ ์ ์๋๋ก ๊ตฌํํ์์ต๋๋ค.
2. react query ์ ์ฉ
React Query๋ฅผ ํ์ฉํ์ฌ ๋ฆฌ๋ทฐ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค. ๋ฆฌ๋ทฐ ์์ฑ, ์ญ์ , ์กฐํ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ React Query์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ ์บ์ฑ, ์ํ ๊ด๋ฆฌ, ๋น๋๊ธฐ API ํธ์ถ ๋ฑ์ ์ํํ๊ฒ ์ฒ๋ฆฌํ์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์์ต๋๋ค.
React Query์ ์บ์ฑ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ค๋ณต๋ API ์์ฒญ์ ์ต์ํํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์ ์ ์ฅํจ์ผ๋ก์จ ๋ถํ์ํ ๋คํธ์ํฌ ์์ฒญ์ ์ค์์ต๋๋ค. ๋ํ, React Query์ Query์ Mutation ์ปดํฌ๋ํธ๋ฅผ ํตํด ๋ฐ์ดํฐ ์์ฒญ๊ณผ ์
๋ฐ์ดํธ๋ฅผ ๊ฐ๋จํ๊ณ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋์๊ณ , ๊ฐ๋ฐ ๊ณผ์ ์์ ์์ฐ์ฑ์ ํฌ๊ฒ ๋์ผ ์ ์์์ต๋๋ค.
์ฝ๋ ๋ด์์ Axios๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ์ฌ๋ฌ ํจ์๋ฅผ ์์ฑํ์์ต๋๋ค. ์ด๋ก์จ ๊ฐ๋ฐ ์ค์ธ ๊ธฐ๋ฅ์ ํ์ํ ๋ชจ๋ API ์์ฒญ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ฌ์ฌ์ฉํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ์ต๋๋ค. ์ด๋ฌํ ์ค๊ณ๋ฅผ ํตํด ์ฝ๋์ ์ค๋ณต์ ์ต์ํํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ๋ฟ๋ง ์๋๋ผ ์ฝ๋๋ฒ ์ด์ค๊ฐ ๋ณด๋ค ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ํน์ ๋ถ๋ถ์ ์์ ํ ๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ์์ต๋๋ค.
์ด๋ ๊ฒ api ์ฝ๋๋ฅผ ๋ชจ๋ํํด์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํจ์ผ๋ก์จ ์ํํธ์จ์ด์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ํฅ์์ํฌ ์ ์์์ต๋๋ค.
- ์ ์ ๊ฐ ์ผํ๋ชฐ์ ์ ์ํ ๋ ์น / ๋ชจ๋ฐ์ผ ๋น์ค ๋ฐ์ดํฐ ๊ด๋ จ ์์น๋ฅผ ํตํด ๋ชจ๋ฐ์ผ๋ก ์ ์ํ๋ ์ ์ ๊ฐ ์ฝ 2๋ฐฐ์ด์ ๋ง๋ค๋๊ฒ์ ์๊ฒ๋์์ต๋๋ค.
- ๊ทธ๋ก์ธํด clip ํ๋ก์ ํธ๋ ์ ์ ์ ์ฌ์ฉ์ฑ, ์ ๊ทผ์ฑ ํฅ์์ ์ํด ๋ชจ๋ฐ์ผ ํผ์คํธ ui๋ก ์งํํ๊ฒ ๋์์ต๋๋ค.