React SPA ์ ๊ฐ๋ & ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
์ ํต์ ์ธ ์น์ฌ์ดํธ์์๋ ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ ๋ด์ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๋ฉด,
๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๋งค๋ฒ HTML ํ์ผ๋ก ๋ "ํ์ด์ง ์ ์ฒด"๋ฅผ ๋ถ๋ฌ์์ผ๋ง ํ๋ค.
์์ ๊ทธ๋ฆผ์ ๋์ผํ ํ์ด์ง ์ ํ์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
์ ํต์ ์ธ ์น์ฌ์ดํธ๋ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ก๋ฉํ๊ณ (๊น๋นก์ธ๋ค๊ณ ํํ),
SPA๋ Menu์ Footer์ ๊ฐ์ด ํ์ด์ง ์ ํ ์ ํ์ ์ค๋ณต๋๋ ๋ถ๋ถ์ ์๋ก ๋ถ๋ฌ์ค์ง ์๋๋ค.
์น์ฌ์ดํธ๊ฐ ๋ณด๋ค ๋ณต์กํด์ง๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ํํ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ฉด์, ์ฌ์ฉ์์ ์๋น์ค ์ฌ์ด์ ๋์ฑ ๋ง์ ์ํธ์์ฉ์ด ์ผ์ด๋๊ฒ ๋์๋ค.
ํ์ง๋ง ์ด๋๋ง๋ค Header๋ Navigation Bar ๋ฑ๊ณผ ๊ฐ์ด ์ค๋ณต๋๋ ์์๋ค์ ๋งค๋ฒ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ์๋ฒ์์ ๋ถํ์ํ ํธ๋ํฝ์ ๋ฐ์์์ผฐ๋ค.
ํํธ, ์ฌ์ฉ์ ์ ์ฅ์์๋ ๋งค๋ฒ ๋ชจ๋ ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ด์ ๋ฐ๋ผ ๋ ๋๋ฆฐ ๋ฐ์์ฑ์ ๊ฐ๊ฒ ๋์๊ณ , ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ฒ ๋์๋ค.
1990๋ ๋ ํ๋ฐ์ HTML ๋ฌธ์ ์ ์ฒด๊ฐ ์๋, ์ ๋ฐ์ดํธ์ ํ์ํ ๋ฐ์ดํฐ๋ง ์๋ฒ์์ ์ ๋ฌ๋ฐ์ ์ด ๋ฐ์ดํฐ๋ฅผ JavaScript๊ฐ ๋์ ์ผ๋ก HTML ์์๋ฅผ ์์ฑํด์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ด ๊ฐ๋ฐ๋์ด ์ฌ์ฉ๋๊ธฐ ์์ํ์๋ค.
2000๋
๋ ์ค๋ฐ๋ถํฐ ์ด๋ฌํ ๊ฐ๋ฐ ๋ฐฉ์์ ์ด์ฉํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ณดํธํ๋์์ผ๋ฉฐ,
์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ๋ฐฐ์ฐ๊ณ ์๋ ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
, ์ฆ SPA์ด๋ค.
React SPA ๋?
SPA๋ ์๋ฒ๋ก๋ถํฐ ์์ ํ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ์๋๋ผ,
ํ๋ฉด์ ์
๋ฐ์ดํธํ๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ๋ง ์๋ฒ์์ ์ ๋ฌ๋ฐ์ ๋ธ๋ผ์ฐ์ ์์
ํด๋นํ๋ ๋ถ๋ถ๋ง ์
๋ฐ์ดํธํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด๋ ์น ์ฌ์ดํธ๋ฅผ ๋งํ๋ค.
SPA ์ฅ์
์ฐ๋ฆฌ๊ฐ ๋ง์ด ์ฌ์ฉํ๋ SNS๋ฅผ ์๋ก ๋ค์ด๋ณด๊ฒ ๋ค.
์น๊ตฌ๊ฐ ์ฌ๋ฆฐ ์ฌ์ง์ "์ข์์"๋ฅผ ๋๋ฅด๊ณ , ๋๊ธ์ ๋ฌ๊ณ , ๊ถ๊ธํ ๋ ๊ฒ์์ ํ๊ธฐ๋ ํฉ๋๋ค.
์ด๋ ๊ฒ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ์ฌ์ฉ์ ์ฌ์ด์ ์์๋ก ์ํธ์์ฉ์ด ๋ฐ์ํ๋๋ฐ,
์ด๋ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ ๋๋งํ๋ ๊ฒ์ด ์๋๋ผ ํ์ํ ๋ถ๋ถ๋ง ์
๋ฐ์ดํธํ๊ธฐ ๋๋ฌธ์
SPA๋ ์ฌ์ฉ์์ ํ๋์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๋ค.
์๋ฒ ์ ์ฅ์์๋ ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ๋ง ๋๊ฒจ์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊ณผ๊ฑฐ์ ๊ฐ์ ๊ณผ๋ถํ ๋ฌธ์ ๋ ํ์ ํ ์ค์ผ ์ ์๋ค.
๋ํ ํ๋ฉด ์ ์ฒด๋ฅผ ์๋ก ๋ ๋๋งํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ณด๋ค ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ค.
์ด๋ฐ SPA ๋ฐฉ์์ผ๋ก ๋ง๋ค์ด์ง ๋ํ์ ์ธ ์๋น์ค๋ก๋ Youtube ๊ฐ ์๋ค.
์ด ๋ฐ์ facebook, Gmail, airbnb, Netflix ๋ฑ ์ฐ๋ฆฌ๊ฐ ์ผ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ค์ํ ์๋น์ค๋ค์ด SPA ๋ฐฉ์์ผ๋ก ์ ์๋์ด ์๋ค.
๋ฌผ๋ก ์ด๋ฌํ SPA์๋ ๋จ์ ์ ์๋ค.
SPA ๋จ์
๋ธ๋ผ์ฐ์ ๋ ์ฒซ ํ๋ฉด ๋ก๋ฉ ์์ HTML ํ์ผ์ ์ฝ์ด๋ค์ธ ํ
๊ทธ ์์ script ์์์ ์๋ JavaScript ํ์ผ์ ๋ค์ ๋ฐ์์ค๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
์ด๋ ์ฒซ ํ๋ฉด ๋ก๋ฉ ์ ์ฝ์ด๋ค์ธ HTML ํ์ผ์ ๊ฑฐ์ ๋น์ด์๊ณ ,
๋๋ถ๋ถ์ ์ฝ๋๋ JavaScript ํ์ผ ์์ ๋ค์ด์๋ค ๋ณด๋ ์์ฐ์ค๋ฝ๊ฒ JS ํ์ผ์ด ๋ฌด๊ฑฐ์์ง๋ค.
๋๋ฌธ์ ์ด JavaScript ํ์ผ์ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ผ๋ก ์ธํด ์ฒซ ํ๋ฉด์ ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง๊ฒ ๋๋ค.
๋ ๋ฒ์งธ ๋จ์ ์ผ๋ก๋ ๊ฒ์ ์์ง ์ต์ ํ๊ฐ ์ข์ง ์๋ค.
๊ฒ์์์ง ์ต์ ํ๋ ๊ตฌ๊ธ์ด๋ ๋ค์ด๋ฒ ๊ฐ์ ๊ฒ์์์ง์ด ์๋ฃ๋ฅผ ์์งํ๊ธฐ ์ข๋๋ก ์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋ปํ๋ค.
์ฌ๊ธฐ์ ๊ฒ์ ์์ง์ ์๋ ๋ฐฉ์์ ์ ๊น ์์๋ณด๋ฉด, ๊ฒ์ ๋ก๋ด์ด ์น ํ์ด์ง์ ์๋
์ ๋ณด๋ฅผ ์์งํ๊ณ ๋ถ์ํด์ ๊ทธ ๊ฒฐ๊ด๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค์ด ๋ณด๊ดํ๊ณ ์๋ค๊ฐ
์ฌ์ฉ์๊ฐ ๊ฒ์์ด๋ฅผ ์
๋ ฅํ๋ฉด ๋ณด๊ดํ๊ณ ์๋ ์ธ๋ฑ์ค์์ ๊ฒ์์ด์
๊ฐ์ฅ ์ฐ๊ด์ฑ์ด ๋์ ์น ํ์ด์ง๋ค์ ์์๋๋ก ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
๊ฒ์ ๋ก๋ด์ ์๋ฃ๋ฅผ ์์งํ ๋์ ์น ํ์ด์ง์ URL์ ๋ฌผ๋ก ์ด๊ณ HTML ๋ฌธ์ ๋ด์ ๊ฐ์ข ํ๊ทธ๋ ๋งํฌ ๋ฑ์ ๋ถ์ํ๋ค.
SPA๋ HTML์ด ๊ฑฐ์ ๋น์ด์๋ค ๋ณด๋ ๊ฒ์ ๋ก๋ด์ด ์ถฉ๋ถํ ์๋ฃ๋ฅผ ์์งํ์ง ๋ชปํ๊ฒ ๋๋ค.
์ด ๋๋ฌธ์ ๊ฒ์ ๋ ธ์ถ์ด ์ค์ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒ์ ์์ง ์ต์ ํ์ ๋ํ ๋์์ฑ ์ ๋ฐ๋ก ๋ง๋ จํด์ผ ํ๊ณ , ๋๋ถ์ด ์ฑ ์์์ ๋ธ๋ผ์ฐ์ ์ ์์ผ๋ก ๊ฐ๊ธฐ/๋ค๋ก ๊ฐ๊ธฐ ๋ฑ์ ์ํ ๊ด๋ฆฌ๋ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์ ๋ณต์ก๋๊ฐ ๋์ฑ ๋์ด๋๋ค.
๋ค๋ง SPA์์๋ ๊ฒ์ ์์ง ์ต์ ํ์ ๋์ํ ์ ์๋๋ก ๊ฒ์ ์์ง์ด ๋ฐ์ ํ๊ณ ์์ด์, ์ ์ฐจ ์ด ๋จ์ ์ ์ฌ๋ผ์ง๊ณ ์๋ ์ถ์ธ๋ค.
๋จผ์ React์์ ์ปดํฌ๋ํธ๋ฅผ ์ด๋ป๊ฒ ๋๋์ด์ผ ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ปดํฌ๋ํธ ๋๋๋ ๊ฒ์ ๋ํด ์ ๊ณ ๋ฏผ์ด ํ์ํ์ง ์๊ฐํด๋ณด์.
Wireframe์ ๋์์ธ์ ๋ค์ด๊ฐ๊ธฐ ์ ๋จ๊ณ๋ก
์ (wire)๋ฅผ ์ด์ฉํด ์ค๊ณฝ์ (frame)์ ์ก๋ ๊ฒ์ ๋งํ๋ค.
์ด ์์
์ ํตํด ๊ฐ๋ฐ์๋ ๋์์ธ ์ปจ์
๊ณผ ์ฌ์ดํธ ๊ธฐ๋ฅ์ ๋ํ ์ดํด๋ฅผ ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชฉ์
(mockup)์ ๋ฐ์คํฌํฑ, ์ค๋งํธํฐ์ ํ๋ ์์ ๋ง์์ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋์์ธํ ๊ฒ์ ๋งํ๋ค.
์, ์ด์ ์ ํ๋ธ ๊ฐ๋ฐ์์ธ ์ฌ๋ฌ๋ถ์ React๋ฅผ ์ด์ฉํด
์ด๋ป๊ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค์ง ์ค๊ณ๋ฅผ ํ๋ค๊ณ ์์ํด ๋ณด์.
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ํ์ตํ์๊ธฐ ๋๋ฌธ์, ํ์ด์ง๋ฅผ ๋จผ์ ๋ง๋ค๊ธฐ๋ณด๋ค๋
์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ ์ด๋ค์ ์กฐํฉํ ์ง๋ถํฐ ๊ตฌ์ํ ๊ณํ์ด๋ค.
ํ๋ฉด ์ค์์๋ ํฌ๋ฆฌ์์ดํฐ๋ค์ด ์ฌ๋ฆฐ ์์์ ๋ด๊ณ ์๋ ContentsList๋ผ๋
์ปดํฌ๋ํธ๊ฐ ์๊ณ , ๊ทธ ์์๋ ๋์ผํ ํํ๋ฅผ ๊ฐ์ง ์์๋ฌผ๋ค์ด ๋ฐ๋ณต์ ์ธ ํํ๋ก
ํ๋ฉด์ ๊ตฌ์ฑํ๊ณ ์๊ธฐ ๋๋ฌธ์ Content๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ํ ๋ฒ๋ง ๋ง๋ค์ด ์ฌ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
์ปดํฌ๋ํธ๊ฐ UI์ ํ์ ์์๋ ์ ์๋ ๋ง๊ณ , ๊ฐ์ ๊ณ ์ ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค๋ ์ ์๋ ๋ง๋ค. ํ์ง๋ง ์กฐ๊ธ ๋ ๊ณ ์ฐจ์์ React ๊ฐ๋ฐ์๋ผ๋ฉด, ์ ํ๋ฆฌ์ผ์ด์ ์์์ ๋ค๋ค์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ปดํฌ๋ํธ๋ค๋ผ๋ฆฌ ๋ณด๋ค ์ ๊ธฐ์ ์ผ๋ก ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ์ค๊ณํด์ผ ํ๋ค.
SPA๋ ํ๋์ ํ์ด์ง๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ์ฌ์ค ํ ์ข ๋ฅ์ ํ๋ฉด๋ง ์ฌ์ฉํ์ง ์๋๋ค.
์๋ฅผ ๋ค์ด Twittler์ ๊ฐ์ SPA๋ฅผ ๋ง๋ค ๋, ๋ฉ์ธ ํธ์ ๋ชจ์ ํ์ด์ง, ์๋ฆผ ํ์ด์ง, ๋ง์ด ํธ์ ํ์ด์ง ๋ฑ์ ํ๋ฉด์ด ํ์ํ ์ ์๋ค.
๋ํ ์ด ํ๋ฉด์ ๋ฐ๋ผ "์ฃผ์"๋ ๋น์ฐํ ๋ฌ๋ผ์ง๋ค.
์ด๋ ๊ฒ ๋ค๋ฅธ ์ฃผ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ณผ์ ์
"๊ฒฝ๋ก์ ๋ฐ๋ผ ๋ณ๊ฒฝํ๋ค."๋ผ๋ ์๋ฏธ๋ก ๋ผ์ฐํ (Routing)์ด๋ผ๊ณ ํ๋ค.
ํ์ง๋ง React ์์ฒด์๋ ์ด ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ง ์๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ์ง์ ์ฃผ์๋ง๋ค ๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ค.
๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ React Router๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ค๋ช ํ๊ฒ ๋ค.
React Router์ ์ฃผ์ ์ปดํฌ๋ํธ๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
๋ผ์ฐํฐ ์ญํ ์ ํ๋ BrowserRouter, ๊ฒฝ๋ก๋ฅผ ๋งค์นญํด์ฃผ๋ Routes ์ Route,
๊ทธ๋ฆฌ๊ณ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ๋ ์ญํ ์ ํ๋ Link์ด๋ค.
์ด ์ปดํฌ๋ํธ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ React Router ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฐ๋ก ๋ถ๋ฌ์์ผ ํ๋ค.
๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ฌ์ฉํ ์ ์๋ค.
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
import๋ ํ์ํ ๋ชจ๋์ ๋ถ๋ฌ์ค๋ ์ญํ ๋ก ๋น๊ตฌ์กฐํ ํ ๋น(destructuring awssignment)๊ณผ ๋น์ทํ๊ฒ ์ด์ฉํ ์ ์๋ค.
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ํด๋น ์ปดํฌ๋ํธ๋ค์ ์ด์ฉํด์ ๋ผ์ฐํ ์ ํ๋๋ก ํ์.
๋จผ์ create-react-app ํ์, React Router ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์นํด์ค๋ค!
๊ทธ๋ค์ ์ปดํฌ๋ํธ๋ฅผ ๊บผ๋ด์ค๊ธฐ ์ํ import ๊ตฌ๋ฌธ์ ๋ฃ์ด์ฃผ๊ณ ,
๊ฐ ์ปดํฌ๋ํธ์ ๋งํฌ์ ์ฃผ์๋ฅผ ํ ๋นํด์ค๋ค.
function App () {
return (
<BrowserRouter>
<div>
<nav>
<ul>
<li>
Home
</li>
<li>
MyPage
</li>
<li>
Dashboard
</li>
</ul>
</nav>
{/* ์ฃผ์ ๊ฒฝ๋ก์ ์๊น ๋ง๋ 3๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ฐ๊ฒฐํด ์ค๋๋ค. */}
{/* Routes ์ปดํฌ๋ํธ๋ Route ์ปดํฌ๋ํธ๋ค์ ๊ฐ์ธ๊ณ ์์ด์ผ ํฉ๋๋ค. */}
<Routes>
{/* ๊ฒฝ๋ก๋ path๋ก ์ปดํฌ๋ํธ๋ element๋ก ์ฐ๊ฒฐํด ์ค๋๋ค. */}
<Route path="/" element={<Home />} />
<Route path="/mypage" element={<MyPage />} />
<Route path="/dashboard" element={<Dashboard />} />
</Routes>
</div>
</BrowserRouter>
)
}
export default App;
import React from "react";
import "./App.css";
import "./global-style.css";
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
// TODO - react-router-dom์ ์ค์น ํ, import ๊ตฌ๋ฌธ์ ์ด์ฉํ์ฌ BrowserRouter, Routes, Route ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ค์ธ์.
import Sidebar from "./Sidebar";
import Tweets from "./Pages/Tweets";
import MyPage from "./Pages/MyPage";
import About from "./Pages/About";
// TODO - import๋ฌธ์ ์ด์ฉํ์ฌ MyPage, About ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ค์ธ์.
function App() {
return (
<BrowserRouter>
<div>
{/* TODO - BrowserRouter ์ปดํฌ๋ํธ๋ฅผ ์์ฑํฉ๋๋ค. */}
<div className="App">
<main>
<Sidebar />
<section className="features">
<Routes>
<Route path="/" element={<Tweets />} />
<Route path="/about" element={<About />} />
<Route path="/mypage" element={<MyPage />} />
</Routes>
</section>
</main>
</div>
</div>
</BrowserRouter>
);
}
// ! ์๋ ์ฝ๋๋ ์์ ํ์ง ์์ต๋๋ค.
export default App;
import React from "react";
import { dummyTweets } from "../static/dummyData";
import "./MyPage.css";
// ! ์ ์ฝ๋๋ ์์ ํ์ง ์์ต๋๋ค.
// TODO - import๋ฌธ์ ์ด์ฉํ์ฌ Footer ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
import Footer from "../Footer";
const MyPage = () => {
// TODO - filter ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ username์ด kimcoding์ธ ์์๋ง ์๋ ๋ฐฐ์ด์ filteredTweet์ ํ ๋นํฉ๋๋ค.
const filteredTweets = dummyTweets;
let MypostDummy = dummyTweets.filter((post) => {
//kimcoding ์ด ์ด ํธ์๋ค
return post.username === "kimcoding";
});
return (
<section className="myInfo">
<div className="myInfo__container">
<div className="myInfo__wrapper">
<div className="myInfo__profile">
<img src={filteredTweets[0].picture} />
</div>
<div className="myInfo__detail">
<p className="myInfo__detailName">
{filteredTweets[0].username} Profile
</p>
<p>28 ํ๋ก์ 100 ํ๋ก์</p>
</div>
</div>
</div>
<ul className="tweets__mypage">
{/* let isKimcoding = */}
{/* TODO : dummyTweets์ค kimcoding ์ด ์์ฑํ ํธ์ ๋ฉ์ธ์ง๋ง ์์ด์ผ ํฉ๋๋ค. */}
{MypostDummy.map((post) => {
console.log(post);
console.log(post.id);
return (
<li className="tweet" key={post.id}>
<div className="tweet__profile">
<img src={post.picture} />
</div>
<div className="tweet__content">
<div className="tweet__userInfo">
<span className="tweet__username">{post.username}</span>
<span className="tweet__createdAt">{post.createdAt}</span>
</div>
<div className="tweet__message">{post.content}</div>
</div>
</li>
);
})}
</ul>
<Footer />
</section>
);
};
export default MyPage;