- ๐ ๋ฐฐํฌ URL
- ๐ ์๋น์ค ์ด์ฉ์ ์ํ ๊ณ์
- ID: yeondu@market.com
- PW: yeondu
๋ชฉ์ฐจ
๐ฉ ์ฐ๋๋ง์ผ์ ๋ฐฐ๋ฌ์์์ ์ง์น 1์ธ ๊ฐ๊ตฌ๋ฅผ ์ํ ์จ๋ผ์ธ ํ๋ซํผ์ ๋๋ค.
๐ ์์ ๋ง์ ๊ฑด๊ฐํ๊ณ ๋ง์๋ ๋ ์ํผ๋ฅผ ๊ณต์ ํ ์ ์๋ ๋ฐ๋ปํ ๋ฌธํ๋ฅผ ์งํฅํฉ๋๋ค.
๐ฅฆ ์์ ์ ์คํ ์ด์์ ์ง์ ์ฌ๋ฐฐํ ์ฑ์ ํน์ ์ํ์ ํ๋งคํ ์๋ ์์ต๋๋ค.
๐ฌ ๋ชจ๋ ์ฌ์ฉ์๋ ์ผ์์ ๊ณต์ ํ๋ฉฐ ํ๋ก์ฐ ๊ธฐ๋ฅ์ ํตํด ๋ค๋ฅธ ์ ์ ์ ๊ฒ์๊ธ์ ํ์ธํ ์ ์์ต๋๋ค.
๐ฌ ์ฑํ
๊ธฐ๋ฅ์ ํตํด ํ๋งค์์๊ฒ ์ํ ๋ฌธ์๋ฅผ ํ ์ ์์ต๋๋ค.
-
์ธ์ฆ : ๋ก๊ทธ์ธ, ํ์๊ฐ์ , ํ๋กํ ์ค์ , ์ ํจ์ฑ ํ๊ฐ
-
๊ฒ์๊ธ : ๊ฒ์๊ธ ๋ฑ๋ก/์์ /์ญ์ /์ ๊ณ , ๋ค์ค ์ด๋ฏธ์ง ํ์ผ ์ ๋ก๋/์์ /๋ฏธ๋ฆฌ๋ณด๊ธฐ
-
์ํ : ์ํ ๋ฑ๋ก/์์ /์ญ์ , ์ด๋ฏธ์ง ํ์ผ ์ ๋ก๋/์์ /๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ ํจ์ฑ ํ๊ฐ
-
๋๊ธ : ๋๊ธ ๋ฑ๋ก/์ญ์ /์ ๊ณ
-
๊ฒ์ : ์ ์ ๊ฒ์
-
ํ๋ก์ฐ : ์ ์ ํ๋ก์ฐ/์ธํ๋ก์ฐ
-
์ข์์ : ๊ฒ์๋ฌผ ์ข์์ / ์ทจ์
๊ตฌ๋์ | ์ด์์ | ์์์ง | ์์ํ |
---|---|---|---|
๐ GitHub, ๊ณํ ๋ฆฌ๋ | ๐ GitHub, ๊ฐ๋ฐ ๋ฆฌ๋ | ๐ GitHub, ๊ธฐ๋ก ๋ฆฌ๋ | ๐ GitHub, ํ๊ณ ๋ฆฌ๋ |
- FrontEnd: React, React-router, Hooks
- BackEnd: ์ ๊ณต๋ API ์ฌ์ฉ
- Discord: ์ค์๊ฐ ์ฑํ ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ํ ํ๋ฉด ๊ณต์
- GitHub Wiki: ์ฃผ์ ํ์๋ก, ์ปจ๋ฒค์
- Google Docs: ์ผ์ ํ์๋ก
- ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ์งํ ์ํฉ ๊ณต์ : ๐GitHub, ๐GitHub Issues, ๐GitHub Project
- ํ์๋ก: ๐ GitHub Wiki
๋น ๋ฅธ ๊ฐ๋ฐ ์์
์ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด Git Flow๋ฅผ ๋์
ํ์์ผ๋ฉฐ,
ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ํฌ์ง ์์ ์ธ ๊ฐ์ง์ ๋ธ๋์น๋ฅผ ์ฌ์ฉํ๋ ์ ๋ต์ ์ ํํ์ต๋๋ค. (๊ด๋ จ Wiki)
- main: ์ ์ ๋ฐฐํฌ๋ ๋ฒ์ ์ ๋ด๊ณ ์๋ ๋ธ๋์น
- develop: ๋ค์ ๋ฒ์ ์ถ์๋ฅผ ์ํ ์ต์ ์ฝ๋๋ฅผ ๋ด๊ณ ์๋ ๋ธ๋์น
- feature: ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ํ ๋ธ๋์น๋ก ๊ธฐ๋ฅ ๊ตฌํ์ด ์๋ฃ๋๋ฉด ์ญ์ ๋๋ ๋ธ๋์น
๋ฒ์ ๊ด๋ฆฌ์ ํต์ผ์ฑ๊ณผ ํจ์จ์ ์ธ ์ด์ ํธ๋ํน์ ์ํด ์ปจ๋ฒค์ ์ ์ง์ ํ์ฌ commit, PR ์์ ์ฌ์ฉํ์์ต๋๋ค. (๊ด๋ จ Wiki)
Feat
: ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒฝ์ฐ
Fix
: ๋ฒ๊ทธ๋ฅผ ๊ณ ์น ๊ฒฝ์ฐ
Design
: CSS๋ฑ ์ฌ์ฉ์ UI ๋์์ธ ๋ณ๊ฒฝ
Style
: ์ฝ๋ ํฌ๋งท ๋ณ๊ฒฝ, ์ธ๋ฏธ ์ฝ๋ก ๋๋ฝ, ์ฝ๋ ์์ ์ด ์๋ ๊ฒฝ์ฐ
Refactor
: ํ๋ก๋์
์ฝ๋ ๋ฆฌํฉํ ๋ง
Comment
: ํ์ํ ์ฃผ์ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ
Docs
: ๋ฌธ์๋ฅผ ์์ ํ ๊ฒฝ์ฐ
Chore
: ๋น๋ ํ์คํธ ์
๋ฐ์ดํธ, ํจํค์ง ๋งค๋์ ๋ฅผ ์ค์ ํ๋ ๊ฒฝ์ฐ(ํ๋ก๋์
์ฝ๋ ๋ณ๊ฒฝ X)
Rename
: ํ์ผ ํน์ ํด๋๋ช
์ ์์ ํ๊ฑฐ๋ ์ฎ๊ธฐ๋ ์์
๋ง์ธ ๊ฒฝ์ฐ
Remove
: ํ์ผ์ ์ญ์ ํ๋ ์์
๋ง ์ํํ ๊ฒฝ์ฐ
Test
: ํ
์คํธ ์ถ๊ฐ, ํ
์คํธ ๋ฆฌํฉํ ๋ง
!BREAKING CHANGE
: ์ปค๋ค๋ API ๋ณ๊ฒฝ์ ๊ฒฝ์ฐ
!HOTFIX
: ๊ธํ๊ฒ ์น๋ช
์ ์ธ ๋ฒ๊ทธ๋ฅผ ๊ณ ์ณ์ผํ๋ ๊ฒฝ์ฐ
npm install
npm start
0. Splash | 1. ํ์๊ฐ์ |
---|---|
2. ํ๋กํ ์ค์ | 3. ๋ก๊ทธ์ธ |
---|---|
4. ๊ฒ์ | 5. ํ ํผ๋ |
---|---|
6. ๊ฒ์๋ฌผ ๋ฑ๋ก | 7. ๊ฒ์๊ธ ์์ |
---|---|
8. ๊ฒ์๋ฌผ ์ญ์ | 9. ๊ฒ์๊ธ ๋๊ธ ๋ฑ๋ก |
---|---|
10. ๊ฒ์๋ฌผ ๋๊ธ ์ ๊ณ | 11. ๋ด ํ๋กํ |
---|---|
12. ์ฌ์ฉ์ ํ๋กํ ์์ | 13. ํ ์ ์ ํ๋กํ |
---|---|
14. ํ๋ก์ฐ | 15. ๋ก๊ทธ์์ |
---|---|
16. ํ๋งค ์ํ ๋ฑ๋ก | 17. ํ๋งค ์ํ ์์ |
---|---|
18. ์ฑํ ๋ฐฉ | 19. ์ข์์ |
---|---|
- ํ์ผ๋ช
:
<PostAlbum.jsx>
๋ฑ ๋ค์ - ์ ์ ์ด์ : ๊ฒ์๊ธ, ์ํ, ํ๋ก์ ๋ฑ ๋ค์ํ ๊ณณ์์ ๋ฐ์ดํฐ๋ฅผ ์ํํ๋ฉฐ ์์๋ฅผ ํ๋์ฉ ๋ ๋๋ง ํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ ๋น๋๊ฐ ๋๋ค๊ณ ํ๋จํ์ต๋๋ค.
- ์ฝ๋ ์ค๋ช
: ์ด๋ฏธ์ง ๋ฆฌ์คํธ์ ์์ดํ
์ด ํ๋ ์ด์์ด๋ผ๋ฉด, ์์ดํ
์ ํ๋์ฉ ์ํํ๋ฉฐ
PostAlbumItem
์ปดํฌ๋ํธ๋ฅผ ๋ฆฌํดํ๋ฉฐ props๋ก ์ด๋ฏธ์ง ์์ดํ ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๋ ค์ค๋๋ค. ์ด๋, ๊ฐ๊ฐ์ ์์์๋ ๊ณ ์ ํ ํค ๊ฐ์ด ํ์์ ์ผ๋ก ์๊ตฌ๋๋ฉฐ ์ง์ผ์ง์ง ์์ ์์ ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
{imageList && imageList.length > 0
? imageList.map((imageList, id) => {
return (
<div key={id} className="postAlbum">
<PostAlbumItem imageList={imageList}/>
</div>
);
})
: null}
- ํ์ผ๋ช
:
<Search.jsx>
๋ฑ ๋ค์ - ์ ์ ์ด์ : ๋์ ์ผ๋ก ๋ฐ์์จ ๊ฒฐ๊ณผ๋ฅผ ๋ฟ๋ ค์ฃผ๋ ๊ธฐ๋ฅ์ ์ด๋ฒ ํ๋ก์ ํธ ๋ฟ ์๋๋ผ ์ฌ๋ฌ ์๋น์ค์์ ์ฌ์ฉ๋๊ณ ์๋ ๋งํผ ์ค์๋๊ฐ ๋๋ค๊ณ ํ๋จํ์ต๋๋ค.
- ์ฝ๋ ์ค๋ช
: ํค์๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ ์ผ๋ก ๋ฐ์์ค๊ธฐ ์ํด
useEffect
Hook์ ์ฌ์ฉํ์ผ๋ฉฐ ๋น๋๊ธฐ์ ์ผ๋ก GET ์์ฒญ์ ๋ํ ์๋ต์ ๋ฐ์์ค๊ธฐ ์ํดasync/await
๋ฌธ๋ฒ๊ณผaxios
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
useEffect(() => {
if (keyword) {
const handleGetUserInfo = async () => {
try {
const response = await axios.get(
BASE_URL + "/user/searchuser/?keyword=" + keyword,
{
headers: {
Authorization: `Bearer ${token}`,
},
}
);
setSearchUser(response.data);
} catch (err) {
console.error(err);
}
};
handleGetUserInfo();
}
}, [keyword]);
- ํ์ผ๋ช
:
<UploadPost.jsx>
- ์ ์ ์ด์ : ์ฒ์ ํด๋น ๊ธฐ๋ฅ์ ๊ตฌํํ ๋
FileReader
๊ฐ์ฒด์readAsDataURL
๋ฉ์๋๊ฐ ์์ํ์ง๋ง, ๋น๋๊ธฐ์ ์ผ๋ก ํ์ผ์ ๋ด์ฉ์ ์ฝ์ด์ฌ ๋ ์์ฃผ ์ฌ์ฉ๋๋ API์ธ ๋งํผ ์ค์๋๊ฐ ๋๋ค๊ณ ํ๋จํ์ต๋๋ค. - ์ฝ๋ ์ค๋ช
:
FileReader
์ธ์คํฐ์ค์ ๋ก๋ฉ์ด ์๋ฃ๋๋ฉด ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋img
ํ๊ทธ์ ๊ธฐ์กด imgSrc ๋ฐฐ์ด์ ๋ฐ์์ค๋ฉด์ result ๊ฐ์ 3๊ฐ๊น์ง ์ฐ์ด์ด ๋ด์์ฃผ๊ธฐ ์ํดuseState
Hook์ ์ฌ์ฉํ์์ต๋๋ค.
const imgPreview = (file) => {
const reader = new FileReader();
reader.readAsDataURL(file);
return new Promise((resolve) => {
reader.onload = () => {
setImgSrc([...imgSrc, reader.result]);
resolve();
};
});
};
-
๊ฒ์๊ธ ์ ๋ก๋ ํ์ด์ง ์ค๋ณต ๋ ๋๋ง ์ด์ (๋ธ๋ก๊ทธ)
: ์์ธํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด/:postId
๋ฅผ ์ฌ์ฉํด ๋์ ์ผ๋ก ์ธ์๋ฅผ ๋ฐ์์ค๊ณ ์์๋๋ฐ, ๋ฆฌ์กํธ ๋ผ์ฐํฐ ์ ์ฅ์์/upload
๋ํ ์ธ์๋ก ์ธ์ํด ์ค๋ณต ๋ ๋๋ง๋๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.exact
์์ฑ์ ์ด์ ๊ด๋ จ์์ด ์ ํํ ํด๋น๋๋ ์ปดํฌ๋ํธ๋ผ๋ฉด ๋ชจ๋ ๋ ๋๋งํด์ฃผ๋ฏ๋ก ๊ฐ์ฅ ๋จผ์ ์ผ์นํ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง ํด์ฃผ๋Switch
๋ฅผ ์ฌ์ฉํด ํด๊ฒฐํ์ต๋๋ค. -
๊ฒ์๊ธ ์ ๋ก๋ ์ ์ด๋ฏธ์ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ
: ์ด๋ฏธ์ง ์ฃผ์ ์์ฒด๋ก๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํดFileReader
์ธ์คํด์ค ์์ฑ ํ base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด์ ์ป๊ธฐ ์ํดreadAsDataURL
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค. -
๐ก ๋ ์จ๋ฐ: ๊ฐ ์กํ์ง ์์ ์ฆ์ ํ์์ ์ค์์ฑ
: ํ๋ก์ ํธ ์ด๋ฐ ์ฃผ 2ํ ํ์/์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์งํํ๋ค๊ฐ ๋ง๋ฐ์ง 1-2์ฃผ๋ ๋์ค์ฝ๋ ๊ทธ๋ฃน ์ฑํ ๋ฐฉ์์ ํญ์ ์์ฃผํ๋ฉฐ ๊ณ์ ์ํตํ๊ณ ํ๋ฉด ๊ณต์ ํ๋ ๋ฐฉ์์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๋ ์ ๋ฌด ํจ์จ์ด ํจ์ฌ ์ฌ๋ผ๊ฐ์ผ๋ฉฐ ์ ๋ขฐ ๊ด๊ณ๊ฐ ๋์์ก๋ค๊ณ ๋๊ปด์ก์ต๋๋ค.
-
modal์ฐฝ๊ณผ alert์ฐฝ ์ฐ๊ฒฐ
: ๋ชจ๋ฌ์ฐฝ๊ณผ ์๋ฆผ์ฐฝ์ ์ฐ๊ฒฐํ ๋ props๋ก ์ ๋ฌ ๋ฐ์ closeModal์ ์ด์ฉํด ๋ชจ๋ฌ ์ธ๋ถ๋ฅผ ํด๋ฆญํ๋ฉด closeModal์ด ์คํ๋๋๋ก ์ค์ ํ์ต๋๋ค. ๋ชจ๋ฌ ์ธ๋ถ๋ฅผ ํด๋ฆญํ๋ฉด ์๋ฆผ์ฐฝ์ด ๋จ์ง ์๊ณ ๊บผ์ง๋ ํ์์ด ๋ฐ์ํ์ต๋๋ค. ๋ชจ๋ฌ์ฐฝ์ ํด๋ฆญํด๋ ์๋์ ์๋ ๋ชจ๋ฌ์ฐฝ ์ธ๋ถ๊น์ง ์ ๋ฌ๋์ง ์๋๋กe.stopPropagation()
์ ์ฌ์ฉํด ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ๋ง์์ต๋๋ค. -
์ํ ๋ฑ๋ก ์ค price
: ์ํ ๋ฑ๋ก์ price๋ฅผ ์ ๊ทํํ์์ ์ฌ์ฉํ์ฌ 1000์ ๋จ์๋ง๋ค โ,โ๋ฅผ ๋ถ์ฌ์ฃผ์์ต๋๋ค. replace๋ฅผ ์ฌ์ฉํ์ฌ โ,โ๋ฅผ ์ ๊ฑฐํ์ฌ ์ ๋ฌํด์ฃผ์๋๋ฐ ํ๋๋ง ์ ๊ฑฐ ๋๊ณ ,๋ค์ ์ซ์๊ฐ ์ญ์ ๊ฐ ๋๋ ์ํฉ์ด ๋ฐ์ํ์์ต๋๋ค.replaceAll
์ ์ฌ์ฉํด โ.โ๋ฅผ ์ ์ฒด ์ ๊ฑฐํ์ฌ ์ซ์๋ฅผ ๋ณด๋ด์ฃผ์์ต๋๋ค. -
์ ์ ํ๋กํ์์ ํ๋กํ๋ก ๋์ด๊ฐ์ง ์๋ ์ด์
: ์ ์ ํ๋กํ์์ tapmenu์ ์๋ ํ๋กํ๋ฒํผ์ ํด๋ฆญํ๋ฉด myprofile๋ก ๊ฐ์ง ์๋ ํ์์ด ๋ฐ์ํ์์ต๋๋ค. useEffect์์deps
์accountname
์ ๋ฃ์ด์ฃผ์ด accountname์ด ๋ณ๊ฒฝ๋ ๋ ๋ค์ ๋ ๋๋ง ๋ ์ ์๊ฒ ๋ฐ๊พธ์์ต๋๋ค. -
์ด๋ฏธ์ง ์ฃผ์ ์ ๋ฌ
: ์ด๋ฏธ์ง ์ฃผ์๋ฅผ api์ ์ ๋ฌํ๋ ๊ณผ์ ์์ ์ด๋ฏธ์ง ์ด๋ฆ๋ง ์ ๋ฌ์ ํ์์ต๋๋ค. ์ ํฌ ๋ก์ปฌ์์๋ ์ ๋์๊ฐ์ง๋ง 1๊ธฐ๋ถ๋ค ์๋ฒ์์๋ ์ ํฌ๊ฐ ์ฌ๋ฆฐ ์ด๋ฏธ์ง๊ฐ ๋ณด์ด์ง ์๋ ํ์๋ค์ ๋ฐ๊ฒฌํ์์ต๋๋ค. ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ์ ๋ฌํ ๋ ๋ง๋ค๋ฆฐ์ฃผ์ (https://mandarin.api.weniv.co.kr/)๋ฅผ ๋ฃ์ด์ฃผ์ง ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ด์์ต๋๋ค. -
๐ก ๋ ์จ๋ฐ: useLocation ์ฌ์ฉ
: ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ฃผ์ด์ผ ํ๋๋ฐ props๋ก ์ ๋ฌํด์ค์๊ฐ ์๋ ์ํฉ์ด ๋์ด์ useLocation์ ์ ๋ณด๋ฅผ ๋ด์ ์ฌ์ฉํด์ฃผ์ด์ link๋ฅผ ํตํด ์ ๋ฌ์ ํด์ฃผ์์ต๋๋ค.
-
disabled ์์ฑ์ ์ฌ์ฉํ์ง ๋ชปํ ๋
: ๋ฒํผ์ disabled๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํฉ์ด ๋ฐ์ํด ๋นํฉํ๋๋ฐ css์pointer-events
์์ฑ์ ์ฌ์ฉํด ํด๊ฒฐํ์ต๋๋ค. -
state ๋์ด์ฌ๋ฆฌ๊ธฐ
: ํ๋กํ ์ค์ ๊ณผ ์์ ๋ถ๋ถ์ ์ค๋ณต๋๋ ์ฝ๋๋ฅผ ์ปดํฌ๋ํธํ ํ์ต๋๋ค. ๊ทธ๋์ ์์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ชจ์๊ฒ ์ ๋ฌํด์ผ ํ๋๋ฐ ๊ทธ ๊ณผ์ ์์ ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ชจ๋ก ๋์ด์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค. -
๋น ๋ฌธ์์ด๊ณผ null
: ์์ฑ๊ฐ์ผ๋ก ์ผํญ์ฐ์ฐ์๋ฅผ ์ฐ๋ฉฐ ์ฐธ์ด๋ฉด ํจ์ ์คํ, ๊ฑฐ์ง์ด๋ผ๋ฉด ์คํํ์ง ์๊ฒ ๋ค๋ ์๋ฏธ๋ก โโ์ ๋ฃ์ด์ฃผ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์๊พธ ํจ์๊ฐ ์๋๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ ์ ๊ฟ์ ํจ์๋ง ๊ณ ์น๊ณ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฌธ์ ๋ ํจ์๊ฐ ์๋ โโ ์์ต๋๋ค. ๊ฑฐ์ง ๋ถ๋ถ์ null์ ๋ฃ์ผ๋ ๋ฐ๋ก ํด๊ฒฐ์ด ๋์๊ณ , ๋ ๊ฐ ๋ค ๊ฐ์ด ์๋๊ฑธ ์๋ฏธ ํ๋ ๊ฑฐ ์๋๊ฐ? ํ๋ฉด์ ์ฐพ์๋ณด๋null
์ ๊ฐ์ด ์๋ค๋ ๊ฒ์ ์๋์ ์ผ๋ก ๋ช ์ํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด์์ต๋๋ค. ๊ทธ์ ์์ผ โโ๋ ํ์ ์ด ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฌธ์์ด์ ๋ฃ์ ๋ณ์๋ฅผ ๋ฏธ๋ฆฌ ์ด๊ธฐํํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ฌ๋์ต๋๋ค. ๋น ๋ฌธ์์ด๊ณผ null์ ๋ค๋ฆ์ ํ์คํ ์ธ์งํ๊ฒ ๋์์ต๋๋ค.
- ๐ก ๋ ์จ๋ฐ: ํ์์ ์ฝ๋์ ์ง์ค
: ๋ณธ์ธ์ ์ฝ๋๋ง ์ง์คํ๊ฒ ๋๊ณ ์์ฑ์ ํ๊ฒ ๋์์ ๋ ๋ชจ๋ฌ์ฐฝ ์ธ๋ถ๋ฅผ ํด๋ฆญํ๋ฉด ์๋ฆผ์ฐฝ์ด ๋จ์ง ์๊ณ ๊บผ์ง๋ ํ์์ด ์๋ค๋ ๊ฒ์ ์๊ฒ๋ํ ์์ ๋ฐฉ๋ฒ์ ์ํด ์ธํฐ๋ท์ ์ฐพ์๋ณด์์ต๋๋ค. ์ ํฌ ํ๋ฆ์ ๋ง๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ ์ด๋ ค์ ๋ ์ค ํ์์ด ์ ๋ ๊ฐ์ ๊ณ ๋ฏผ์ ํ์ จ๊ณ ํด๊ฒฐ์ ํ์ จ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋ ํ ์ฝ๋์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค๋ฉด ํ์๋ถ๋ค์ ์ฝ๋๋ถํฐ ํ์ธํ๋ ๊ฒ์ด ๋์์ด ๋๋ค์์ต๋๋ค.๊ฐ์ ๋ถ๋ถ์ ๊ณ ๋ฏผํ๋ค๋ ๊ฒ์ ์๊ฒ ๋๊ณ ์๋ก์ ํ์ด ๋๋ค๋ ๊ฒ์ ๋ง์ด ๊นจ๋ฌ์์ต๋๋ค.
๐ฆpublic
โฃ ๐index.html
๐ฆsrc
โฃ ๐assets
โ โฃ ๐icon
โฃ ๐components
โ โฃ ๐button
โ โฃ ๐chat
โ โฃ ๐comment
โ โฃ ๐common
โ โฃ ๐constants
โ โฃ ๐follow
โ โฃ ๐loginjoin
โ โฃ ๐modal
โ โฃ ๐post
โ โฃ ๐product
โ โฃ ๐profile
โ โฃ ๐search
โฃ ๐pages
โ โ ๐style
โฃ ๐App.js
โฃ ๐index.js
โ ๐reset.css