- ๐ ๊ฐ์
- ๐ ๊ธฐ์ ๋ฐ ๋๊ตฌ
- ๐ ๋ฐฐํฌ ๋งํฌ
- ๐ค ํ์ ์๊ฐ ๋ฐ ๊ธฐ๋ฅ ๊ตฌํ
- ๐ Q&A
ํ๋ก์ ํธ๋ช : Rolling
ํ ๋ฒํธ: 7ํ
์ฐธ์ฌ์: ๊น์ํ(ํ์ฅ), ์์์ฐ, ์ค์์, ์ต์์, ํ์ฑ์ฑ
์ ์ ๊ธฐ๊ฐ: 2024.02.24 ~ 2024.03.12
๋ฐฐํฌ์ผ: 2024.03.11
์ฌ์ฉ ๊ธฐ์ : React, Css Modules
์ฌ์ฉ ์ปจ๋ฒค์ : Code Formatting(eslint, prettier), UI์ Container ์ปดํฌ๋ํธ๋ก ์ญํ ๋ถ๋ฆฌ, Conventional Commits
๋ฌธ์: shwan_2@naver.com
, react-quill, Intersection Observer API, emoji-picker-react, modal-portal
๋ฐฐํฌ ๋งํฌ: https://rolling-4-7team.netlify.app
๋งก์ ํํธ: post/{id} ํ์ด์ง, Header, Card_list, Card ์ปดํฌ๋ํธ
์ฃผ์ ๊ธฐ๋ฅ: ๋ฌดํ ์คํฌ๋กค ๋ฐฉ์์ผ๋ก ์นด๋ ๋ฐฐ์น, ์นด์นด์คํก ๊ณต์ , ์ด๋ชจ์ง ์ถ๊ฐ
์ฃผ์ ๊ธฐ๋ฅ ์ค๋ช :
- ํ์ด์ง์ ์ฒ์ ์ ๊ทผ ์ 5๊ฐ์ ์นด๋๊ฐ ํ๋ฉด์ ๋์ค๊ฒ ํ๊ณ ์คํฌ๋กค์ ๋ด๋ฆด ๋๋ง๋ค ๋ก๋ฉ ์คํผ๋๊ฐ ๋๋ฉด์ ์นด๋๊ฐ 6๊ฐ์ฉ ๋ฐฐ์น๋ฉ๋๋ค. Intersection Observer API๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
- ์นด์นด์คํก docs๋ฅผ ์ฐธ๊ณ ํด api๋ฅผ ์ฌ์ฉํ์ฌ ์นด์นด์คํก ๊ณต์ ํ๊ธฐ ๊ธฐ๋ฅ์ ๋ง๋ค์๊ณ sender์ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง url์ ๋๊ฒจ์ฃผ์ด ์นด์นด์คํก ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ๋ฉด์ ๋์ค๊ฒ ํ์ต๋๋ค.
- emoji-picker-react ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ์ต๋๋ค.
๋ฌธ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ๋ฌดํ ์คํฌ๋กค์ ๊ตฌํ ํ post/{id} ํ์ด์ง์์ edit ํ์ด์ง๋ก ์ด๋ ํ ๋ useNavigate๋ฅผ ์ฌ์ฉํ์๋๋ฐ ์ด๋ ๊ฒ ๊ตฌํ ํ์ ๋ ๊ธฐ์กด์ ์นด๋ list ๋ฐ์ดํฐ๊ฐ ๊ทธ๋๋ก ๋จ์์์ด์ useEffect ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ด๊ธฐํํ๋ setState๋ฅผ ์ถ๊ฐํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ๋ํ ์คํฌ๋กค๋ ๋งจ ์๋ก ๊ฐ๊ฒ ๋์ด ๋ถํ์ํ ์ด๋ฒคํธ ํธ์ถ์ ๋ง์์ต๋๋ค. ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ ์คํฌ๋กค ํ์ ๋ ์ด๋ฏธ์ง๊ฐ ๊ณ์ ์ปค์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํด์ repeat์์ฑ์ ์ฃผ๊ณ width๋ 100vw๋ก ํ์ฌ ๋ฌดํ ์คํฌ๋กค์ ํ๋ฉด ๊ฐ์ ์ด๋ฏธ์ง๊ฐ ํ๋ฉด ํฌ๊ธฐ์ ๋ง๊ฒ ์กฐ์ ๋๋ฉด์ ์๋๋ก ๊ณ์ ๋ฐ๋ณต๋๋ฉฐ ๋์ฌ ์ ์๊ฒ ๋ง๋ค์์ต๋๋ค.
์๋น์ค ์์ฐ:
service_demo_kim.mp4
๋งก์ ํํธ: post ํ์ด์ง, color, font, Option ์ปดํฌ๋ํธ
์ฃผ์ ๊ธฐ๋ฅ: ์ด๋ฏธ์ง ํ์ผ ์ ๋ก๋, ๋กค๋ง ํ์ดํผ ์์ฑ
์ฃผ์ ๊ธฐ๋ฅ ์ค๋ช :
- ์ปฌ๋ฌ์ ์ด๋ฏธ์ง ํญ์ ๋ฐ๋ผ ๋ฐฐ๊ฒฝ์ ์ ํ ํ ์ ์๊ณ ์ด๋ฏธ์ง์ ๊ฒฝ์ฐ ์ด๋ฏธ์ง ํ์ผ์ ์ ๋ก๋ํ์ฌ ์ ํํ ์ ์์ต๋๋ค.
- ์ ํํ ์ด๋ฏธ์ง์ ๋กค๋ง ํ์ดํผ ์ด๋ฆ์ผ๋ก ๋กค๋ง ํ์ดํผ๋ฅผ ์์ฑํ๊ณ ํด๋น ํ์ดํผ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๋ฌธ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์ ํํ ์ด๋ฏธ์ง ํ์ผ์ post ์์ฒญ์ ๋ณด๋ด์ด ํด๋นํ๋ ์ด๋ฏธ์ง url์ ๋ฐ์์ค๋๋ก ๊ตฌํํ๋๋ฐ, ์ด์ฉํ๋ คํ๋ ์ฌ์ดํธ์ api์์ ์๊พธ 429 ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ํ์ฅ๋์ ๋์์ผ๋ก imagebb ์ฌ์ดํธ๋ฅผ ๋ฐ๊ฒฌํ๊ณ , ํด๋น ์ฌ์ดํธ์ api๋ฅผ ์ฌ์ฉํ๋๋ ๋ฌธ์ ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ url์ ๋ฐ์์ฌ ์ ์์์ต๋๋ค.
์๋น์ค ์์ฐ:
service_demo_yang.mp4
๋งก์ ํํธ: post/{id}/edit ํ์ด์ง, Button ์ปดํฌ๋ํธ
์ฃผ์ ๊ธฐ๋ฅ: ๋กค๋งํ์ดํผ ์ญ์ ํ๊ธฐ, ๋ฉ์์ง ์ญ์ ํ๊ธฐ
์ฃผ์ ๊ธฐ๋ฅ ์ค๋ช :
- ์นด๋์ ์๋ ์ฐ๋ ๊ธฐํต ๋ฒํผ ํด๋ฆญ ์ ํด๋น ๋ฉ์์ง ์ญ์ API๋ฅผ ๋ณด๋ด๊ณ messages state๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
- ์ญ์ ํ๊ธฐ ๋ฒํผ ํด๋ฆญ ์ ํด๋น ๋กค๋งํ์ดํผ๋ฅผ ์ญ์ ํ๋ API๋ฅผ ๋ณด๋ด๊ณ list ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๋ฌธ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์นด๋ ํด๋ฆญ ์ ๋ชจ๋ฌ์ด ๋จ๋ ์ด๋ฒคํธ๊ฐ ๋ฑ๋ก๋์ด ์์ด ์ฐ๋ ๊ธฐํต ๋ฒํผ์ ๋๋ ์ ๋๋ ๋ชจ๋ฌ์ฐฝ์ด ๋จ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. e.stopPrpagation()์ ์ฌ์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์๋น์ค ์์ฐ:
service_demo_yun.mp4
๋งก์ ํํธ: post/{id}/message ํ์ด์ง, TextField ์ปดํฌ๋ํธ
์ฃผ์ ๊ธฐ๋ฅ: ์ด๋ฏธ์ง ํ์ผ ์ ๋ก๋, TextArea ๊ตฌํ, ๋กค๋งํ์ดํผ ๋ฉ์์ง ์์ฑ
์ฃผ์ ๊ธฐ๋ฅ ์ค๋ช :
- ์ด๋ฏธ์ง ํ์ผ์ ์ ๋ก๋ ํ ์ ์์ต๋๋ค.
- react-quill ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด TextArea๋ฅผ ๊ตฌํํ์ต๋๋ค.
- ์ ํํ ์ด๋ฏธ์ง ํ์ผ๊ณผ ์์ฑํ ํ ์คํธ area ๋ด์ฉ, ๊ด๊ณ, ํฐํธ, ์ด๋ฆ ๋ฑ์ ํฌํจํ ๋ฐ์ดํฐ๋ฅผ post ์์ฒญํ์ฌ ๋ฉ์์ง๊ฐ ์์ฑ๋ฉ๋๋ค.
๋ฌธ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- TextArea๋ฅผ ์ง์ ๊ตฌํํ๋ ค ํ์ผ๋ ํน์ ๋ถ๋ถ์ ์คํ์ผ๋ง์ ์ ์ฉํ๋ ๊ฒ์ด ์ด๋ ค์์ react-quill ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ฉํ์ต๋๋ค.
- react-quill์ ์ฌ์ฉ์๊ฐ ์์ฑํ ๋ฉ์์ง๋ฅผ HTML ํํ๋ก ๋ฐํํ๋ฉฐ, ์ด๋ฅผ ๋ค๋ฅธ ํ์ด์ง์์ ๋ณด์ฌ์ค ๋ ๋ณด์ ์ด์๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก DOMPurify ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ์ต๋๋ค.
- ๊ธฐ๋ณธ ์ด๋ฏธ์ง์ api ์๋ต์ด ๋ฆ์ด์ ์ด๋ฏธ์ง๊ฐ ์ ๋ณด์ด๋ ํ์์ด ์๊ฒจ ๋ก๋ฉ๋๋ ์๊ฐ์ ๊ฐ ์ด๋ฏธ์ง๊ฐ ๋ก๋๋ ๋๊น์ง ๋ก๋ฉ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ์ค์ ํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์๋น์ค ์์ฐ:
service_demo_choi.mp4
๋งก์ ํํธ: ๋ฉ์ธ ํ์ด์ง, list ํ์ด์ง, Modal, Toast, Badge ์ปดํฌ๋ํธ
์ฃผ์ ๊ธฐ๋ฅ: ๋ฒํผ ํด๋ฆญ์ผ๋ก ์คํฌ๋กค ๊ตฌํ
์ฃผ์ ๊ธฐ๋ฅ ์ค๋ช :
- ๋ฒํผ์ ํด๋ฆญํ๊ฑฐ๋ ํฐ์นํ์ฌ ์คํฌ๋กค์ด ๋ฉ๋๋ค.
๋ฌธ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ๋ฒํผ์ ๋๋ฅผ ๋๋ง๋ค ์คํฌ๋กค ์์น๋ฅผ ํ์ ํ์ฌ useState๋ฅผ ํตํด ์์์์น ๋๋ฌ๊ฐ๊ณผ ๋ง์ง๋ง์์น ๋๋ฌ๊ฐ์ ๋ค๋ฃจ์ด ๊ตฌํํ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฒํผ ํด๋ฆญ์ ์คํฌ๋กค์ด ๋ถ๋๋ฝ์ง ์์๊ณ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด scrollBy ๋ฉ์๋์ smooth ์ต์ ์ ํ์ฉํ์ต๋๋ค. ์ด ์ต์ ์ ํ์ฉํ ๊ฒฐ๊ณผ ์ค์ ๋ก ์คํฌ๋กค์ด ์๋ฃ๋๊ธฐ๊น์ง ์ฝ๊ฐ์ delay๊ฐ ์๊ฒผ๊ณ ๊ทธ๋ก ์ธํด ์คํฌ๋กค ์์น๋ฅผ ์ ๋๋ก ํ์ ํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ์ํ๋ delay๋งํผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์คํฌ๋กค ์์น๋ฅผ ํ์ ํ๋๋ก setTimeoutํจ์๋ฅผ ํ์ฉํ์ฌ ํด๊ฒฐํ์์ต๋๋ค.
์๋น์ค ์์ฐ:
service_demo_hong.mp4
Q&A: https://few-seed-7cb.notion.site/Q-A-16d6a36f426c4d44ba27806c10fb107e