๐ช ํ ์ด ํ๋ก์ ํธ/๐ผ๏ธ (7) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [7] ๊ธฐ์ ์คํ์ ๋ฐ๊พธ๊ธฐ ์์ ์ ํด์ผ ํ ๊ฒ๋ค ํต์ฌ์ด ๋๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ฐ ์ฑ๊ณตํ์ผ๋, ์ด์ ์๋ธ ๊ธฐ๋ฅ์ธ ์๋ํ๊ธฐ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.๋ฐ๋๋ผJS๋ก ๋ง๋ค๋ฉด ํ์์๋ ๋ ๋๋ง์ด ์๊ธฐ๊ณ , ๋ ๋๋ง๋ ๋ ๊น๋ฐ์์ด ์๊ธฐ๊ธฐ ๋๋ฌธ์,๊ทธ๋ฆฌ๊ณ ์ง๊ธ๋ณด๋ค ๋ ๊ธธ์ด์ง ์ฝ๋๊ฐ ์์๋์ด ๋ฆฌ์กํธ๋ก ์คํ์ ๋ฐ๊พธ๋ ค๊ณ ์๊ฐํ๊ณ ๋ ์์๋ค. ์ํ๋ ๊ธฐ๋ฅ 1. CRUD ๊ฐ ๊ฐ๋ฅํ ์๋ํ๊ธฐ ํ์ด์ง๋ฅผ ๋ง๋ค๊ณ ์ถ์๊ธฐ์ (์ธ์คํ์ฒ๋ผ ๊ฐ์ ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ ์ ์๋๋ก)2. ํ๋กํ ๊ทธ๋ฆผ 1์ฐจ ์์ฑ ํ -> ํ์ด์ง ์ด๋ํด์ 2์ฐจ ๊ฐ๊ณต (๊ทธ๋ฆฌ๊ธฐ, ๊ธ์จ ์ฐ๊ธฐ) ๊ฐ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ์ถ์์ด๋ ๊ฒ ๋๊ฐ์ง ๊ธฐ๋ฅ์ ์ํ๊ธฐ์ ์๋ฒ๊ฐ ํ์ํ๋ค. ์ฃผ๋ณ ๊ฐ๋ฐ์ ๋ถ๋ค๊ป ์ฌ์ญค๋ดค๋๋ฐ ์ง๊ธ ํ ์ ์๋ ๊ฑด1. React + express2. Next JS ์ฌ์ฉํ๊ธฐ ์ด๋ ๊ฒ ๋๊ฐ์ง์๋๋ฐ ์ด ๋๊ฐ์ง ์ค์ ์ด๋ค ์คํ์ผ๋ก ํ .. [6] ์บ๋ฆญํฐ๋ง ๋ฐ๊พธ๊ธฐ ์ฑ๊ณต + ์์ดํ ๋ณ๊ฒฝ ์ ๊ทธ๋ฆผ๋ค ์์๋๋ก ๋ฐฐ์นํ๊ธฐ + ๋ฐฐ๊ฒฝ ์ปฌ๋ฌ ์ ์งํ๊ธฐ ์บ๋ฆญํฐ๋ฅผ ๋ฐ๊พธ๋ฉด ๋ชจ๋ ๊ฒ ์ด๊ธฐํ ๋๊ณ ๋ชจ๋ ์์๋ฅผ ๋ค์ ์ ํํด์ผ ํ๋ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ช ๊ฐ์ง์ ํด๊ฒฐ์ฑ ์ ์๊ฐํด๋ดค์๋ค. https://mayongee.tistory.com/626 [5] Canvas Api ๋ ํ๊ฒน์ด์ผ - ์ด๋ฏธ์ง ๊ต์ฒด ๋ฒํผ ์์ ํ๊ธฐโ๏ธ๋ฌธ์ ์ : ์บ๋ฆญํฐ ๋ฒํผ ํด๋ฆญ ์ ๋ชจ๋ ์์ ์ด๊ธฐํ ์ด์ ์ ๋ง๋ ๋ฒํผ์ด ์๋ํ๋ ๋ชจ์ต์ ๋ณด๋ฉด ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์ด ์์๋๋ฐ, ๋ฐ๋ก ์บ๋ฒ์ค ๋ด์ ์ด๋ฏธ์ง๊ฐ ์๋ ๊ฒฝ์ฐ ์ทจ์ ๋ฒํผ (์์ ๊ธฐ ๋ฒํผ)์mayongee.tistory.com 2. ๋ฒํผ์ ํด๋ฆญํด์ canvas ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ฐฐ๊ฒฝ ์๊ณผ ๋ณ๊ฐ๋ก ์ด๋ฏธ์ง url ์ ๋ณ์๋ก ๊ฐ์ง๊ณ ์๊ธฐ ์ด์ ๋จ๊ณ์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ฐ (๋ฐฐ๊ฒฝ์ ํฌ๋ช ์ผ๋ก)=> ๋ฐฐ๊ฒฝ์ด ๋ณ๊ฒฝ ๋ ๋ -> ๋ฐฐ๊ฒฝ ๊น๊ณ ๋ค์ ๋ก๋=> ๋ค๋ฅธ ๋ฒํผ ๋๋ฅผ .. [5] Canvas Api ๋ ํ๊ฒน์ด์ผ - ์ด๋ฏธ์ง ๊ต์ฒด ๋ฒํผ ์์ ํ๊ธฐ โ๏ธ๋ฌธ์ ์ : ์บ๋ฆญํฐ ๋ฒํผ ํด๋ฆญ ์ ๋ชจ๋ ์์ ์ด๊ธฐํ ์ด์ ์ ๋ง๋ ๋ฒํผ์ด ์๋ํ๋ ๋ชจ์ต์ ๋ณด๋ฉด ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์ด ์์๋๋ฐ, ๋ฐ๋ก ์บ๋ฒ์ค ๋ด์ ์ด๋ฏธ์ง๊ฐ ์๋ ๊ฒฝ์ฐ ์ทจ์ ๋ฒํผ (์์ ๊ธฐ ๋ฒํผ)์ ๋๋ฅด๋ฉดํด๋น ์์ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์์๊ฐ ์ง์์ง๋ ์ ์ด์๋ค. ๊ฐ๋ น ์บ๋ฆญํฐ๋ฅผ ํด๋ฆญ & ๋ ธํธ๋ถ ํด๋ฆญ ํด์ ๋ ธํธ๋ถ์ด ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ํ, ์ฑ ์์ ๋ณ๊ฒฝํ๊ณ ์ถ์ด ์ฑ ์ ๋ฒํผ์ ๋๋ฅด๋ฉดํฐ์์ผ๋ก ๋ชจ๋ ์์๊ฐ ์ฌ๋ผ์ง๊ฒ ๋๋ค.์ฆ, ์ฒ์๋ถํฐ ์๋ก ํ๋กํ์ ๋ง๋ค์ด์ผ ํ๋ค. ๐์์ธ : canvas api ๋ ํ๊ฒน!I think maybe you misunderstand what a Canvas is.A canvas is essentially a 2 dimensional grid of pixels along an 'X' axis.. [4] ์ด๋ฏธ์ง ์ ์ฅํ๋ ๋ฒํผ ๋ง๋ค๊ธฐ ์ ์ฅํ๊ธฐ ์ด๋ ๊ฒ ๋ฒํผ ์์๋ฅผ ๋ง๋ค์ด์ค ํ, JS ๋ก ๋ฒํผ์ ํด๋ฆญํ์ ๋์ ์ด๋ฒคํธ ํจ์๋ฅผ ๋ง๋ค์ด์ค๋ค.const onSaveButtonClick = () => { const image = canvas.toDataURL('image/jpeg'); const link = document.createElement('a'); link.href = image; link.download = 'ProfileByDDOZZA'; link.click(); alert('save!');}; canva.toDataUrl() : ์ด๋ฏธ์ง ํํ์ ํฌํจํ๋ ๋ฐ์ดํฐ URL์ ๋ฐํํ๋ค. ํ์ผ ํ์์ ์ง์ ํ ์ ์๋๋ฐ, ๋ฐ๋ก ์ง์ ํ์ง ์์ผ๋ฉด PNG ํ์์ผ๋ก ๋ด๋ณด๋ด์ง๋ค. ๋ง์ ๊ฒฝ์ฐ์ image/jpeg ํน์ image/webp ํ์๋.. [3] ์ฌ์ฉํ ์ด๋ฏธ์ง ์ ์ & ์บ๋ฒ์ค์ ์ด๋ฏธ์ง ๋ฃ๋ ๋ฒํผ ๋ง๋ค๊ธฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ฌ์ฉํ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ ค๋ดค๋ค. ์ด๋ฐ ๋๋์ผ๋ก ์์ฑํ ์ ์๊ฒ ๋ค์ํ ์์์ ์บ๋ฆญํฐ๋ฅผ ๊ทธ๋ ธ๋ค.๊ตฌํ ํ ํ์ํ ์์๋ค์ด ์๋ค๋ฉด ๋ ๊ทธ๋ ค์ ์ถ๊ฐํด ๋ณผ ์์ ! ์บ๋ฆญํฐ์ ๋ ธํธ๋ถ ๋ฒํผ๋ง ๋ง๋ค์ด๋ดค๋ค.๊ฐ๊ฐ์ ๋ฒํผ์ eventListener ๋ก click ์ ์ด๋ฏธ์ง๊ฐ ์บ๋ฒ์ค์ ๋ค์ด๊ฐ๊ฒ ๋๋ค. ๊ฐ์ ๋ฒํผ์ ๋ค์ ํด๋ฆญ ์ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง๋ค.ํด๋ฆญํ ๋ฒํผ์ ๊ตฌ๋ถ์ ์ํด, ์ด๋ฏธ์ง๊ฐ ๋ค์ด๊ฐ ๋ฒํผ์ ๋ฐฐ๊ฒฝ ์ปฌ๋ฌ๊ฐ ๋ฐ๋๊ฒ ์ค์ ํ๋ค. ์ด์ 1. ๋์ผํ ์บ๋ฆญํฐ ํด๋ฆญ ์ img ์ button ์ ํฌ๊ธฐ๊ฐ ๋ง์ง ์์ target์ ์ฐพ๊ธฐ ์ด๋ ค์ด ์ ๋ฒํผ์ ํด๋ฆญํ๊ณ ์ถ์๋ฐ, ์๊พธ ์ด๋ฏธ์ง๊ฐ ์์ ์์ด ์ด๋ฏธ์ง๊ฐ target ์ด ๋๋ค. ์ด๋ป๊ฒ ํ ์ง ๊ณ ๋ฏผํ๋ค๊ฐ, ๋ ์ค์ ์ด๋ค๊ฒ ํด๋ฆญ์ด ๋ผ๋ ๊ฐ์ className ์ด ๋ค์ด์จ๋ค๋ฉด,ํด๋นํ๋.. [2] Canvas API ํ์ฉํ๊ธฐ Canvas API ํ์ฉํ๊ธฐ canvas api ๋ ๋ ธ๋ง๋์ฝ๋ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ฒ์ ์ ํ๋๋ฐ, ์ฌ์ค ์ฒ์ ๋ค์์ ๋ ๋๋ฌด ๋ณต์กํ ๋๋์ด์๊ณ , ์ดํด๊ฐ ์ ๋์ง ์์๋ค.(์ ๋ง ๋ง ๊ทธ๋๋ก ๋ฐ๋ผ ์น๊ธฐ๋ง ํ์๋ค)์ด์ฌ์๋ ๋ ธ๋ง๋์ฝ๋ ๊ฐ์๋ฅผ ์ถ์ฒํ๋ค! ๋ฌด๋ฃ๊ณ ๋๊ผฌ์ค์ด ์ค๋ช ๋ ์ํด์ฃผ์ฌ! ์ฝ ๋๋ฌ ๊ฐ์ ๊ฐ๋ฐ ๊ณต๋ถ ๊ณต๋ฐฑ์ด ์์๋ ํฐ๋ผ, ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ cavas api ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ๋ณต์ตํ๋ฉฐ mdn ๋ฌธ์๋ ๊ฐ์ด ๋ดค๋๋ฐ, ์์ ์ ๊ธฐ์ต์ด ๋ฌด์ํ๊ฒ ์ดํด๊ฐ ์ ๋๊ณ ์ฌ๋ฐ์๋ค.๋จ์ํ๊ฒ ์๊ฐํ๋ฉด ๋๋ ๊ฒ๋ค์ ๋ณต์กํ๊ฒ๋ง ์๊ฐํ ๊ฒ ์๋๊ฐ ์ถ๋ค. ์ฐธ๊ณ ์ฌ์ดํธ๐ mdn ํ๊ตญ์ด ๋ฒ์ (์ ๋ถ ๋ค ๋ฒ์ญ์ด ๋์ด์์ง ์๋ค) HTML ์๋ฆฌ๋จผํธ๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ผ๋ก ์ด ํํ ๋ฆฌ์ผ์ ์์ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ํ์ด์ง์ ๋์์ ์บ๋ฒ์ค 2D ์ปจํ ์คํธ๋ฅผ.. [1] ํ๋ก์ ํธ ์์ด๋์ด์ ๋ฐฐ๊ฒฝ & ํ๋ก์ ํธ ๋ชฉํ 1. ํ๋ก์ ํธ ์์ด๋์ด์ ๋ฐฐ๊ฒฝ ์ต๊ทผ ๋ฐฐ๋ฌ์๋ฏผ์กฑ ์ก์์ฐฝ๋์ ์ทจ์ ์ค๋ช ํ์์ "1๋ช ์ด๋ผ๋ ๋๊ตฐ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ๊ธฐ ์ํ ํ๋ก์ ํธ๋ฅผ ํด๋ณธ ์ ์๋์?"๋ผ๋ ์ง๋ฌธ์ ๋ฐ์๋ค. ๋ฌผ๋ก ์ฒ์ ๋ฐ์๋ณธ ์ง๋ฌธ์ ์๋์๋ค. '์ฌ๋๋ค์ด ์ ๋ง๋ก ์ฌ์ฉํ ๋งํ ํ๋ก์ ํธ๋ฅผ ํด๋ณด์ธ์' ๋ฑ๊ณผ ๊ฐ์ ์ทจ์ง๋๊น. ํ์ง๋ง ์ฝ 2๋ฌ ๊ฐ์ ๊ธด ์ฌํ์ ๋ง์น๊ณ ์จ ํ, ๋๋ ์ด๋ค ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ถ์์ง, ๋ด๊ฐ ์ฆ๊ฒ๊ฒ ๋ง๋ค ์ ์๋ ํ๋ก์ ํธ๋ ๋ญ๊ฐ ์๋์ง ๊ณ ๋ฏผํ๋ ์ฐจ์ ์ด ์ง๋ฌธ์ ๋ฐ๊ฒ ๋๊ณ , ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ฅผ ์ํ ํ๋กํ ์์ฑ ์ฑ์ ๋ง๋ค๋ฉด ๋๊ฒ ๋ค๋ ์์ด๋์ด๊ฐ ๋ ์ฌ๋๋ค.์ด๋ฆด ๋๋ถํฐ ๊ทธ๋ฆผ์ ์ข์ํ๊ณ , ๋์์ธ ์ ๊ณต์ ์ ํํ ํ์๋ ๊พธ์คํ ๊ทธ๋ฆผ์ ๊ทธ๋ ค์๋ค. ์ดํ ๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ์ํด ๋ ธ๋ง๋์ฝ๋ ๋์ค์ฝ๋์ ์ฐธ์ฌํ๊ฒ ๋์๊ณ , ์ด ๊ณณ์์๋ ์กฐ๊ธ์ฉ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์์ํ.. ์ด์ 1 ๋ค์