์ด๋ฏธ์ง ์์ถ์ ํ์์ฑ
๋ฆฌ๋ทฐ ์์ฑ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ๋ฉฐ ์ต์ ํ๋ฅผ ์ด๋ป๊ฒ ํ ์ง ๊ณ ๋ฏผํ๋ค.
์ฐ์ , ์ด๋ฏธ์ง ํ์ผ ๊ฐ์ ์ ํ๊ณผ ํ์ผ ํฌ๊ธฐ ์ ํ์ ๋ํ ๊ธฐ์ค์ ์ค์ ํ๋ค. ๋ฆฌ๋ทฐ ํ์ด์ง๊ฐ ์ธ์คํ ํผ๋ ํ์์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ์ง ํ์ผ ๊ฐ์๋ ์ต๋ 5๊ฐ๋ก ์ ํํ๊ณ , ํ์ผ ํฌ๊ธฐ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ํ์ํ์ฌ ์์๋ก 10MB๊น์ง ์ ๋ก๋ํ ์ ์๋๋ก ์ค์ ํ๋ค.
๋ํ, ํด๋ผ์ด์ธํธ ์ธก์์ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ WebP ํ์์ผ๋ก ๋ณํํ๋ฉด ์๋ฒ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ๊ณ ์ ์ก ์๋๋ฅผ ๊ฐ์ ํ ์ ์๋ค๊ณ ํ๋จํ๋ค. ์ด๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ฌ ๋ ๋ ๊ฐ๋ณ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ๊ฒ ํฅ์์ํฌ ๊ฒ์ผ๋ก ๊ธฐ๋๋๋ค.
์ด๋ฏธ์ง ์์ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ง ๊ณ ๋ฏผํ ๋์ browser-image-compression์ ์ ํํ๋ค.
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์ด๋ก๋ ์๊ฐ ๋ง๊ณ , ๋ฌธ์๊ฐ ์ ์ ๋ฆฌ๋์ด ์์ผ๋ฉฐ, ๋ง์ ์ฌ์ฉ ํ๊ธฐ๊ฐ ์์ด ์ ๋ขฐํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ํ๋จํ๋ค.
ํ์ง๋ง ๋น๊ต์ ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ํฌ๋ค๊ณ ์๊ฐํ๋๋ฐ, ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋ฉด ์ข์์ง ๊ณ ๋ฏผํ๋ค.
์ด๋ ๋น๋๊ธฐ์ ์ผ๋ก imageCompression์ ๋ก๋ํ์ฌ ํด๊ฒฐ ํ ์ ์์๋ค. ์ฌ์ฉ์๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ๋ ค๊ณ ์๋ํ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ก๋๋๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ ๊ฐ์ ๋ ๊ฒ์ด๋ผ ์๊ฐํ๋ค.
export const compressImage = async (file: File): Promise<File | null> => {
try {
const { default: imageCompression } = await import(
'browser-image-compression'
);
const options = {
maxSizeMB: 2, // ์ต๋ ํฌ๊ธฐ (MB)
maxWidthOrHeight: 800, // ์ต๋ ๋๋น๋ ๋์ด (ํฝ์
)
useWebWorker: true, // ์น ์์ปค ์ฌ์ฉ ์ฌ๋ถ
fileType: 'image/webp',
};
const convertedFile = await imageCompression(file, options);
return convertedFile;
} catch (error) {
console.error('ํ์ผ ๋ณํ ์ค ์ค๋ฅ:', error);
return null;
}
};
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฉ ๊ฒฐ๊ณผ
- ์์ถ ์ ํ์ผ ํฌ๊ธฐ: 144003, ์ด๋ฏธ์ง ํ์ : “image/png”
- ์์ถ ํ ํ์ผ ํฌ๊ธฐ: 33872, ์ด๋ฏธ์ง ํ์ : "image/webp"
https://www.npmjs.com/package/browser-image-compression
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JWT ํ ํฐ ์ด๋์ ์ ์ฅํ๋๊ฒ ์ข์๊น? (1) | 2024.12.16 |
---|---|
SVGR jest ํ ์คํ ์๋ฌ (0) | 2024.12.07 |
React Query์ SSR: ์๋ฒ ์ฌ์ด๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ Hydration ํ์ฉ (1) | 2024.12.07 |
Swiper ์ฌ์ฉ ํ๊ธฐ (feat. ํ ์ผ์๋) (0) | 2024.12.07 |
next localFont ์ฌ์ฉ ์ด์ ์ src ์ค์ (0) | 2024.11.30 |