Upng.js: NPM ํŒจํ‚ค์ง€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค

์— ๋งŒ๋“  2017๋…„ 03์›” 29์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: photopea/UPNG.js

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•„๋‹ˆ, ๊ทธ๋“ค์€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์ฒด ๊ฐ€์ƒ ๋จธ์‹ ( node.js )์—์„œ ์‹คํ–‰๋˜๊ณ  ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์ด ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ์†Œํ”„ํŠธ์›จ์–ด( npm )๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ›„์ž๋Š” ์›น ์„œ๋ฒ„, ๋ฐ์Šคํฌํƒ‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋žซํผ ๋˜๋Š” Arduino ๋˜๋Š” Raspberry Pi๋ฅผ ํ†ตํ•ด ๋ฌผ๋ฆฌ์  ์žฅ์น˜ ๋ฅผ ํ”Œ๋žซํผ ์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉ ๋ฉ๋‹ˆ๋‹ค.

๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š” "์ „์—ญ ๋‚ด๋ณด๋‚ด๊ธฐ" ํŒจํ„ด์„ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Webpack , Brunch ๋˜๋Š” Rollup ๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ์— ์˜ํ•ด UMD๋กœ ๋ณ€ํ™˜๋œ UMD ๋˜๋Š” ์ด์ƒ์ ์œผ๋กœ๋Š” ES6 ๋ชจ๋“ˆ์ด ๋” ์ข‹์€ CommonJS ๋ชจ๋“ˆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์กด๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด EcmaScript ์–ธ์–ด์˜ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ์•„๋งˆ๋„ Babel์„ ์‚ฌ์šฉ ํ•˜์—ฌ ES5๋กœ ๋ณ€ํ™˜ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฏ€๋กœ TypeScript ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ EcmaScript์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ด๋ฉฐ, ์œ ํ˜• ์„œ๋ช…๊ณผ ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(TypeScript๋Š” ES5 ๋˜๋Š” ES6 JavaScript๋กœ ์ปดํŒŒ์ผ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์™€ ํ•จ๊ป˜ Babel์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค). TypeScript๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค๋„ VSCode์™€ ๊ฐ™์€ ์ตœ์‹  ํŽธ์ง‘๊ธฐ๊ฐ€ TypeScript ์œ ํ˜•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ํ˜• ํžŒํŠธ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ์ „ํžˆ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ„๋„์˜ ์ฃผ์ œ๋Š” ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์ž…๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋” ์ด์ƒ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์„ค์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์™€ ํ•จ๊ป˜ Mocha , Jasmine ๋˜๋Š” Ava ์™€ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Chai , PowerAssert ๋˜๋Š” ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๋Š” node.js์˜ ๋‚ด์žฅ assert ๊ธฐ๋Šฅ . ์ด์ƒ์ ์œผ๋กœ๋Š” ๊ฐ ๋ฐฐํฌ ์ „์— Karma๋ฅผ ํ†ตํ•ด BrowserStack ๋˜๋Š” SauceLabs ์—์„œ ๋ธŒ๋ผ์šฐ์ € ๊ฐ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ๋ชจ๋“  ๊ณณ์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ฒˆ์—ญ, ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ์— ์ง€์†์  ํ†ตํ•ฉ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ GitHub ์ €์žฅ์†Œ ๋˜๋Š” GitHub ํŽ˜์ด์ง€์˜ README์— ๋ฉ‹์ง„ ๋ฐฐ์ง€ ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋น™์‚ฐ์˜ ์ผ๊ฐ์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ŸฐํŠธ ์—”๋“œ ๊ฐœ๋ฐœ AD 2017์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹ 
๋‹น์‹ ์€ ๋˜ํ•œ ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋ฌด์‹œํ•˜๊ณ  ์ง€๊ธˆ๊นŒ์ง€ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฉ‹์ง„ ์ผ์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๋ชจ๋“  6 ๋Œ“๊ธ€

NPM์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‹น์‹ ์ด ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

"npm"์— UPNG.js๋ฅผ ๊ฒŒ์‹œํ•˜๋ ค๋ฉด ํŠน์ˆ˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ GitHub์™€ npm์—์„œ ๋ชจ๋‘ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด npm์ด GitHub์— ์—ฐ๊ฒฐํ•˜์—ฌ ์ตœ์‹  ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๋ณด์„ธ์š”! ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. NodeJS/NPM์„ ๋ชจ๋ฅด์‹œ๋Š” ์ค„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. NPM์€ ์ง€๊ตฌ์ƒ์—์„œ ๊ฐ€์žฅ ํฐ ํŒจํ‚ค์ง€/์ข…์†์„ฑ ๊ด€๋ฆฌ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ์—ฌ์ „ํžˆ github์— ์žˆ์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ๋ฅผ ๋” ํŽธ์•ˆํ•˜๊ฒŒ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰: ์ฝ˜์†” ๋ช…๋ น์„ ํ†ตํ•ด ์„ค์น˜( npm install upng )
์˜ˆ๋ฅผ ๋“ค์–ด require('upng') ๋ฅผ ํ†ตํ•œ ์‚ฌ์šฉ. ๋˜ํ•œ ์ „์—ญ ๊ฐœ์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค( window.upng )๋ฅผ ์–ด์ง€๋Ÿฝํžˆ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๊ฐ€ echojs.com ์— ๊ฒŒ์‹œ

NPM์— ๊ฒŒ์‹œํ•˜๊ธฐ ์œ„ํ•ด pull ์š”์ฒญ์„ ์ƒ์„ฑํ•  ์‹œ๊ฐ„์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฏ€๋กœ NPM์— ๊ฒŒ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ๋Š” https://docs.npmjs.com/cli/publish ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NPM์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜์„ธ์š”: https://docs.npmjs.com/cli/init

์›น ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด GitHub๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์„œ๋ฒ„์— 12kB๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋ฏธ์นœ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ, ๊ทธ๋“ค์€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์ฒด ๊ฐ€์ƒ ๋จธ์‹ ( node.js )์—์„œ ์‹คํ–‰๋˜๊ณ  ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์ด ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ์†Œํ”„ํŠธ์›จ์–ด( npm )๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ›„์ž๋Š” ์›น ์„œ๋ฒ„, ๋ฐ์Šคํฌํƒ‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋žซํผ ๋˜๋Š” Arduino ๋˜๋Š” Raspberry Pi๋ฅผ ํ†ตํ•ด ๋ฌผ๋ฆฌ์  ์žฅ์น˜ ๋ฅผ ํ”Œ๋žซํผ ์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉ ๋ฉ๋‹ˆ๋‹ค.

๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š” "์ „์—ญ ๋‚ด๋ณด๋‚ด๊ธฐ" ํŒจํ„ด์„ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Webpack , Brunch ๋˜๋Š” Rollup ๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ์— ์˜ํ•ด UMD๋กœ ๋ณ€ํ™˜๋œ UMD ๋˜๋Š” ์ด์ƒ์ ์œผ๋กœ๋Š” ES6 ๋ชจ๋“ˆ์ด ๋” ์ข‹์€ CommonJS ๋ชจ๋“ˆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์กด๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด EcmaScript ์–ธ์–ด์˜ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ์•„๋งˆ๋„ Babel์„ ์‚ฌ์šฉ ํ•˜์—ฌ ES5๋กœ ๋ณ€ํ™˜ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฏ€๋กœ TypeScript ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ EcmaScript์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ด๋ฉฐ, ์œ ํ˜• ์„œ๋ช…๊ณผ ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(TypeScript๋Š” ES5 ๋˜๋Š” ES6 JavaScript๋กœ ์ปดํŒŒ์ผ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์™€ ํ•จ๊ป˜ Babel์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค). TypeScript๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค๋„ VSCode์™€ ๊ฐ™์€ ์ตœ์‹  ํŽธ์ง‘๊ธฐ๊ฐ€ TypeScript ์œ ํ˜•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ํ˜• ํžŒํŠธ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ์ „ํžˆ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ„๋„์˜ ์ฃผ์ œ๋Š” ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์ž…๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋” ์ด์ƒ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์„ค์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์™€ ํ•จ๊ป˜ Mocha , Jasmine ๋˜๋Š” Ava ์™€ ๊ฐ™์€ ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Chai , PowerAssert ๋˜๋Š” ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๋Š” node.js์˜ ๋‚ด์žฅ assert ๊ธฐ๋Šฅ . ์ด์ƒ์ ์œผ๋กœ๋Š” ๊ฐ ๋ฐฐํฌ ์ „์— Karma๋ฅผ ํ†ตํ•ด BrowserStack ๋˜๋Š” SauceLabs ์—์„œ ๋ธŒ๋ผ์šฐ์ € ๊ฐ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ๋ชจ๋“  ๊ณณ์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ฒˆ์—ญ, ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ์— ์ง€์†์  ํ†ตํ•ฉ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ GitHub ์ €์žฅ์†Œ ๋˜๋Š” GitHub ํŽ˜์ด์ง€์˜ README์— ๋ฉ‹์ง„ ๋ฐฐ์ง€ ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋น™์‚ฐ์˜ ์ผ๊ฐ์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ŸฐํŠธ ์—”๋“œ ๊ฐœ๋ฐœ AD 2017์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹ 
๋‹น์‹ ์€ ๋˜ํ•œ ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋ฌด์‹œํ•˜๊ณ  ์ง€๊ธˆ๊นŒ์ง€ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฉ‹์ง„ ์ผ์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

๊ท€ํ•˜์˜ ์˜๊ฒฌ์— ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์šด๋กœ๋“œ, ์„ค์น˜ ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๋ฐ UPNG.js๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋ณด๋‚ธ ์‹œ๊ฐ„๋ณด๋‹ค ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชฉ์ ์œผ๋กœ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ €๋Š” ๊ทธ ์ž‘์—…์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋งก๊ธฐ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค(npm ๋˜๋Š” ๊ธฐํƒ€ "์ฝ”๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค"/์›น์‚ฌ์ดํŠธ์— UPNG.js๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Œ).

์ถ”์‹ : "ํ‘œ์ค€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ"์„ ์ƒ์ƒํ•  ๋•Œ๋ณด๋‹ค ์ˆ˜์ฒœ ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Node.js๊ฐ€ ์•„๋‹ˆ๋ผ ์ˆ˜์‹ญ์–ต ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒ์ƒํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰