๋ชฉ์ฐจ
0) ์ด๋ฏธ์ง ํด๋ผ์ฐ๋ ์ฒ๋ฆฌ
ํ๋ก์ ํธ ์งํ ์ค ์ด๋ฏธ์ง๋ฅผ ํด๋ผ์ฐ๋ ์ฒ๋ฆฌํ๊ธฐ๋ก ํ๋ฉด์
๋ค์ํ ๋ฐฉ๋ฒ์ ๋ชจ์ํ๋ ๋์ค cloudinary ๋ผ๋ ์ฌ์ดํธ๋ฅผ ํตํ ํด๋ผ์ฐ๋ํ ๋ฐฉ๋ฒ์ ์ฐพ์๋๋ค.
๊ฐ๋จํ ํ๋ก์ ํธ์ฉ๋๋ก ์ฌ์ฉํ ์์ ์ด๋ผ๋ฉด ์์ฑ๋ง์ถค์ด๋ค.
์ผ๋จ ๋น์ฉ์ด ๋ค์ง ์์ผ๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด๋ฃ ์ฉ๋์ด ์ ๊ณต๋์ด์ ๋งค์ฐ ์ข๋ค.
๊ตฌํ๋ฐฉ๋ฒ๋ ๊ฐ๋จํ๊ณ ํธ๋ฆฌํ๊ณ , ๋ค์ํ ๊ธฐ๋ฅ๋ค์ด ๋ง๋ค.
1) cloudinary ๊ฐ์ ํ๊ธฐ
https://console.cloudinary.com/
Image and Video Upload, Storage, Optimization and CDN
Streamline media management and improve user experience by automatically delivering images and videos, enhanced and optimized for every user.
cloudinary.com
2) ํ๋ฆฌ์ ์ค์ (API key)
ํ์ผ๋ก ์ค๋ฉด ์ด๋ฐ ํ๋ฉด์ด ๋ฌ๋ค.
๋์๋ณด๋์์๋ ๋ด Cloud name ๊ณผ API keys ๋ฅผ ํ์ธ ๊ฐ๋ฅํ๋ค.
(API ํค ์ฌ์ฉ ์์ด ์์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ฌ์ฉํ์ง ์์๋ค.)
์ข์ธก ํ๋จ์ `์ค์ ๋ฒํผ` > `Upload`
Preset ์ ์ถ๊ฐํด์ค๋ค.
Mode : `Unsigned` ์ฌ์ฉ์ ์ธ์ฆ ์์ด ์ ๋ก๋ ํ์ฉ ๊ฐ๋ฅ
Setting : `Upload Preset` ๊ณต๊ฐ์ ์ผ๋ก ์ค์ ๋์ด ์๋ค๋ฉด API ํค ์์ด ์ ๋ก๋ ๊ฐ๋ฅ
3) ์ด๋ฏธ์ง ์ ๋ก๋ ๊ตฌํ (ํ๋ก์ ํธ)
์์ฝ์ด ์๋ฃ๋ ๊ฒฝ์ฐ, ์์ฝ ๋ด์ญ์์ ๋ฆฌ๋ทฐ ์์ฑ ๋ฒํผ์ ๋๋ฌ ๋ฆฌ๋ทฐ ์์ฑ์ ํ ์ ์๋ค.
๋ฆฌ๋ทฐ ์์ฑ ํ์ด์ง์์๋ ์ต๋ 4์ฅ์ ๋ฆฌ๋ทฐ์ฌ์ง์ ์ฌ๋ฆด ์ ์๋๋ก ๊ตฌํํ๋ค.
์์ฑํ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ด๋ฏธ์ง ์ ๋ก๋ ํจ์๋ฅผ ํธ์ถํด์
์ด๋ฏธ์ง๊ฐ ํด๋ผ์ฐ๋์ ์ ๋ก๋ ๋๊ธฐ๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
formData ์ ์ ๋ก๋ ํ `file` ๊ณผ `upload_preset` ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
const handleUpload = async () => {
if (!images || images.length === 0) { // ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฉด ๋น ๋ฐฐ์ด ๋ฐํ
return [];
}
const uploadedUrls = []; // ์
๋ก๋๋ ์ด๋ฏธ์ง URL์ ์ ์ฅํ ๋ฐฐ์ด
for (let i = 0; i < images.length; i++) {
const formData = new FormData();
formData.append('file', images[i]);
formData.append('upload_preset', 'PRESET_NAME'); //
try {
const response = await axios.post(
'https://api.cloudinary.com/v1_1/'CLOUD_NAME'/image/upload',
formData
);
if (response.data && response.data.secure_url) {
uploadedUrls.push(response.data.secure_url);
}
} catch (error) {
console.error('์ด๋ฏธ์ง ์
๋ก๋ ์ค๋ฅ:', error);
}
}
console.log('Uploaded Images:', uploadedUrls);
return uploadedUrls; // ๋ชจ๋ ์
๋ก๋๋ ์ด๋ฏธ์ง URL ๋ฐฐ์ด ๋ฐํ
};
์ ๋ก๋ํ ์ด๋ฏธ์ง๊ฐ ์๋ ๊ฒฝ์ฐ์๋ `return`
์ ์ฅํ ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฉด ๊ฐ๋ณ์ ์ผ๋ก
cloudinary Rest API ์์ฒญ URL ์ ํตํด์ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํด์ค๋ค.
์ดํ ์ ๋ก๋ ๋ ๋งํฌ๋ฅผ ๋ฐํํด์ค๋ค.
ํด๋ผ์ฐ๋ํ๋ ์ด๋ฏธ์ง ๋งํฌ๋ฅผ ๋ฐฐ์ด์ ๋ค์ ๋ด์์ db ๋ก ๋ณด๋ด์ฃผ๋ ๋ฐฉ์์ด๋ค.
Media Explorer ์์ ์ ๋ก๋๋ ์ด๋ฏธ์ง๋ค์ ํ์ธํด๋ณผ ์ ์๋ค.
์ต์ข ์ ์ผ๋ก db ์ ์ด๋ฐ์์ผ๋ก ์ ์ฅ๋๊ณ
์ถ๋ ฅํ ๋ ๊ทธ๋๋ก src ์ ๋ฃ์ผ๋ฉด ์ด๋ฏธ์ง๊ฐ ์ถ๋ ฅ๋๋ค.