์ด๋ฒ ํ๋ก์ ํธ๋ ํ๋ก ํธ์๋ 4๋ช ์ผ๋ก ๊ตฌ์ฑ๋์ด ๊ธฐํ, ๋์์ธ, ๊ฐ๋ฐ๊น์ง ์งํํ๋ค. API๋ ๊ฐ์ฌ๋๊ป์ ๋ง๋ค์ด์ฃผ์ ๊ฒ์ ์ฌ์ฉํด์ผ ํ๋ค. ๊ฐ์ธ์ ์ผ๋ก๋ ํ๋ก์ ํธ ์์๊ณผ ํจ๊ป ํ์ฌ๋ฅผ ๋ค๋๊ฒ ๋์๋ค. ๊ทธ๋์ ๋ค๋ฅธ ํ์๋ค๋ณด๋ค ์๊ฐ์ด ํ์ ์ ์ด์๊ณ , ์ด๊ฒ ๋ฏผํ๊ฐ ๋์ง ์์๊น ๊ฑฑ์ ์ด ๋ง์๋ค. ใ ใ ์ฌ์ ์ ํ์๋ค์๊ฒ ์ํด๋ฅผ ๊ตฌํ๊ณ ์์ํ๋ ํ๋ก์ ํธ์๊ธฐ์ ์ฑ ์๊ฐ์ด ๋ ์ปธ๋ค. ์ ์ ์๊ฐ์ด์ง๋ง ๊ทธ ์๊ฐ ์์์ ์ต์ ์ ๋คํด์ผ๊ฒ ๋ค๊ณ ๋ค์งํ๋ฉฐ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ค.
ํ์์ ํ๋ ํ ์คํฌ๋ผ ์๊ฐ์ ๋ฏธ๋ฆฌ ๊ธฐํ์ ๋ํ ์๊ธฐ๋ฅผ ๋๋ ์ ์ด ์๋ค. ์ด ๋, ๊ณตํต์ผ๋ก ๋์จ ํค์๋๊ฐ ์คํฐ๋
์๋ค. ์ฐ๋ฆฌํ์ ์ด ํค์๋๋ฅผ ์ค์ฌ์ผ๋ก ๋ธ๋ ์ธ์คํ ๋ฐ์ ํ๊ฒ ๋์๋ค.
ํผ๊ทธ์ผ์ ์ฌ์ฉํ์ฌ ์ฃผ์ ์ ๋ํ ๊ฐ์์ ์๊ฒฌ์ ๋จ๊ธฐ๊ณ ์ด๋ฅผ ๋ฐํ์ผ๋ก ํ์๋ฅผ ์งํํ๋ค. ์ด๋ฒ์ ์ฒ์์ผ๋ก ํผ๊ทธ์ผ์ ์ฌ์ฉํด๋ณด์๋๋ฐ, ์ค์๊ฐ์ผ๋ก ์๊ฒฌ์ ๋๋๋๋ฐ ์์ด ํจ์จ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ฐ๋ฆฌ์๊ฒ ์ฃผ์ด์ง API๋ ์์ ๋คํธ์ํฌ ์๋น์ค๋ฅผ ๊ตฌํ๊ณผ ๊ด๋ จ๋์ด ์์ด, ์ฃผ์ ์ ์ ์ ์ฝ๊ฐ์ ์ ์ฝ์ด ์์๋ค. ์ด๋ฌํ ์ํฉ์ ์ต๋ํ ๊ณ ๋ คํด์ ์ฃผ์ ๋ฅผ ์ ์ ํ๊ฒ ๋์๋ค.
๋ฐ๋ธ์ฝ์ค์์์ ํฐ ์ฃผ์ ๊ฐ React ํน์ Vue.js๋ฅผ ์ด์ฉํ์ฌ ์์
๋คํธ์ํฌ ์๋น์ค
์๊ณ , ์ฐ๋ฆฌ๋ ์๋์ ๊ฐ์ ์ฃผ์ ๋ฅผ ์ ์ ํ๊ฒ ๋์๋ค.
์ปค๋ฎค๋์ผ์ด์ ์ ํตํ ํ์ต์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ ์ฉ SNS, DigDigDeep (๋๊ทธ๋๊ทธ๋ฅ) ์ปค๋ฎค๋์ผ์ด์ ์ ํตํ ํ์ต์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ ์ฉ SNS, DigDigDeep (๋๊ทธ๋๊ทธ๋ฅ)
์ฐ๋ฆฌ๋ ์๋์ ๊ฐ์ ์๋น์ค ์ปจ์ ์ ์ ์ฉ์์ผ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ธฐ๋ก ํ๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์ ๋ด๊ฐ ํ ์ญํ ์ค ๊ฐ์ฅ ๋น์ค์ด ํฐ ํํธ์ด๋ค. ๋ฐ์ด๋์ง ์์ง๋ง ๊ทธ๋์์ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ๋์์ธ์ ์ ํ ์ ์์ง ์์๊น? ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ๊ทธ๋์ ๋ด๊ฐ ๋์์ธ์ ๋งก๊ฒ ๋ค๊ณ ์ ์ธ(?)ํ๊ณ ํผ๊ทธ๋ง๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ๋ก๊ณ ์ ํ๋กํ ํ์ ์ ๊ตฌํํ๋ค.
๋ ์ ํ๋ฉด ํ ์๋ก ๊น์ด์ง๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉ์๋ค์ด ์๋น์ค ๋ด์์ ์ง์์ ๋๋๋ฉด ๋๋์๋ก ๊น์ด ์๋ ํ์ต์ด ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ๋ฅผ ๋ด์๋ค. ์ฌ๋ณผ์ ํ์ตํ๋ ๋๋์ง์ด๋ฉฐ, ๋ฉ์ธ ์ปฌ๋ฌ๋ ๋ธ๋ผ์ด ๊ณ์ด์ ์ฌ์ฉํ๋ค.
ํ์๋ฅผ ํ๋ฉฐ ๋ง๋ ์์ด์ดํ๋ ์์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ฐ์ผ ๋์์ธ์ ๋จผ์ ์์ํ๋ค. ๋์์ธ์ ํ ๋ ๋ชจ๋ฐ์ผ์ ๋จผ์ ํ๊ณ ์น์ ํ๋ ๊ฒ์ด ๋ ํธํ๋ค๊ณ ํ๋ค. ๋ชจ๋ฐ์ผ์ด ๋ ํ๋ฉด์ด ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์์ ์ก๋ ๊ฒ์ด ๊น๋ค๋กญ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๊ทธ๋์ ์ผ๋จ ๋ชจ๋ฐ์ผ ๊ธฐ์ค์ผ๋ก ๋์์ธ์ ์์ฑํ๋ค. ํด๊ทผํ๊ณ 3์ผ์ ๋์์ธ๋ง ํ ๊ฒ ๊ฐ๋ค โฆ ๐ณย ย (์ด ๋ ๋๋ฌด ๊ฐ๋ฐํ๊ณ ์ถ์๋ค. ใ
ใ
) ์ดํ ์น ๋ฒ์ ์ ๋ก๊ทธ์ธ/ํ์๊ฐ์
๋ถ๋ถ์ ์ ์ธํ๊ณ ๋ ๋ชจ๋ฐ์ผ ๋ฒ์ ์ ๊ฑฐ์ ์ ์งํ๋ ๋ ์ด์์์ผ๋ก ์งํํ๋ค. ๋์์ธ์ ๋ง์ ์ด์ ์ ์๊ธฐ์๋ ์๊ฐ์ด ๋๋ฌด ๋ถ์กฑํ๋ค โฆ.
์ฐ๋ฆฌ๋ ์ฃผ์ ๊ธฐ๋ฅ๋ค์ ๋ฆฌ์คํธ๋ก ์ ๋ฆฌํ๊ณ , ๊ฐ์ ๊ตฌํํ๊ณ ์ถ์ ๊ธฐ๋ฅ์ ์ ํํ๋ค. ๋๋ ๋์์ธ ์์ ์ ๋๋ด๊ณ ๋์ ๋ถํฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์์ํ๋ค. ๋ด๊ฐ ๋งก์ ์ฃผ์ ๊ธฐ๋ฅ์ ์๋ฆผ ๊ธฐ๋ฅ๊ณผ ํฌ์คํธ ์๋ํฐ ๊ธฐ๋ฅ์ด์๋ค.
ํ์ ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ๋ฆฌ์กํธ์ styled-components๋ฅผ ์ฌ์ฉํ์๋ค. ๋๋ ํ๋ก์ ํธ์์ ๋ฆฌ์กํธ๋ styled-components๋ ์ฌ์ฉํด ๋ณธ ๊ฒฝํ์ด ์๋ ๋ฐ๋ฉด, ํ์ ์คํฌ๋ฆฝํธ๋ ์์๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๊น๊ฒ ๊ณต๋ถํด๋ณด์ง ์์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ ค์์ด ์์๋ค.. ๋ฉํ ๋์ ์ปคํผ์ฑ์์ ํ์ ์คํฌ๋ฆฝํธ ๋์ ์ ๋ํ ๊ณ ๋ฏผ์ ๋๋ด๋๋ฐ, ๋ฉํ ๋๊ป์ ์ฒ์ ๋์ ํด๋ณด๋ ๊ฒ์ด๋๊น ํ์ ์ ์ง์ ํด๋ณด๋ ๊ฒ ๋ง์ผ๋ก๋ ์๋ฏธ๊ฐ ์๋ค๊ณ ํด์ฃผ์ จ๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ผ๋จ ํ์ ์ ์ง์ ํด๋ณด๋ ์์ค์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋ค.
์๋ฆผ ๊ธฐ๋ฅ
์๋ฆผ ์ข
๋ฅ๊ฐ ์ด 3๊ฐ์ง (์ข์์, ๋๊ธ, ํ๋ก์ฐ)์ด์๋ค. GET
ํด์จ ์๋ฆผ๋ค์ ์ข
๋ฅ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ฃผ์๋ค.
์ฌ์ฉ์
๋์ด ๋ด ๊ทธ๋ผ์ด๋๋ฅผ ์ข์ํฉ๋๋ค.์ฌ์ฉ์
๋์ด ๋ด ๊ทธ๋ผ์ด๋๋ฅผ ๋๊น
ํ์ต๋๋ค.์ฌ์ฉ์
๋์ด ๋๋ฅผ ํ๋ก์ฐํ์ต๋๋ค.์ฌ๊ธฐ๊น์ง๋ ๋ฌธ์ ๊ฐ ์์๋๋ฐ, ๋ด๊ฐ ์ฒ๋ฆฌํ์ง ์์ ๋ถ๋ถ๋ค์ด ์์๋ค. ์์ผ๋ก๋ ์ด๋ฐ ์์ธ ์ฒ๋ฆฌ์ ๋ํด ๋ ๊ผผ๊ผผํ ์ฒ๋ฆฌ ํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
filter
๋ก ํ์ฌ ๋ก๊ทธ์ธ ๋์ด ์๋ ์ ์ ์ ์๋ฆผ์ ๋ณด๋ธ ์ ์ ๊ฐ ๊ฐ์ง ์์ ๋๋ง ๋ณด์ฌ์ฃผ๋๋ก ์ฒ๋ฆฌํ๋ค.notifications.length
๊ฐ 0์ธ ๊ฒฝ์ฐ๋ก ๋ฐ์ ์ฒ๋ฆฌํด์ฃผ์๋ค.return (
<List>
{notifications.length === 0 ? (
<Text>์๋ฌด ์๋ฆผ๋ ์ค์ง ์์์ด์ ... ๐ฆ</Text>
) : (
notifications
.filter(notification => notification.author._id !== user._id)
.map(notification => (
<Notification key={notification._id} {...notification} />
))
)}
</List>
);
์๋ฆผ ์ฝ์ ๊ธฐ๋ฅ ์ฒ๋ฆฌ๊ฐ ์ ์ผ ์ด๋ ค์ ๋ ๊ฒ ๊ฐ๋ค. ํ์๋ค์๊ฒ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ๋์ ๋ฐ์ ์๋์ ๊ฐ์ด ํด๊ฒฐํ ์ ์์๋ค.
boolean
๊ฐ์ธ isSeen
์ผ๋ก ์๋ฆผ์ ์ฝ์ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์๋๋ฐ, API๊ฐ ์๋ฆผ์ ์ฝ์๋ค๋ฉด ๋ชจ๋ ์๋ฆผ์ isSeen
๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๋ ์ญํ ์ ํ๋ค. ๊ทธ๋์ useEffect
๋ก ์ฒ์์ ํ๋ฉด์ด ๋ก๋ฉ๋๊ณ isSeen
์ด ํ๋๋ผ๋ false
๋ฉด ์๋ฆผ์ด ์๋ค๋ ๊ฒ์ ์์ด์ฝ์ผ๋ก ํ์ํด์ฃผ์๋ค.
์ ํฌ์คํธ ์์ฑ ๊ธฐ๋ฅ
ํฌ์คํธ ๋ฐ์ดํฐ๊ฐ ์ ๋ชฉ๊ณผ ๋ฐ๋๊ฐ ๊ตฌ๋ถ๋์ง ์์์ ๊ฐ์ฒด ํํ๋ก ๊ตฌ๋ถํด์ ๋๊ฒจ์ฃผ์๋ค.
title: { // API ๋ฐ์ดํฐ
title: '์ ๋ชฉ',
body: '๋ฐ๋',
}
input
์ ์
๋ ฅํ๋ ๊ฐ์ ์๋ฒ์ ๋๊ฒจ์ฃผ์ด์ผํ๋๋ฐ, ํค๋ ์ปดํฌ๋ํธ์ ์๋ํฐ ์ปดํฌ๋ํธ๊ฐ ๋ถ๋ฆฌ๋์ด ์์ด์ e.target.value
๋ฅผ ์ด๋ป๊ฒ ๋๊ฒจ์ค์ผํ ์ง ์ด๋ ค์ ๋ค โฆ ์ด ๊ณผ์ ์์ ์ปค์คํ
ํ
์ ๋ง๋ค์ด์ ์ํ๊ฐ๊ณผ ์ด๋ฒคํธํธ๋ค๋ง ํจ์๋ฅผ ์ํ๋ ๊ณณ์์ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ค. ์ปค์คํ
ํ
์ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ํตํด ์ ๋ฌ๋์ด ์์ฑํ๋ ๊ฒ์ด ์๋ ๊ฐ ์ปดํฌ๋ํธ์์ ๋
๋ฆฝ์ ์ผ๋ก ์ํ๋ฅผ ์์ฑํ ์ ์๋ค๋ ์ฅ์ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, ์๋ํฐ ์ปดํฌ๋ํธ์์๋ ์ํ๋ฅผ setํด์ฃผ๊ณ , ํค๋ ์ปดํฌ๋ํธ์์๋ ์ปค์คํ ํ ์ผ๋ก๋ถํฐ ์ํ๋ฅผ ๋ฐ์์์ ์๋ฒ๋ก ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ ์ ์์๋ค !!!
์ด๋ฏธ์ง ์ฒจ๋ถ ๊ธฐ๋ฅ๋ ์ฒ์ ๊ตฌํํด๋ด์ ์ ๊ทผ ๋ฐฉ์์ด ๋ ์ค๋ฅด์ง ์์๋ ๊ฒ ๊ฐ๋ค. ํ์ ์ค์ ํ๋กํ ์ด๋ฏธ์ง ์์ ๊ธฐ๋ฅ์ ๊ตฌํํ ํ์์ด ์์ด์ ๋์์ ๋ฐ์ ์ ์์๋ค.
์ด๋ฏธ์ง๋ Blob
์ด๋ผ๋ ํ์
์ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ํด๋น ํ์
์ src
์์ฑ์ ์ด๋ป๊ฒ ๋๊ฒจ์ค๊น ์ ๋ํ ์ด๋ ค์์ด ์์๋๋ฐ, URL.createObjectURL(object)
๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
createObjectURL
์ ํ์ฉํ๋ฉด Blob
๊ฐ์ฒด์ URL ์ฃผ์๊ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์๋ค. ํด๋น ์ฃผ์๋ ์ค์ ์๋ฒ์๋ ์กด์ฌํ์ง ์๊ณ , ๋ธ๋ผ์ฐ์ ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ URL์ด๋ค.
์ด๋ฐ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์๋์ ๊ฐ์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
๋ด๊ฐ ์์ฑํ ํฌ์คํธ ์์ ๊ธฐ๋ฅ
useEffect
์์ ํด๋น ํฌ์คํธ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ ๊ฐ title, body, image
์ํ์ setํด์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ ํธ์งํ ๋ด์ฉ์ ๋ค์ PUT
ํด์ฃผ๋ ํ์์ผ๋ก ๊ตฌํํ๋ค.
๋์ค์ฝ๋๋ก ๋งค์ผ ์คํฌ๋ผ์ ํ๋ฉด์ ๊ฐ์ ์งํ ์ํฉ์ ๊ณต์ ํ๊ณ , ์ด๋ ค์์ ์์๋์ง ์๊ธฐ๋ฅผ ๋๋ด๋ ์๊ฐ์ด ํ๋ก์ ํธ ์ ์ฒด์์ ์ ์ผ ์ค์ํ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ด์ฉ๋ฉด ๋น์ทํ ์ด๋ ค์์ ๊ฒช์๊ฑฐ๋ ๊ฒช๊ณ ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ์๋ก์ ์ํฉ์ ๊ณต์ ํ๋ ๊ฒ์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ git๊ณผ github๋ฅผ ํ์ฉํด์ ํ์ ์ด ์ ์ด๋ฃจ์ด์ง ๊ฒ ๊ฐ๋ค. ๊ฐ๋ ๋ธ๋์น ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธด ํ์ง๋ง, ๊ทธ ๋๋ง๋ค ์ฒ์ฒํ git log๋ฅผ ๋ณด๊ณ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ ๋ธ๋์น๊ฐ ๊ผฌ์ด์ง ์๋๋ก ์ฒ๋ฆฌํ๋ค.
์งง์ ์๊ฐ์์๋ ํ์ ๋ชจ๋๊ฐ ๊ฐ์ ์์ ์ ์ญํ ์ ์ต์ ์ ๋คํด์ค์ ๋๋ฌด ์ข์ ๊ฒฐ๊ณผ๊ฐ ๋์จ ๊ฒ ๊ฐ๋ค!!!
ํ์ ์คํฌ๋ฆฝํธ ํ์ ์ ์ง์ ํ๋ ๊ฒ๋ ์ฒ์์๋ ์ด๋ ค์ ๋๋ฐ, ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํด๋ณด๋ฉด์ ์กฐ๊ธ์ฉ ์ต์ํด์ง ๊ฒ ๊ฐ๋ค! ์ปค์คํ ํ ๋ ์ฒ์ ๋ง๋ค์ด๋ณด๊ณ , API ํธ์ถํ๋ ๊ฒ๋ ์ ๋ณด๋ค ๋ฅ์ํด ์ง ๊ฒ ๊ฐ๋ค.
์ค๊ฐ ๋ฐํ์ ์ต์ข ๋ฐํ์๋ ์ฐธ์ฌํ๋ฉฐ ๊ฐ๋ฐํ๊ณ ์๋ ์๋น์ค์ ๋ํ ์ดํด๋๋ฅผ ๋ ๋์ผ ์ ์์๊ณ ์ ๋ฌ๋ ฅ๋ ํค์ธ ์ ์์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ธ์ฝ์ค์ ์์ ํ์ฅ์ ์ฐ์์ผ๋ก ํ๊ณ ์๋๋ฐ, ํ์ฅ์ผ๋ก์ ๋ ธ๋ ฅํ ์ ์ด ์๋ค๋ฉด ์ต๋ํ ๋ชจ๋์ ์๊ฒฌ์ ๋ฃ๊ณ ๋ง์ถฐ๋๊ฐ๋ ๊ณผ์ ์์ ๋ง์ ์ํ๋ ์ผ์ด ์๋๋ก ๋ ธ๋ ฅํ ๊ฒ ๊ฐ๋ค ๐ย ๋ถ์กฑํ์ง๋ง ๋ ์ฑ์ฅํ ์ ์์๋ ๊ธฐํ์๋ ๊ฒ ๊ฐ๋ค.
์ ๋ฆฌํ ๊ฐ์ ์ํ๋ ๋ถ๋ถ์ด ๋ฌ๋ผ์ ํฉ์ด ๋๋ฌด ์ข์๋ ๊ฒ ๊ฐ์์ !!! ์ต๊ณ .. ๋ค๋ค ๊ณ ์ํ์ จ์ต๋๋ค ๐ฅฐ