diff --git a/.gitattributes b/.gitattributes index 269093e37f..698ad0d6be 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,9 +1,9 @@ # Common settings that generally should always be used with your language specific settings -# Auto detect text files and perform LF normalization +# Turn on line ending normalization +* text=auto -# Scripts -*.bash text eol=lf +# Set the line ending for .js files to ensure linting scripts work *.js text eol=lf # diff --git a/contributor_docs/ko/README.md b/contributor_docs/ko/README.md index bf770b4736..cf5be67d91 100644 --- a/contributor_docs/ko/README.md +++ b/contributor_docs/ko/README.md @@ -1,195 +1,195 @@ - - -# ๐ŸŒธย ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๐ŸŒบ - -p5.js์— ๊ธฐ์—ฌํ•˜๋Š”๋ฐ์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ๋ชจ๋“  ํ˜•ํƒœ์˜ ๊ธฐ์—ฌ๋ฅผ ์†Œ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉฐ โ€œ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐโ€์˜ ์˜๋ฏธ๋ฅผ ์ตœ๋Œ€ํ•œ ๋„“์€ ๋ฒ”์œ„๋กœ ํ™•์žฅํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌธ์„œํ™”, ๊ฐ•์˜, ์ฝ”๋“œ ์ž‘์„ฑ, ์ฐฝ์ž‘ ํ™œ๋™, ๊ธ€์“ฐ๊ธฐ, ๋””์ž์ธ, ์šด๋™, ์กฐ์งํ™”, ํ๋ ˆ์ดํŒ… ๋ฐ ๊ทธ ์™ธ์—๋„ ์—ฌ๋Ÿฌ๋ถ„์ด ์ƒ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฑธ ํฌ๊ด„ํ•ฉ๋‹ˆ๋‹ค. [์šฐ๋ฆฌ์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ํŽ˜์ด์ง€](https://p5js.org/community/#contribute)์—๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ฐธ์—ฌํ•˜๊ณ  ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค์— ๋Œ€ํ•œ ๊ฐœ์š”๊ฐ€ ์ œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์ธ ๊ธฐ์—ฌ๋ฅผ ํ•˜๊ณ ์ž ํ•˜์‹ ๋‹ค๋ฉด, ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ ์ด ๊ธ€์„ ์กฐ๊ธˆ ๋” ์ฝ์–ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. - -์ด ํ”„๋กœ์ ํŠธ๋Š” [์˜ฌ-์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ์Šค(all-contributors)](https://github.com/kentcdodds/all-contributors) ์‚ฌ์–‘์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. [์•ˆ๋‚ด ์‚ฌํ•ญ](https://github.com/processing/p5.js/issues/2309)์„ ๋”ฐ๋ผ [๋ฆฌ๋“œ๋ฏธ(readme)](https://github.com/processing/p5.js/blob/main/README.md#contributors)์— ๋ณธ์ธ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”! ํ˜น์€ [๊นƒํ—ˆ๋ธŒ ์ด์Šˆ](https://github.com/processing/p5.js/issues)์— ์—ฌ๋Ÿฌ๋ถ„์˜ ์ปจํŠธ๋ฆฌ๋ทฐ์…˜์„ ๋Œ“๊ธ€๋กœ ๋‹ฌ์•„์ฃผ์‹œ๋ฉด ์ €ํฌ๊ฐ€ ์ถ”๊ฐ€ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. - - - -# ์ฝ”๋“œ ๋ณด๊ด€ ์œ„์น˜ - -p5.js ํ”„๋กœ์ ํŠธ์˜ ํ•ต์‹ฌ์ ์ธ ์ €์žฅ์†Œ๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค: - -- [p5.js](https://github.com/processing/p5.js): ๋ณธ ์ €์žฅ์†Œ์—๋Š” p5.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ณด๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. [์œ ์ €๋“ค์ด ๋ณด๊ฒŒ ๋˜๋Š” p5.js์˜ ๋ ˆํผ๋Ÿฐ์Šค ๋งค๋‰ด์–ผ](https://p5js.org/reference/) ๋˜ํ•œ ์ด ์†Œ์Šค ์ฝ”๋“œ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” [JSDoc](http://usejsdoc.org/) ๊ฐ์ฃผ์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ณธ ์ €์žฅ์†Œ๋Š” [๋กœ๋ Œ ๋ฆฌ ๋งฅ์นด์‹œ(Lauren Lee McCarthy)](https://github.com/lmccart)๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. -- [p5.js-website](https://github.com/processing/p5.js-website): ๋ณธ ์ €์žฅ์†Œ์—๋Š” ๋ ˆํผ๋Ÿฐ์Šค ๋งค๋‰ด์–ผ์„ ์ œ์™ธํ•œ [p5.js ์›น์‚ฌ์ดํŠธ](http://p5js.org)์˜ ์ฝ”๋“œ๊ฐ€ ์ „๋ถ€ ๋ณด๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ์ €์žฅ์†Œ๋Š” [๋กœ๋ Œ ๋ฆฌ ๋งฅ์นด์‹œ(Lauren Lee McCarthy)](https://github.com/lmccart)๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. -- [p5.js-sound](https://github.com/processing/p5.js-sound): ๋ณธ ์ €์žฅ์†Œ์—๋Š” p5.sound.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ณด๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ์ €์žฅ์†Œ๋Š” [์ œ์ด์Šจ ์‹œ๊ฐˆ(Jason Sigal)](https://github.com/therewasaguy)์ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. -- [p5.js-web-editor](https://github.com/processing/p5.js-web-editor): ๋ณธ ์ €์žฅ์†Œ์—๋Š” [p5.js ์›น ์—๋””ํ„ฐ](https://editor.p5js.org)์˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ณด๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ์ €์žฅ์†Œ๋Š” [์บ์‹œ ํƒ€๋ผ์ผ€์ง€์–ธ(Cassie Tarakajian)](https://github.com/catarak)์ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ „์˜ [p5.js ์—๋””ํ„ฐ](https://github.com/processing/p5.js-editor)๋Š” ์ด์ œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค. -- [p5.accessibility](https://github.com/processing/p5.accessibility): ๋งน์ธ ๋ฐ ์‹œ๊ฐ ์žฅ์• ์ธ๋“ค์ด ์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ p5 ์บ”๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. - - - -# ์ €์žฅ์†Œ ํŒŒ์ผ ๊ตฌ์กฐ - -๋ณธ ํ”„๋กœ์ ํŠธ์—” ๋งŽ์€ ํŒŒ์ผ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์— ๊ทธ ๊ฐ„๋žตํ•œ ๊ฐœ์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ—ท๊ฐˆ๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ €์žฅ์†Œ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ์ดํ•ดํ•  ํ•„์š”๊นŒ์ง€๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•œ ์˜์—ญ(์ธ๋ผ์ธ ๋„ํ๋ฉ˜ํ…Œ์ด์…˜์„ ๊ณ ์น˜๋Š” ๊ฒƒ์ด ํ•œ ์˜ˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค)์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ฐจ๊ทผ์ฐจ๊ทผ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ฑธ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฃจ์ด์‚ฌ ํŽ˜๋ ˆ์ด๋ผ(Luisa Pereira)์˜ ๊ฐ•์˜ [Looking Inside p5.js](https://www.luisapereira.net/teaching/materials/processing-foundation)์— p5.js ์ž‘์—… ํ๋ฆ„์— ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ์™€ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•œ ์†Œ๊ฐœ๋ฅผ ๋™์˜์ƒ์œผ๋กœ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -- `contributor_docs/`์—๋Š” ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๋“ค์„ ์œ„ํ•œ ๊ด€๋ก€์™€ ์›์น™์„ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. -- `docs/`์—๋Š” ์‚ฌ์‹ค ๋ฌธ์„œ๋“ค์ด ์—†์Šต๋‹ˆ๋‹ค! ๋Œ€์‹ , [์˜จ๋ผ์ธ ๋ ˆํผ๋Ÿฐ์Šค ๋งค๋‰ด์–ผ](https://p5js.org/reference)์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. -- `lib/`์—๋Š” ๋น„์–ด ์žˆ๋Š” ์˜ˆ์‹œ ํŒŒ์ผ๊ณผ [p5.js-sound ์ €์žฅ์†Œ](https://github.com/processing/p5.js-sound)์—์„œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ •๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๋Š” p5.sound ์• ๋“œ์˜จ์ด ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๊ณณ์€ ๋นŒ๋“œ ๋œ p5.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ [Grunt](https://gruntjs.com/)๋ฅผ ์ด์šฉํ•ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ ๋œ ํ›„์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜๋Š” ๊ณณ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•  ๋•Œ ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ๋กœ ๋”ฐ๋กœ ํŒŒ์ผ์„ ์ด๋™์‹œํ‚ฌ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. -- `src/` ์—๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š”๋ฐ, ์ด๋“ค์€ ๋ถ„๋ฆฌ๋œ ๋ชจ๋“ˆ์˜ ํ˜•ํƒœ๋กœ ์ฃผ์ œ๋ณ„๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ p5.js๋ฅผ ์ˆ˜์ •ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์—ฌ๊ธฐ ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ์— ์ž‘์—…์„ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํด๋” ์•ˆ์—๋Š” ๊ฐ๊ฐ์˜ ๋ฆฌ๋“œ๋ฏธ ํŒŒ์ผ(readme.md)์ด ์žˆ์œผ๋‹ˆ ์ด๋ฅผ ์ฐธ๊ณ ํ•ด ์ž‘์—… ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. -- `tasks/`์—๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ p5.js๋ฅผ ๋นŒ๋“œ, ๋ฐฐํฌ, ๋ฆด๋ฆฌ์Šค ํ•˜๋Š”๋ฐ์— ๊ด€๋ จ๋œ ์ž๋™ํ™” ๋œ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋“ค์ด ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. -- `tests/`๋Š” ๋‚ด์šฉ ์ˆ˜์ •์ด ์žˆ์–ด๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅํ•ด์ฃผ๋Š” ์œ ๋‹› ํ…Œ์ŠคํŠธ๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. -- `utils/`๋Š” ์ €์žฅ์†Œ์— ์œ ์šฉํ•  ์ˆ˜๋„ ์žˆ๋Š” ์ถ”๊ฐ€์ ์ธ ํŒŒ์ผ๋“ค์„ ๋‹ด๊ณ  ์žˆ๋Š”๋ฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋ฌด์‹œํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. - - - -# ๋ฌธ์„œํ™” - -๋ฌธ์„œํ™”๋Š” ๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๋‚ฎ์€ ํ’ˆ์งˆ์˜ ๋ฌธ์„œํ™”๋Š” ์ƒˆ๋กœ์šด ์ด์šฉ์ž์™€ ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๋“ค์˜ ์ง„์ž… ์žฅ๋ฒฝ์„ ๋†’์—ฌ ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ๋„๋ฅผ ์ €ํ•˜์‹œํ‚ต๋‹ˆ๋‹ค. [contributing_documentation.md](./contributing_documentation.md) ํŽ˜์ด์ง€๋Š” ๋ฌธ์„œํ™”๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์— ๊นŠ์ด ์žˆ๋Š” ๊ฐœ์š”๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. p5.js๋ฅผ ์œ„ํ•œ ๋ฌธ์„œํ™”๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณณ๋“ค์—์„œ ์ฃผ๋กœ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: - -- [p5js.org/reference](https://p5js.org/reference/)๋Š” ์†Œ์Šค ์ฝ”๋“œ์˜ [์ธ๋ผ์ธ ๋„ํ๋ฉ˜ํ…Œ์ด์…˜](./inline_documentation.md)์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ…์ŠคํŠธ ์„ค๋ช…, ํŒŒ๋ผ๋ฏธํ„ฐ, ์ฝ”๋“œ ์Šค๋‹ˆํŽซ ์˜ˆ์‹œ ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ์™€ ์ธ๋ผ์ธ ๋„ํ๋ฉ˜ํ…Œ์ด์…˜์„ ๊ธด๋ฐ€ํžˆ ์—ฐ๊ฒฐ์‹œํ‚ค๊ณ , ๋ฌธ์„œํ™”์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒŒ ์ฝ”๋“œ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ ๋งŒํผ์ด๋‚˜ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์„ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ผ์ธ ๋„ํ๋ฉ˜ํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋นŒ๋“œ ๋˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹ ์‚ฌ์ด์— ๋ฌธ์ œ๊ฐ€ ์—†์Œ์„ ํ™•์‹คํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ผ์ธ ๋„ํ๋ฉ˜ํ…Œ์ด์…˜๊ณผ ์˜ˆ์‹œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„  [inline_documentation.md](./inline_documentation.md) ํŽ˜์ด์ง€๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฑธ๋กœ ์‹œ์ž‘ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. -- [p5js.org/examples](http://p5js.org/examples)ํŽ˜์ด์ง€๋Š” p5.js๋ฅผ ํ•™์Šตํ•˜๋Š” ๋ฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด๊ฐ€ ๊ธด ์˜ˆ์‹œ๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋ฆฌ๋ทฐ์…˜์„ ์œ„ํ•ด์„œ๋Š” [adding_examples.md](https://github.com/processing/p5.js-website/blob/main/contributor_docs/Adding_examples.md) ํŽ˜์ด์ง€๋ฅผ ์‚ดํŽด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. -- [p5js.org/tutorials](https://p5js.org/tutorials)ํŽ˜์ด์ง€๋Š” p5.js์™€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐœ๋…์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํŠœํ† ๋ฆฌ์–ผ๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” [p5.js ์›น์‚ฌ์ดํŠธ์˜ ํŠœํ† ๋ฆฌ์–ผ์— ๋Œ€ํ•œ ํŠœํ† ๋ฆฌ์–ผ](https://p5js.org/learn/tutorial-guide.html)์„ ์‚ดํŽด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค! -- p5.js ์›น์‚ฌ์ดํŠธ๋Š” ํ˜„์žฌ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค์„ ์ง€์›ํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ตญ์ œํ™”(ํ˜น์€ ์ค„์—ฌ์„œ i18n)๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ฌธ์„œ๋Š” [i18n_contribution](https://github.com/processing/p5.js-website/blob/main/contributor_docs/i18n_contribution.md) ํŽ˜์ด์ง€์—์„œ ๋” ์ž์„ธํžˆ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - - - -# ๊นƒํ—ˆ๋ธŒ ์ด์Šˆ ํ๋ฆ„ - -* ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ์™€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค์€ [๊นƒํ—ˆ๋ธŒ ์ด์Šˆ](https://github.com/processing/p5.js/issues)๋“ค์„ ํ†ตํ•ด ์ถ”์ ๋ฉ๋‹ˆ๋‹ค. ์ด์Šˆ [๋ ˆ์ด๋ธ”](./issue_labels.md)๋“ค์€ ์ด์Šˆ๋“ค์„ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค๋ฉด [์ดˆ๋ณด์ž์—๊ฒŒ ์ ํ•ฉํ•œ ์ด์Šˆ๋“ค](https://github.com/processing/p5.js/labels/level%3Abeginner)์„ ๋ ˆ์ด๋ธ”๋ง ํ•˜๋Š” ์‹์ž…๋‹ˆ๋‹ค. - -* ์ด๋ฏธ ์ œ๊ธฐ๋œ ์ด์Šˆ ์ค‘์— ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์€ ๊ฒŒ ์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๋“ค์ด ์ง„ํ–‰ ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•˜๊ณ  ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋‹น ์ด์Šˆ์— ๋Œ“๊ธ€์„ ๋‹ฌ์•„์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. - -* ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค๋ฉด, p5.js ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— [ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋ฅผ ์ œ์ถœ](./preparing_a_pull_request.md)ํ•˜์‹ญ์‹œ์˜ค. PR์˜ ์„ค๋ช… ์นธ์— โ€œresolves #XXXXโ€(#XXXX๋ฅผ ํ•ด๊ฒฐํ•จ)๋ผ๊ณ  ์จ์„œ ํ•ด๊ฒฐํ•œ ์ด์Šˆ๋ฅผ ํƒœ๊ทธํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด PR์ด ํ•ด๋‹น ์ด์Šˆ๋ฅผ ๋‹ค๋ฃจ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์™„์ „ํžˆ ํ•ด๊ฒฐํ•˜์ง€๋Š” ๋ชปํ•˜๋Š” ๊ฑฐ๋ผ๋ฉด(์ฆ‰, ์—ฌ๋Ÿฌ๋ถ„์˜ PR์ด merge ๋˜๊ณ  ๋‚˜์„œ๋„ ์ด์Šˆ๊ฐ€ ์—ด๋ ค ์žˆ์–ด์•ผ ํ•œ๋‹ค๋ฉด), โ€œaddresses #XXXXโ€(#XXXX๋ฅผ ๋‹ค๋ฃธ)์ด๋ผ๊ณ  ์จ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. - -* ๋งŒ์•ฝ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๊ฑฐ๋‚˜ ์ƒˆ๋กญ๊ฒŒ ๋”ํ•˜๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด์Šˆ๋ฅผ ๋จผ์ € ์ œ์ถœํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด์Šˆ๋ฅผ ์ œ์ถœํ•˜์ง€ ์•Š๊ณ  ์ˆ˜์ • ์‚ฌํ•ญ์ด๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ œ์ถœํ•ด๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ์ˆ˜๋ฝํ•˜๊ธฐ ์–ด๋ ค์šธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ด์Šˆ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ํ•ด๋‹น ์ด์Šˆ๋ฅผ ๋‹ค๋ค„๋„ ๊ดœ์ฐฎ๋‹ค๋Š” ๊ฑธ ํ™•์ธํ–ˆ๋‹ค๋ฉด, ์œ„์˜ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ์„œ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์น˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ปจํŠธ๋ฆฌ๋ทฐ์…˜์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - -* ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ๋ฅผ ์žฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๋ฒ„์ „ ๋ฒˆํ˜ธ ํ˜น์€ ์žฌํ˜„ ์•ˆ๋‚ด์„œ์™€ ๊ฐ™์€ ์ฃผ์š” ์ •๋ณด๋“ค์„ ์š”์ฒญํ•˜๋Š” ๋“ฑ ์ด์Šˆ๋“ค์„ ์„ ๋ณ„ํ•˜๋Š” ์ž‘์—…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ์— ๊ฐ€์žฅ ์šฉ์ดํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” [์ฝ”๋“œ ํŠธ๋ฆฌ์•„์ง€(CodeTriage)์—์„œ p5.js๋ฅผ ๊ตฌ๋…](https://www.codetriage.com/processing/p5.js)ํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค. [![Open Source Helpers](https://www.codetriage.com/processing/p5.js/badges/users.svg)](https://www.codetriage.com/processing/p5.js) - -* [organization.md](https://github.com/processing/p5.js/blob/main/contributor_docs/organization.md) ํŒŒ์ผ์€ ์ด์Šˆ๋“ค์ด ์–ด๋–ป๊ฒŒ ์ฒด๊ณ„ํ™” ๋  ์ˆ˜ ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ์— ๋Œ€ํ•œ ์˜์‚ฌ๊ฒฐ์ • ๊ณผ์ •์€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”์ง€์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ๊ฐœ์š”๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์–ผ๋งˆ๋“ ์ง€ ๊ธฐ์—ฌํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. - - - -# ๊ฐœ๋ฐœ ๊ณผ์ • - -๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ผ๋Š” ๊ฒŒ ์ฒ˜์Œ์—๋Š” ์•ฝ๊ฐ„ ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋А๋ผ๋Š” ๊ฑด ์—ฌ๋Ÿฌ๋ถ„ ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ, ์ฒ˜์Œ์—” ๋ชจ๋‘๊ฐ€ ํ˜ผ๋ž€์„ ๊ฒช๊ณค ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ‘์„ ๋ณด์‹œ๋ฉด ์…‹์—… ๊ณผ์ •์„ ์ฐจ๋ก€ ์ฐจ๋ก€ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์งˆ๋ฌธ์ด ์žˆ๋‹ค๋ฉด [ํฌ๋Ÿผ](https://discourse.processing.org/c/p5js)์— ๋ฌผ์–ด๋ณด๊ฑฐ๋‚˜ ๋ง‰ํžŒ ๋ถ€๋ถ„์„ ์„ค๋ช…ํ•˜๋Š” [์ด์Šˆ](https://github.com/processing/p5.js/issues)๋ฅผ ์ œ์ถœํ•˜๋ฉด ์ €ํฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ํ•œ์˜ ๋„์›€์„ ๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. - -์•„๋ž˜ ์ ˆ์ฐจ๋Š” [์ฝ”๋”ฉ ํŠธ๋ ˆ์ธ(The Coding Train)์˜ ๋น„๋””์˜ค ๊ฐ•์˜](https://youtu.be/Rr3vLyP1Ods)์—์„œ๋„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.๐Ÿš‹๐ŸŒˆ - - - -1. [node.js](http://nodejs.org/)๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”. node.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ž๋™์ ์œผ๋กœ [npm](https://www.npmjs.org) ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋„ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. - -2. ๋ณธ์ธ์˜ ๊นƒํ—ˆ๋ธŒ ๊ณ„์ •์— [p5.js ์ €์žฅ์†Œ](https://github.com/processing/p5.js)๋ฅผ [ํฌํฌ](https://help.github.com/articles/fork-a-repo) ํ•˜์‹ญ์‹œ์˜ค. - -3. ํฌํฌ ๋œ ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— [ํด๋ก ](https://help.github.com/articles/cloning-a-repository/) ํ•˜์‹ญ์‹œ์˜ค. - - ```shell - $ git clone https://github.com/YOUR_USERNAME/p5.js.git - ``` - -4. ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ๋“ค์–ด๊ฐ€ npm์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋””ํŽœ๋˜์‹œ๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค. - - ```shell - $ cd p5.js - $ npm ci - ``` - -5. ์ด์ œ [Grunt](https://gruntjs.com/)๊ฐ€ ์„ค์น˜๋˜์—ˆ์„ํ…๋ฐ, ์†Œ์Šค ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - - ```shell - $ npm run grunt - ``` - -๋งŒ์•ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŒŒ์ผ์„ ๊ณ„์†ํ•ด์„œ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์‚ฌ์ „์— ์ˆ˜๋™์œผ๋กœ ์ผ์ผ์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ์†Œ์Šค ํŒŒ์ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์ ์œผ๋กœ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์ค„ ์ˆ˜ ์žˆ๋„๋ก `npm run dev`๋ฅผ ์‹คํ–‰ ํ•˜๋Š” ๊ฒŒ ๋‚˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. - -6. ๋กœ์ปฌ์—์„œ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , ๊นƒ(Git)์œผ๋กœ [์ปค๋ฐ‹](https://help.github.com/articles/github-glossary/#commit) ํ•˜์‹ญ์‹œ์˜ค. - - ```shell - $ git add -u - $ git commit -m "YOUR COMMIT MESSAGE" - ``` - -7. ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ์—†์Œ์„ ํ™•์ธํ•˜๊ณ , ๊ณ ์žฅ ๋ฐ ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด `npm run grunt`๋ฅผ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. - -8. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊นƒํ—ˆ๋ธŒ ํฌํฌ์— [ํ‘ธ์‹œ](https://help.github.com/articles/github-glossary/#push) ํ•˜์‹ญ์‹œ์˜ค. - - ```shell - $ git push - ``` - -9. ๋ชจ๋“  ๊ฒŒ ์ค€๋น„๋˜์—ˆ๋‹ค๋ฉด, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ [ํ’€ ๋ฆฌํ€˜์ŠคํŠธ](https://help.github.com/articles/creating-a-pull-request)๋กœ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค. - - - -# ์ปค๋ฐ‹์ด ๊ฑฐ์ ˆ ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ - -p5.js ์ฝ”๋“œ ๋ฒ ์ด์Šค์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฐœ๋ฐœ์ž ํˆด๋“ค์€ ์–ด๋–ค ๊ฒƒ๋“ค์— ๋Œ€ํ•ด ์ผ๋ถ€๋Ÿฌ ๋งค์šฐ ์—„๊ฒฉํ•œ ๊ธฐ์ค€์„ ์ ์šฉํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฑด ์ข‹์€ ๊ฒ๋‹ˆ๋‹ค! ์ด๋Š” ๋ชจ๋“  ๊ฑธ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ณ , ๊ทœ์œจ์ด ์ง€์ผœ์ง€๋„๋ก ๋„์šธ ๊ฒ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด ๋ญ”๊ฐ€๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ๋งŒ๋“ค์—ˆ๋˜ ์ปค๋ฐ‹์ด ๊ฑฐ์ ˆ ๋‹นํ•  ์ˆ˜๋„ ์žˆ์Œ์„ ์˜๋ฏธํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ๋‚™๋‹ดํ•˜์ง€๋Š” ๋ง์•„์ฃผ์„ธ์š”. ์‹ฌ์ง€์–ด ๊ฒฝํ—˜ ๋งŽ์€ p5.js ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ปค๋ฐ‹๋„ ์ข…์ข… ๊ฑฐ์ ˆ ๋‹นํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต์€ ์ฝ”๋“œ ๋ฌธ๋ฒ• ์•„๋‹ˆ๋ฉด ์œ ๋‹› ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. - -## ์ฝ”๋“œ ๋ฌธ๋ฒ• - -p5.js๋Š” ๊น”๋”ํ•˜๊ณ  ์ผ๊ด€์„ฑ ์žˆ๋Š” ์Šคํƒ€์ผ์˜ ์ฝ”๋“œ ๋ฌธ๋ฒ•์„ ์š”๊ตฌํ•˜๊ธฐ์—, [Prettier](https://prettier.io/)์™€ [ESlint](https://eslint.org/)๋ผ๋Š” ํˆด์˜ ์‚ฌ์šฉ์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ์ปค๋ฐ‹์„ ํ•˜๊ธฐ ์ „์— ํŠน์ • ์Šคํƒ€์ผ ๊ทœ์น™์„ ์ ๊ฒ€ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ์—๋””ํ„ฐ์— [ESlint ํ”Œ๋Ÿฌ๊ทธ์ธ](https://eslint.org/docs/user-guide/integrations#editors)์„ ์„ค์น˜ํ•˜๋ฉด ํƒ€์ดํ•‘ ํ•จ๊ณผ ๋™์‹œ์— ์˜ค๋ฅ˜๋ฅผ ํ•˜์ด๋ผ์ดํŠธ ํ•ด์ค๋‹ˆ๋‹ค. ์ฝ”๋“œ ์Šคํƒ€์ผ์— ๊ด€ํ•ด์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์œ ์—ฐ์„ฑ๊ณผ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜๋ฅผ ๋‚ด๋Š”๋ฐ, ์ด๋Š” ์ฐธ์—ฌ์™€ ๊ธฐ์—ฌ์˜ ์žฅ๋ฒฝ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. - -์—๋Ÿฌ๋ฅผ ํฌ์ฐฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”(`$` ํ”„๋กฌํ”„ํŠธ๋Š” ์ž…๋ ฅํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค): - -```shell -$ npm run lint -``` - -์–ด๋–ค ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋Š” ์ž๋™์ ์œผ๋กœ ๊ณ ์ณ์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค: - -```shell -$ npm run lint:fix -``` - -ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ์Šคํƒ€์ผ์„ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒŒ ์„ ํ˜ธ๋˜๋Š”๊ฒŒ ๋ณดํ†ต์ด์ง€๋งŒ, [๊ฐ€๋”์€](https://github.com/processing/p5.js/search?utf8=%E2%9C%93&q=prettier-ignore&type=) ๋‹ค๋ฅธ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š”, Prettier์˜ `// prettier-ignore` ์ฃผ์„์„ ์ด์šฉํ•ด [์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌ](https://prettier.io/docs/en/ignore.html)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์š”๊ตฌ๋˜๋Š” ์Šคํƒ€์ผ ์„ ํ˜ธ ์‚ฌํ•ญ๋“ค์€ ๊ทธ๋Ÿด๋งŒํ•œ ์ด์œ ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ๋ฅผ ๋งŒ๋“ค์ง€ ๋ง์•„์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. - -์—ฌ๊ธฐ ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ทœ์น™์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์š”์•ฝ๋ณธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด ๋ชฉ๋ก์ด ์ „๋ถ€๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— [.prettierrc](https://github.com/processing/p5.js/blob/main/.prettierrc)์™€ [.eslintrc](https://github.com/processing/p5.js/blob/main/.eslintrc) ํŒŒ์ผ์˜ ์ „์ฒด ๋ชฉ๋ก์„ ์ฐธ๊ณ  ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. -* ES6 ์ฝ”๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. - -* (ํฐ ๋”ฐ์˜ดํ‘œ ๋ณด๋‹ค๋Š”) ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. - -* ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” ์ŠคํŽ˜์ด์Šค ๋‘ ๊ฐœ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. - -* ์ฝ”๋“œ์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜๋“ค์€ ์ ์–ด๋„ ํ•œ ๋ฒˆ์€ ์‚ฌ์šฉ๋˜๋˜๊ฐ€, ์•„๋‹ˆ๋ฉด ์™„์ „ํžˆ ์—†์• ์•ผ ํ•ฉ๋‹ˆ๋‹ค. - -* x == true ํ˜น์€ x == false๋กœ ๋น„๊ต๋ฌธ์„ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๊ฒƒ ๋Œ€์‹  (x) ๋‚˜ (!x)๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. x == true๋Š” ๋ถ„๋ช…ํžˆ if (x) ์™€๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค! ํ—ท๊ฐˆ๋ฆด ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋„(null)๊ณผ ๋น„๊ตํ•˜๊ณ , ์ˆซ์ž๋ฅผ 0์—, ๋ฌธ์ž์—ด(string)์„ โ€œโ€๊ณผ ๋น„๊ตํ•˜์‹ญ์‹œ์˜ค. - -* ์ž‘์„ฑํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ชจํ˜ธํ•˜๊ฑฐ๋‚˜ ๋ณต์žกํ•œ ๊ฒฝ์šฐ ์ฃผ์„์„ ๋‹ต๋‹ˆ๋‹ค. - -* ๋” ๋งŽ์€ ์Šคํƒ€์ผ๋ง ํŒ์„ ์ฐธ๊ณ ํ•˜๊ธฐ ์œ„ํ•ด์„  [๋ชจ์งˆ๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ์Šต(Mozilla JS practice)](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#JavaScript_practices)์„ ๋ณด์‹ญ์‹œ์˜ค. - - - -## ์œ ๋‹› ํ…Œ์ŠคํŠธ - -์œ ๋‹› ํ…Œ์ŠคํŠธ๋ž€ ์ฃผ๋…ผ๋ฆฌ์™€ ์„ฑ๋Šฅ ๊ฒ€์ฆ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ž‘์€ ๊ทœ๋ชจ์˜ ์ฝ”๋“œ๋“ค์ž…๋‹ˆ๋‹ค. [unit_testing.md](./unit_testing.md) ํŽ˜์ด์ง€์— ์œ ๋‹› ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์ด p5.js๋ฅผ ์œ„ํ•œ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•œ๋‹ค๋ฉด, ์•„๋งˆ๋„ ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ๊ทธ๊ฑด ์–ด๋”˜๊ฐ€์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ œ์ถœํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. - -์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋””ํŽœ๋˜์‹œ๋“ค์„ ๋ฐ˜๋“œ์‹œ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - -```shell -$ npm ci -``` - -์ด๊ฒƒ์ด p5.js๋ฅผ ์œ„ํ•œ *๋ชจ๋“ * ๋””ํŽœ๋˜์‹œ๋“ค์„ ์„ค์น˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค; ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š”, ์œ ๋‹› ํ…Œ์ŠคํŒ…์— ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋””ํŽœ๋˜์‹œ๋“ค์€ ๋‹ค์Œ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค: - -- [Mocha](https://mochajs.org/): p5.js๋ฅผ ์œ„ํ•œ, ๊ฐœ๋ณ„์ ์ธ ํ…Œ์ŠคํŠธ ํŒŒ์ผ๋“ค์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŒ… ํ”„๋ ˆ์ž„์›Œํฌ -- [mocha-chrome](https://github.com/shellscape/mocha-chrome): ๊ตฌ๊ธ€ ํฌ๋กฌ์„ ์ด์šฉํ•ด Mocha ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๋Š” ๋ชจ์ฐจ ํ”Œ๋Ÿฌ๊ทธ์ธ - -๋””ํŽœ๋˜์‹œ๋“ค์ด ์„ค์น˜๋˜๋ฉด, Grunt๋ฅผ ์ด์šฉํ•ด ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ์‹ญ์‹œ์˜ค. - -```shell -$ grunt -``` - -๋•Œ๋ก  ์ปค๋งจ๋“œ ๋ผ์ธ ๋Œ€์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฒƒ๋„ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„ , ๋จผ์ € ์„œ๋ฒ„ [์—ฐ๊ฒฐ](https://github.com/gruntjs/grunt-contrib-connect)์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค: - -```shell -$ npm run dev -``` - -์„œ๋ฒ„๊ฐ€ ๋Œ์•„๊ฐ€๋ฉด, ๋ธŒ๋ผ์šฐ์ €์—์„œ `test/test.html`์„ ์—ด ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค. - -์œ ๋‹› ํ…Œ์ŠคํŒ…์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์„ค๋ช…์€ p5.js ๋ฌธ์„œ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, ๊ฐ„๋žตํ•˜๊ฒŒ๋งŒ ๋งํ•˜์ž๋ฉด src/ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ์— ๊ฐ€ํ•ด์ง„ ์ค‘๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด๋‚˜, ์ƒˆ๋กœ ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์€ Mocha๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ํŒŒ์ผ์ด test/ ๋””๋ ‰ํ† ๋ฆฌ์— ๋™๋ฐ˜๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” ํ–ฅํ›„ ๋‚˜์˜ฌ ๋ชจ๋“  ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์ž‘๋™ํ•  ๊ฒƒ์ž„์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, [Chai.js ๋ ˆํผ๋Ÿฐ์Šค](http://www.chaijs.com/api/assert/)๋ฅผ ์ฐธ๊ณ ํ•ด ์–ด์„œ์…˜(assertion) ๋ฉ”์„ธ์ง€๋ฅผ ๊ตฌ์„ฑํ•จ์œผ๋กœ์จ ๋ฏธ๋ž˜์— ํ…Œ์ŠคํŠธ๋กœ ์žก์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋“ค์ด ์ผ๊ด€์„ฑ ์žˆ๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ์‹œ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. - - - -# ๊ธฐํƒ€ - -- [contributor_docs/](https://github.com/processing/p5.js/tree/main/contributor_docs) ํด๋”์—๋Š” ์‚ดํŽด๋ณผ๋งŒํ•œ ๋‹ค๋ฅธ ํŒŒ์ผ๋“ค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์ˆ ์ ์ธ ํ˜น์€ ๋น„๊ธฐ์ˆ ์ ์ธ ๊ฐ ์˜์—ญ๊ณผ ๊ด€๊ณ„๋œ ๊ฒƒ๋“ค์ž…๋‹ˆ๋‹ค. -- p5.js ๊ฐœ๋ฐœ ์ž‘์—… ํ๋ฆ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ์™€ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•œ ์˜์ƒ ์„ค๋ช…์€ [Looking Inside p5.js](https://www.luisapereira.net/teaching/materials/processing-foundation)์—์„œ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- [์ฝ”๋”ฉ ํŠธ๋ ˆ์ธ์˜ ์ด ๋™์˜์ƒ](https://youtu.be/Rr3vLyP1Ods)๐Ÿš‹๐ŸŒˆ์—์„œ๋Š” p5.js์— ๊ธฐ์ˆ ์  ๊ธฐ์—ฌ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. -- p5.js [๋„์ปค(Docker) ์ด๋ฏธ์ง€](https://github.com/toolness/p5.js-docker)๋Š” [๋„์ปค](https://www.docker.com/)์— ๋งˆ์šดํŠธ ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” [Node](https://nodejs.org/) ๊ฐ™์€ ํ•„์ˆ˜ ์š”์†Œ๋“ค์„ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•  ํ•„์š” ์—†์ด, ๊ทธ๋ฆฌ๊ณ  ๋„์ปค ์„ค์น˜๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“ ์ง€ ํ˜ธ์ŠคํŠธ ์šด์˜ ์ฒด์ œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ ๋„ p5.js๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -- p5.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋นŒ๋“œ ๊ณผ์ •์€ [json ๋ฐ์ดํ„ฐ ํŒŒ์ผ](https://p5js.org/reference/data.json)์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด๋Š” p5.js์˜ ๊ณต๊ฐœ API๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์—๋””ํ„ฐ์—์„œ p5.js ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์™„์„ฑํ•˜๋Š” ๋“ฑ์˜ ์ž๋™ํ™”๋œ ํˆด๋ง์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ p5.js ์›น์‚ฌ์ดํŠธ์—์„œ ํ˜ธ์ŠคํŠธ ๋˜์ง€๋งŒ, ์ €์žฅ์†Œ์˜ ์ผ๋ถ€๋กœ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. -- p5.js๋Š” ์ตœ๊ทผ์— [ES6](https://en.wikipedia.org/wiki/ECMAScript#6th_Edition_-_ECMAScript_2015)๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€ํ™”๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ธฐ์—ฌ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด์„  [ES6 ์ฑ„ํƒ](./es6-adoption.md)์„ ๋ฐฉ๋ฌธํ•ด์ฃผ์‹ญ์‹œ์˜ค. + + +# ๐ŸŒธย ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๐ŸŒบ + +p5.js์— ๊ธฐ์—ฌํ•˜๋Š”๋ฐ์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ๋ชจ๋“  ํ˜•ํƒœ์˜ ๊ธฐ์—ฌ๋ฅผ ์†Œ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉฐ โ€œ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐโ€์˜ ์˜๋ฏธ๋ฅผ ์ตœ๋Œ€ํ•œ ๋„“์€ ๋ฒ”์œ„๋กœ ํ™•์žฅํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌธ์„œํ™”, ๊ฐ•์˜, ์ฝ”๋“œ ์ž‘์„ฑ, ์ฐฝ์ž‘ ํ™œ๋™, ๊ธ€์“ฐ๊ธฐ, ๋””์ž์ธ, ์šด๋™, ์กฐ์งํ™”, ํ๋ ˆ์ดํŒ… ๋ฐ ๊ทธ ์™ธ์—๋„ ์—ฌ๋Ÿฌ๋ถ„์ด ์ƒ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฑธ ํฌ๊ด„ํ•ฉ๋‹ˆ๋‹ค. [์šฐ๋ฆฌ์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ํŽ˜์ด์ง€](https://p5js.org/community/#contribute)์—๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ฐธ์—ฌํ•˜๊ณ  ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค์— ๋Œ€ํ•œ ๊ฐœ์š”๊ฐ€ ์ œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์ธ ๊ธฐ์—ฌ๋ฅผ ํ•˜๊ณ ์ž ํ•˜์‹ ๋‹ค๋ฉด, ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ ์ด ๊ธ€์„ ์กฐ๊ธˆ ๋” ์ฝ์–ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. + +์ด ํ”„๋กœ์ ํŠธ๋Š” [์˜ฌ-์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ์Šค(all-contributors)](https://github.com/kentcdodds/all-contributors) ์‚ฌ์–‘์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. [์•ˆ๋‚ด ์‚ฌํ•ญ](https://github.com/processing/p5.js/issues/2309)์„ ๋”ฐ๋ผ [๋ฆฌ๋“œ๋ฏธ(readme)](https://github.com/processing/p5.js/blob/main/README.md#contributors)์— ๋ณธ์ธ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”! ํ˜น์€ [๊นƒํ—ˆ๋ธŒ ์ด์Šˆ](https://github.com/processing/p5.js/issues)์— ์—ฌ๋Ÿฌ๋ถ„์˜ ์ปจํŠธ๋ฆฌ๋ทฐ์…˜์„ ๋Œ“๊ธ€๋กœ ๋‹ฌ์•„์ฃผ์‹œ๋ฉด ์ €ํฌ๊ฐ€ ์ถ”๊ฐ€ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. + + + +# ์ฝ”๋“œ ๋ณด๊ด€ ์œ„์น˜ + +p5.js ํ”„๋กœ์ ํŠธ์˜ ํ•ต์‹ฌ์ ์ธ ์ €์žฅ์†Œ๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค: + +- [p5.js](https://github.com/processing/p5.js): ๋ณธ ์ €์žฅ์†Œ์—๋Š” p5.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ณด๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. [์œ ์ €๋“ค์ด ๋ณด๊ฒŒ ๋˜๋Š” p5.js์˜ ๋ ˆํผ๋Ÿฐ์Šค ๋งค๋‰ด์–ผ](https://p5js.org/reference/) ๋˜ํ•œ ์ด ์†Œ์Šค ์ฝ”๋“œ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” [JSDoc](http://usejsdoc.org/) ๊ฐ์ฃผ์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ณธ ์ €์žฅ์†Œ๋Š” [๋กœ๋ Œ ๋ฆฌ ๋งฅ์นด์‹œ(Lauren Lee McCarthy)](https://github.com/lmccart)๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. +- [p5.js-website](https://github.com/processing/p5.js-website): ๋ณธ ์ €์žฅ์†Œ์—๋Š” ๋ ˆํผ๋Ÿฐ์Šค ๋งค๋‰ด์–ผ์„ ์ œ์™ธํ•œ [p5.js ์›น์‚ฌ์ดํŠธ](http://p5js.org)์˜ ์ฝ”๋“œ๊ฐ€ ์ „๋ถ€ ๋ณด๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ์ €์žฅ์†Œ๋Š” [๋กœ๋ Œ ๋ฆฌ ๋งฅ์นด์‹œ(Lauren Lee McCarthy)](https://github.com/lmccart)๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. +- [p5.js-sound](https://github.com/processing/p5.js-sound): ๋ณธ ์ €์žฅ์†Œ์—๋Š” p5.sound.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ณด๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ์ €์žฅ์†Œ๋Š” [์ œ์ด์Šจ ์‹œ๊ฐˆ(Jason Sigal)](https://github.com/therewasaguy)์ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. +- [p5.js-web-editor](https://github.com/processing/p5.js-web-editor): ๋ณธ ์ €์žฅ์†Œ์—๋Š” [p5.js ์›น ์—๋””ํ„ฐ](https://editor.p5js.org)์˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ณด๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ์ €์žฅ์†Œ๋Š” [์บ์‹œ ํƒ€๋ผ์ผ€์ง€์–ธ(Cassie Tarakajian)](https://github.com/catarak)์ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ „์˜ [p5.js ์—๋””ํ„ฐ](https://github.com/processing/p5.js-editor)๋Š” ์ด์ œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค. +- [p5.accessibility](https://github.com/processing/p5.accessibility): ๋งน์ธ ๋ฐ ์‹œ๊ฐ ์žฅ์• ์ธ๋“ค์ด ์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ p5 ์บ”๋ฒ„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. + + + +# ์ €์žฅ์†Œ ํŒŒ์ผ ๊ตฌ์กฐ + +๋ณธ ํ”„๋กœ์ ํŠธ์—” ๋งŽ์€ ํŒŒ์ผ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์— ๊ทธ ๊ฐ„๋žตํ•œ ๊ฐœ์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ—ท๊ฐˆ๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ €์žฅ์†Œ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ์ดํ•ดํ•  ํ•„์š”๊นŒ์ง€๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•œ ์˜์—ญ(์ธ๋ผ์ธ ๋„ํ๋ฉ˜ํ…Œ์ด์…˜์„ ๊ณ ์น˜๋Š” ๊ฒƒ์ด ํ•œ ์˜ˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค)์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ฐจ๊ทผ์ฐจ๊ทผ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ฑธ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฃจ์ด์‚ฌ ํŽ˜๋ ˆ์ด๋ผ(Luisa Pereira)์˜ ๊ฐ•์˜ [Looking Inside p5.js](https://www.luisapereira.net/teaching/materials/processing-foundation)์— p5.js ์ž‘์—… ํ๋ฆ„์— ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ์™€ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•œ ์†Œ๊ฐœ๋ฅผ ๋™์˜์ƒ์œผ๋กœ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +- `contributor_docs/`์—๋Š” ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๋“ค์„ ์œ„ํ•œ ๊ด€๋ก€์™€ ์›์น™์„ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. +- `docs/`์—๋Š” ์‚ฌ์‹ค ๋ฌธ์„œ๋“ค์ด ์—†์Šต๋‹ˆ๋‹ค! ๋Œ€์‹ , [์˜จ๋ผ์ธ ๋ ˆํผ๋Ÿฐ์Šค ๋งค๋‰ด์–ผ](https://p5js.org/reference)์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. +- `lib/`์—๋Š” ๋น„์–ด ์žˆ๋Š” ์˜ˆ์‹œ ํŒŒ์ผ๊ณผ [p5.js-sound ์ €์žฅ์†Œ](https://github.com/processing/p5.js-sound)์—์„œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ •๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๋Š” p5.sound ์• ๋“œ์˜จ์ด ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๊ณณ์€ ๋นŒ๋“œ ๋œ p5.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ [Grunt](https://gruntjs.com/)๋ฅผ ์ด์šฉํ•ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ ๋œ ํ›„์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜๋Š” ๊ณณ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•  ๋•Œ ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ๋กœ ๋”ฐ๋กœ ํŒŒ์ผ์„ ์ด๋™์‹œํ‚ฌ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. +- `src/` ์—๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š”๋ฐ, ์ด๋“ค์€ ๋ถ„๋ฆฌ๋œ ๋ชจ๋“ˆ์˜ ํ˜•ํƒœ๋กœ ์ฃผ์ œ๋ณ„๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ p5.js๋ฅผ ์ˆ˜์ •ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์—ฌ๊ธฐ ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ์— ์ž‘์—…์„ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํด๋” ์•ˆ์—๋Š” ๊ฐ๊ฐ์˜ ๋ฆฌ๋“œ๋ฏธ ํŒŒ์ผ(readme.md)์ด ์žˆ์œผ๋‹ˆ ์ด๋ฅผ ์ฐธ๊ณ ํ•ด ์ž‘์—… ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. +- `tasks/`์—๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ p5.js๋ฅผ ๋นŒ๋“œ, ๋ฐฐํฌ, ๋ฆด๋ฆฌ์Šค ํ•˜๋Š”๋ฐ์— ๊ด€๋ จ๋œ ์ž๋™ํ™” ๋œ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋“ค์ด ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. +- `tests/`๋Š” ๋‚ด์šฉ ์ˆ˜์ •์ด ์žˆ์–ด๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅํ•ด์ฃผ๋Š” ์œ ๋‹› ํ…Œ์ŠคํŠธ๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. +- `utils/`๋Š” ์ €์žฅ์†Œ์— ์œ ์šฉํ•  ์ˆ˜๋„ ์žˆ๋Š” ์ถ”๊ฐ€์ ์ธ ํŒŒ์ผ๋“ค์„ ๋‹ด๊ณ  ์žˆ๋Š”๋ฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋ฌด์‹œํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. + + + +# ๋ฌธ์„œํ™” + +๋ฌธ์„œํ™”๋Š” ๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๋‚ฎ์€ ํ’ˆ์งˆ์˜ ๋ฌธ์„œํ™”๋Š” ์ƒˆ๋กœ์šด ์ด์šฉ์ž์™€ ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๋“ค์˜ ์ง„์ž… ์žฅ๋ฒฝ์„ ๋†’์—ฌ ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ๋„๋ฅผ ์ €ํ•˜์‹œํ‚ต๋‹ˆ๋‹ค. [contributing_documentation.md](./contributing_documentation.md) ํŽ˜์ด์ง€๋Š” ๋ฌธ์„œํ™”๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์— ๊นŠ์ด ์žˆ๋Š” ๊ฐœ์š”๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. p5.js๋ฅผ ์œ„ํ•œ ๋ฌธ์„œํ™”๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณณ๋“ค์—์„œ ์ฃผ๋กœ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: + +- [p5js.org/reference](https://p5js.org/reference/)๋Š” ์†Œ์Šค ์ฝ”๋“œ์˜ [์ธ๋ผ์ธ ๋„ํ๋ฉ˜ํ…Œ์ด์…˜](./inline_documentation.md)์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ…์ŠคํŠธ ์„ค๋ช…, ํŒŒ๋ผ๋ฏธํ„ฐ, ์ฝ”๋“œ ์Šค๋‹ˆํŽซ ์˜ˆ์‹œ ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ์™€ ์ธ๋ผ์ธ ๋„ํ๋ฉ˜ํ…Œ์ด์…˜์„ ๊ธด๋ฐ€ํžˆ ์—ฐ๊ฒฐ์‹œํ‚ค๊ณ , ๋ฌธ์„œํ™”์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒŒ ์ฝ”๋“œ์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ ๋งŒํผ์ด๋‚˜ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์„ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ผ์ธ ๋„ํ๋ฉ˜ํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋นŒ๋“œ ๋˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹ ์‚ฌ์ด์— ๋ฌธ์ œ๊ฐ€ ์—†์Œ์„ ํ™•์‹คํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ผ์ธ ๋„ํ๋ฉ˜ํ…Œ์ด์…˜๊ณผ ์˜ˆ์‹œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„  [inline_documentation.md](./inline_documentation.md) ํŽ˜์ด์ง€๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฑธ๋กœ ์‹œ์ž‘ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. +- [p5js.org/examples](http://p5js.org/examples)ํŽ˜์ด์ง€๋Š” p5.js๋ฅผ ํ•™์Šตํ•˜๋Š” ๋ฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด๊ฐ€ ๊ธด ์˜ˆ์‹œ๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋ฆฌ๋ทฐ์…˜์„ ์œ„ํ•ด์„œ๋Š” [adding_examples.md](https://github.com/processing/p5.js-website/blob/main/contributor_docs/Adding_examples.md) ํŽ˜์ด์ง€๋ฅผ ์‚ดํŽด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. +- [p5js.org/tutorials](https://p5js.org/tutorials)ํŽ˜์ด์ง€๋Š” p5.js์™€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐœ๋…์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํŠœํ† ๋ฆฌ์–ผ๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” [p5.js ์›น์‚ฌ์ดํŠธ์˜ ํŠœํ† ๋ฆฌ์–ผ์— ๋Œ€ํ•œ ํŠœํ† ๋ฆฌ์–ผ](https://p5js.org/learn/tutorial-guide.html)์„ ์‚ดํŽด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค! +- p5.js ์›น์‚ฌ์ดํŠธ๋Š” ํ˜„์žฌ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค์„ ์ง€์›ํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ตญ์ œํ™”(ํ˜น์€ ์ค„์—ฌ์„œ i18n)๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ฌธ์„œ๋Š” [i18n_contribution](https://github.com/processing/p5.js-website/blob/main/contributor_docs/i18n_contribution.md) ํŽ˜์ด์ง€์—์„œ ๋” ์ž์„ธํžˆ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + + + +# ๊นƒํ—ˆ๋ธŒ ์ด์Šˆ ํ๋ฆ„ + +* ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ์™€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉด ํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค์€ [๊นƒํ—ˆ๋ธŒ ์ด์Šˆ](https://github.com/processing/p5.js/issues)๋“ค์„ ํ†ตํ•ด ์ถ”์ ๋ฉ๋‹ˆ๋‹ค. ์ด์Šˆ [๋ ˆ์ด๋ธ”](./issue_labels.md)๋“ค์€ ์ด์Šˆ๋“ค์„ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค๋ฉด [์ดˆ๋ณด์ž์—๊ฒŒ ์ ํ•ฉํ•œ ์ด์Šˆ๋“ค](https://github.com/processing/p5.js/labels/level%3Abeginner)์„ ๋ ˆ์ด๋ธ”๋ง ํ•˜๋Š” ์‹์ž…๋‹ˆ๋‹ค. + +* ์ด๋ฏธ ์ œ๊ธฐ๋œ ์ด์Šˆ ์ค‘์— ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์€ ๊ฒŒ ์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๋“ค์ด ์ง„ํ–‰ ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•˜๊ณ  ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋‹น ์ด์Šˆ์— ๋Œ“๊ธ€์„ ๋‹ฌ์•„์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. + +* ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค๋ฉด, p5.js ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— [ํ’€ ๋ฆฌํ€˜์ŠคํŠธ(PR)๋ฅผ ์ œ์ถœ](./preparing_a_pull_request.md)ํ•˜์‹ญ์‹œ์˜ค. PR์˜ ์„ค๋ช… ์นธ์— โ€œresolves #XXXXโ€(#XXXX๋ฅผ ํ•ด๊ฒฐํ•จ)๋ผ๊ณ  ์จ์„œ ํ•ด๊ฒฐํ•œ ์ด์Šˆ๋ฅผ ํƒœ๊ทธํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด PR์ด ํ•ด๋‹น ์ด์Šˆ๋ฅผ ๋‹ค๋ฃจ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์™„์ „ํžˆ ํ•ด๊ฒฐํ•˜์ง€๋Š” ๋ชปํ•˜๋Š” ๊ฑฐ๋ผ๋ฉด(์ฆ‰, ์—ฌ๋Ÿฌ๋ถ„์˜ PR์ด merge ๋˜๊ณ  ๋‚˜์„œ๋„ ์ด์Šˆ๊ฐ€ ์—ด๋ ค ์žˆ์–ด์•ผ ํ•œ๋‹ค๋ฉด), โ€œaddresses #XXXXโ€(#XXXX๋ฅผ ๋‹ค๋ฃธ)์ด๋ผ๊ณ  ์จ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. + +* ๋งŒ์•ฝ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๊ฑฐ๋‚˜ ์ƒˆ๋กญ๊ฒŒ ๋”ํ•˜๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด์Šˆ๋ฅผ ๋จผ์ € ์ œ์ถœํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด์Šˆ๋ฅผ ์ œ์ถœํ•˜์ง€ ์•Š๊ณ  ์ˆ˜์ • ์‚ฌํ•ญ์ด๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ œ์ถœํ•ด๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ์ˆ˜๋ฝํ•˜๊ธฐ ์–ด๋ ค์šธ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ด์Šˆ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ํ•ด๋‹น ์ด์Šˆ๋ฅผ ๋‹ค๋ค„๋„ ๊ดœ์ฐฎ๋‹ค๋Š” ๊ฑธ ํ™•์ธํ–ˆ๋‹ค๋ฉด, ์œ„์˜ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ์„œ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์น˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ปจํŠธ๋ฆฌ๋ทฐ์…˜์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +* ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ๋ฅผ ์žฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๋ฒ„์ „ ๋ฒˆํ˜ธ ํ˜น์€ ์žฌํ˜„ ์•ˆ๋‚ด์„œ์™€ ๊ฐ™์€ ์ฃผ์š” ์ •๋ณด๋“ค์„ ์š”์ฒญํ•˜๋Š” ๋“ฑ ์ด์Šˆ๋“ค์„ ์„ ๋ณ„ํ•˜๋Š” ์ž‘์—…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ์— ๊ฐ€์žฅ ์šฉ์ดํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” [์ฝ”๋“œ ํŠธ๋ฆฌ์•„์ง€(CodeTriage)์—์„œ p5.js๋ฅผ ๊ตฌ๋…](https://www.codetriage.com/processing/p5.js)ํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค. [![Open Source Helpers](https://www.codetriage.com/processing/p5.js/badges/users.svg)](https://www.codetriage.com/processing/p5.js) + +* [organization.md](https://github.com/processing/p5.js/blob/main/contributor_docs/organization.md) ํŒŒ์ผ์€ ์ด์Šˆ๋“ค์ด ์–ด๋–ป๊ฒŒ ์ฒด๊ณ„ํ™” ๋  ์ˆ˜ ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ์— ๋Œ€ํ•œ ์˜์‚ฌ๊ฒฐ์ • ๊ณผ์ •์€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”์ง€์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ๊ฐœ์š”๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์–ผ๋งˆ๋“ ์ง€ ๊ธฐ์—ฌํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. + + + +# ๊ฐœ๋ฐœ ๊ณผ์ • + +๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ผ๋Š” ๊ฒŒ ์ฒ˜์Œ์—๋Š” ์•ฝ๊ฐ„ ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋А๋ผ๋Š” ๊ฑด ์—ฌ๋Ÿฌ๋ถ„ ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ, ์ฒ˜์Œ์—” ๋ชจ๋‘๊ฐ€ ํ˜ผ๋ž€์„ ๊ฒช๊ณค ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ‘์„ ๋ณด์‹œ๋ฉด ์…‹์—… ๊ณผ์ •์„ ์ฐจ๋ก€ ์ฐจ๋ก€ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์งˆ๋ฌธ์ด ์žˆ๋‹ค๋ฉด [ํฌ๋Ÿผ](https://discourse.processing.org/c/p5js)์— ๋ฌผ์–ด๋ณด๊ฑฐ๋‚˜ ๋ง‰ํžŒ ๋ถ€๋ถ„์„ ์„ค๋ช…ํ•˜๋Š” [์ด์Šˆ](https://github.com/processing/p5.js/issues)๋ฅผ ์ œ์ถœํ•˜๋ฉด ์ €ํฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ํ•œ์˜ ๋„์›€์„ ๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. + +์•„๋ž˜ ์ ˆ์ฐจ๋Š” [์ฝ”๋”ฉ ํŠธ๋ ˆ์ธ(The Coding Train)์˜ ๋น„๋””์˜ค ๊ฐ•์˜](https://youtu.be/Rr3vLyP1Ods)์—์„œ๋„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.๐Ÿš‹๐ŸŒˆ + + + +1. [node.js](http://nodejs.org/)๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”. node.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ž๋™์ ์œผ๋กœ [npm](https://www.npmjs.org) ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋„ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. + +2. ๋ณธ์ธ์˜ ๊นƒํ—ˆ๋ธŒ ๊ณ„์ •์— [p5.js ์ €์žฅ์†Œ](https://github.com/processing/p5.js)๋ฅผ [ํฌํฌ](https://help.github.com/articles/fork-a-repo) ํ•˜์‹ญ์‹œ์˜ค. + +3. ํฌํฌ ๋œ ๊นƒํ—ˆ๋ธŒ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— [ํด๋ก ](https://help.github.com/articles/cloning-a-repository/) ํ•˜์‹ญ์‹œ์˜ค. + + ```shell + $ git clone https://github.com/YOUR_USERNAME/p5.js.git + ``` + +4. ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ๋“ค์–ด๊ฐ€ npm์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋””ํŽœ๋˜์‹œ๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค. + + ```shell + $ cd p5.js + $ npm ci + ``` + +5. ์ด์ œ [Grunt](https://gruntjs.com/)๊ฐ€ ์„ค์น˜๋˜์—ˆ์„ํ…๋ฐ, ์†Œ์Šค ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + + ```shell + $ npm run grunt + ``` + +๋งŒ์•ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŒŒ์ผ์„ ๊ณ„์†ํ•ด์„œ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ์‚ฌ์ „์— ์ˆ˜๋™์œผ๋กœ ์ผ์ผ์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ์†Œ์Šค ํŒŒ์ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์ ์œผ๋กœ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์ค„ ์ˆ˜ ์žˆ๋„๋ก `npm run dev`๋ฅผ ์‹คํ–‰ ํ•˜๋Š” ๊ฒŒ ๋‚˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. + +6. ๋กœ์ปฌ์—์„œ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , ๊นƒ(Git)์œผ๋กœ [์ปค๋ฐ‹](https://help.github.com/articles/github-glossary/#commit) ํ•˜์‹ญ์‹œ์˜ค. + + ```shell + $ git add -u + $ git commit -m "YOUR COMMIT MESSAGE" + ``` + +7. ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ์—†์Œ์„ ํ™•์ธํ•˜๊ณ , ๊ณ ์žฅ ๋ฐ ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด `npm run grunt`๋ฅผ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. + +8. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊นƒํ—ˆ๋ธŒ ํฌํฌ์— [ํ‘ธ์‹œ](https://help.github.com/articles/github-glossary/#push) ํ•˜์‹ญ์‹œ์˜ค. + + ```shell + $ git push + ``` + +9. ๋ชจ๋“  ๊ฒŒ ์ค€๋น„๋˜์—ˆ๋‹ค๋ฉด, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ [ํ’€ ๋ฆฌํ€˜์ŠคํŠธ](https://help.github.com/articles/creating-a-pull-request)๋กœ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค. + + + +# ์ปค๋ฐ‹์ด ๊ฑฐ์ ˆ ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ + +p5.js ์ฝ”๋“œ ๋ฒ ์ด์Šค์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฐœ๋ฐœ์ž ํˆด๋“ค์€ ์–ด๋–ค ๊ฒƒ๋“ค์— ๋Œ€ํ•ด ์ผ๋ถ€๋Ÿฌ ๋งค์šฐ ์—„๊ฒฉํ•œ ๊ธฐ์ค€์„ ์ ์šฉํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฑด ์ข‹์€ ๊ฒ๋‹ˆ๋‹ค! ์ด๋Š” ๋ชจ๋“  ๊ฑธ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ณ , ๊ทœ์œจ์ด ์ง€์ผœ์ง€๋„๋ก ๋„์šธ ๊ฒ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด ๋ญ”๊ฐ€๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ๋งŒ๋“ค์—ˆ๋˜ ์ปค๋ฐ‹์ด ๊ฑฐ์ ˆ ๋‹นํ•  ์ˆ˜๋„ ์žˆ์Œ์„ ์˜๋ฏธํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ๋‚™๋‹ดํ•˜์ง€๋Š” ๋ง์•„์ฃผ์„ธ์š”. ์‹ฌ์ง€์–ด ๊ฒฝํ—˜ ๋งŽ์€ p5.js ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ปค๋ฐ‹๋„ ์ข…์ข… ๊ฑฐ์ ˆ ๋‹นํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต์€ ์ฝ”๋“œ ๋ฌธ๋ฒ• ์•„๋‹ˆ๋ฉด ์œ ๋‹› ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. + +## ์ฝ”๋“œ ๋ฌธ๋ฒ• + +p5.js๋Š” ๊น”๋”ํ•˜๊ณ  ์ผ๊ด€์„ฑ ์žˆ๋Š” ์Šคํƒ€์ผ์˜ ์ฝ”๋“œ ๋ฌธ๋ฒ•์„ ์š”๊ตฌํ•˜๊ธฐ์—, [Prettier](https://prettier.io/)์™€ [ESlint](https://eslint.org/)๋ผ๋Š” ํˆด์˜ ์‚ฌ์šฉ์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ์ปค๋ฐ‹์„ ํ•˜๊ธฐ ์ „์— ํŠน์ • ์Šคํƒ€์ผ ๊ทœ์น™์„ ์ ๊ฒ€ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ์—๋””ํ„ฐ์— [ESlint ํ”Œ๋Ÿฌ๊ทธ์ธ](https://eslint.org/docs/user-guide/integrations#editors)์„ ์„ค์น˜ํ•˜๋ฉด ํƒ€์ดํ•‘ ํ•จ๊ณผ ๋™์‹œ์— ์˜ค๋ฅ˜๋ฅผ ํ•˜์ด๋ผ์ดํŠธ ํ•ด์ค๋‹ˆ๋‹ค. ์ฝ”๋“œ ์Šคํƒ€์ผ์— ๊ด€ํ•ด์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์œ ์—ฐ์„ฑ๊ณผ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜๋ฅผ ๋‚ด๋Š”๋ฐ, ์ด๋Š” ์ฐธ์—ฌ์™€ ๊ธฐ์—ฌ์˜ ์žฅ๋ฒฝ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. + +์—๋Ÿฌ๋ฅผ ํฌ์ฐฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”(`$` ํ”„๋กฌํ”„ํŠธ๋Š” ์ž…๋ ฅํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค): + +```shell +$ npm run lint +``` + +์–ด๋–ค ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋Š” ์ž๋™์ ์œผ๋กœ ๊ณ ์ณ์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค: + +```shell +$ npm run lint:fix +``` + +ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ์Šคํƒ€์ผ์„ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒŒ ์„ ํ˜ธ๋˜๋Š”๊ฒŒ ๋ณดํ†ต์ด์ง€๋งŒ, [๊ฐ€๋”์€](https://github.com/processing/p5.js/search?utf8=%E2%9C%93&q=prettier-ignore&type=) ๋‹ค๋ฅธ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š”, Prettier์˜ `// prettier-ignore` ์ฃผ์„์„ ์ด์šฉํ•ด [์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌ](https://prettier.io/docs/en/ignore.html)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์š”๊ตฌ๋˜๋Š” ์Šคํƒ€์ผ ์„ ํ˜ธ ์‚ฌํ•ญ๋“ค์€ ๊ทธ๋Ÿด๋งŒํ•œ ์ด์œ ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ๋ฅผ ๋งŒ๋“ค์ง€ ๋ง์•„์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. + +์—ฌ๊ธฐ ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ทœ์น™์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์š”์•ฝ๋ณธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด ๋ชฉ๋ก์ด ์ „๋ถ€๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— [.prettierrc](https://github.com/processing/p5.js/blob/main/.prettierrc)์™€ [.eslintrc](https://github.com/processing/p5.js/blob/main/.eslintrc) ํŒŒ์ผ์˜ ์ „์ฒด ๋ชฉ๋ก์„ ์ฐธ๊ณ  ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. +* ES6 ์ฝ”๋“œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. + +* (ํฐ ๋”ฐ์˜ดํ‘œ ๋ณด๋‹ค๋Š”) ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. + +* ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” ์ŠคํŽ˜์ด์Šค ๋‘ ๊ฐœ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. + +* ์ฝ”๋“œ์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜๋“ค์€ ์ ์–ด๋„ ํ•œ ๋ฒˆ์€ ์‚ฌ์šฉ๋˜๋˜๊ฐ€, ์•„๋‹ˆ๋ฉด ์™„์ „ํžˆ ์—†์• ์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +* x == true ํ˜น์€ x == false๋กœ ๋น„๊ต๋ฌธ์„ ์ž‘์„ฑํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๊ฒƒ ๋Œ€์‹  (x) ๋‚˜ (!x)๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. x == true๋Š” ๋ถ„๋ช…ํžˆ if (x) ์™€๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค! ํ—ท๊ฐˆ๋ฆด ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋„(null)๊ณผ ๋น„๊ตํ•˜๊ณ , ์ˆซ์ž๋ฅผ 0์—, ๋ฌธ์ž์—ด(string)์„ โ€œโ€๊ณผ ๋น„๊ตํ•˜์‹ญ์‹œ์˜ค. + +* ์ž‘์„ฑํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ชจํ˜ธํ•˜๊ฑฐ๋‚˜ ๋ณต์žกํ•œ ๊ฒฝ์šฐ ์ฃผ์„์„ ๋‹ต๋‹ˆ๋‹ค. + +* ๋” ๋งŽ์€ ์Šคํƒ€์ผ๋ง ํŒ์„ ์ฐธ๊ณ ํ•˜๊ธฐ ์œ„ํ•ด์„  [๋ชจ์งˆ๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ์Šต(Mozilla JS practice)](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#JavaScript_practices)์„ ๋ณด์‹ญ์‹œ์˜ค. + + + +## ์œ ๋‹› ํ…Œ์ŠคํŠธ + +์œ ๋‹› ํ…Œ์ŠคํŠธ๋ž€ ์ฃผ๋…ผ๋ฆฌ์™€ ์„ฑ๋Šฅ ๊ฒ€์ฆ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ž‘์€ ๊ทœ๋ชจ์˜ ์ฝ”๋“œ๋“ค์ž…๋‹ˆ๋‹ค. [unit_testing.md](./unit_testing.md) ํŽ˜์ด์ง€์— ์œ ๋‹› ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์ด p5.js๋ฅผ ์œ„ํ•œ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•œ๋‹ค๋ฉด, ์•„๋งˆ๋„ ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ๊ทธ๊ฑด ์–ด๋”˜๊ฐ€์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ œ์ถœํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. + +์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋””ํŽœ๋˜์‹œ๋“ค์„ ๋ฐ˜๋“œ์‹œ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +```shell +$ npm ci +``` + +์ด๊ฒƒ์ด p5.js๋ฅผ ์œ„ํ•œ *๋ชจ๋“ * ๋””ํŽœ๋˜์‹œ๋“ค์„ ์„ค์น˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค; ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š”, ์œ ๋‹› ํ…Œ์ŠคํŒ…์— ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋””ํŽœ๋˜์‹œ๋“ค์€ ๋‹ค์Œ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค: + +- [Mocha](https://mochajs.org/): p5.js๋ฅผ ์œ„ํ•œ, ๊ฐœ๋ณ„์ ์ธ ํ…Œ์ŠคํŠธ ํŒŒ์ผ๋“ค์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŒ… ํ”„๋ ˆ์ž„์›Œํฌ +- [mocha-chrome](https://github.com/shellscape/mocha-chrome): ๊ตฌ๊ธ€ ํฌ๋กฌ์„ ์ด์šฉํ•ด Mocha ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๋Š” ๋ชจ์ฐจ ํ”Œ๋Ÿฌ๊ทธ์ธ + +๋””ํŽœ๋˜์‹œ๋“ค์ด ์„ค์น˜๋˜๋ฉด, Grunt๋ฅผ ์ด์šฉํ•ด ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ์‹ญ์‹œ์˜ค. + +```shell +$ grunt +``` + +๋•Œ๋ก  ์ปค๋งจ๋“œ ๋ผ์ธ ๋Œ€์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฒƒ๋„ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„ , ๋จผ์ € ์„œ๋ฒ„ [์—ฐ๊ฒฐ](https://github.com/gruntjs/grunt-contrib-connect)์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค: + +```shell +$ npm run dev +``` + +์„œ๋ฒ„๊ฐ€ ๋Œ์•„๊ฐ€๋ฉด, ๋ธŒ๋ผ์šฐ์ €์—์„œ `test/test.html`์„ ์—ด ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค. + +์œ ๋‹› ํ…Œ์ŠคํŒ…์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์„ค๋ช…์€ p5.js ๋ฌธ์„œ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, ๊ฐ„๋žตํ•˜๊ฒŒ๋งŒ ๋งํ•˜์ž๋ฉด src/ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ์— ๊ฐ€ํ•ด์ง„ ์ค‘๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด๋‚˜, ์ƒˆ๋กœ ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์€ Mocha๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ํŒŒ์ผ์ด test/ ๋””๋ ‰ํ† ๋ฆฌ์— ๋™๋ฐ˜๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” ํ–ฅํ›„ ๋‚˜์˜ฌ ๋ชจ๋“  ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์ž‘๋™ํ•  ๊ฒƒ์ž„์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, [Chai.js ๋ ˆํผ๋Ÿฐ์Šค](http://www.chaijs.com/api/assert/)๋ฅผ ์ฐธ๊ณ ํ•ด ์–ด์„œ์…˜(assertion) ๋ฉ”์„ธ์ง€๋ฅผ ๊ตฌ์„ฑํ•จ์œผ๋กœ์จ ๋ฏธ๋ž˜์— ํ…Œ์ŠคํŠธ๋กœ ์žก์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋“ค์ด ์ผ๊ด€์„ฑ ์žˆ๊ณ , ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ์‹œ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. + + + +# ๊ธฐํƒ€ + +- [contributor_docs/](https://github.com/processing/p5.js/tree/main/contributor_docs) ํด๋”์—๋Š” ์‚ดํŽด๋ณผ๋งŒํ•œ ๋‹ค๋ฅธ ํŒŒ์ผ๋“ค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์ˆ ์ ์ธ ํ˜น์€ ๋น„๊ธฐ์ˆ ์ ์ธ ๊ฐ ์˜์—ญ๊ณผ ๊ด€๊ณ„๋œ ๊ฒƒ๋“ค์ž…๋‹ˆ๋‹ค. +- p5.js ๊ฐœ๋ฐœ ์ž‘์—… ํ๋ฆ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ์™€ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•œ ์˜์ƒ ์„ค๋ช…์€ [Looking Inside p5.js](https://www.luisapereira.net/teaching/materials/processing-foundation)์—์„œ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +- [์ฝ”๋”ฉ ํŠธ๋ ˆ์ธ์˜ ์ด ๋™์˜์ƒ](https://youtu.be/Rr3vLyP1Ods)๐Ÿš‹๐ŸŒˆ์—์„œ๋Š” p5.js์— ๊ธฐ์ˆ ์  ๊ธฐ์—ฌ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. +- p5.js [๋„์ปค(Docker) ์ด๋ฏธ์ง€](https://github.com/toolness/p5.js-docker)๋Š” [๋„์ปค](https://www.docker.com/)์— ๋งˆ์šดํŠธ ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” [Node](https://nodejs.org/) ๊ฐ™์€ ํ•„์ˆ˜ ์š”์†Œ๋“ค์„ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•  ํ•„์š” ์—†์ด, ๊ทธ๋ฆฌ๊ณ  ๋„์ปค ์„ค์น˜๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“ ์ง€ ํ˜ธ์ŠคํŠธ ์šด์˜ ์ฒด์ œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ ๋„ p5.js๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +- p5.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋นŒ๋“œ ๊ณผ์ •์€ [json ๋ฐ์ดํ„ฐ ํŒŒ์ผ](https://p5js.org/reference/data.json)์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด๋Š” p5.js์˜ ๊ณต๊ฐœ API๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์—๋””ํ„ฐ์—์„œ p5.js ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์™„์„ฑํ•˜๋Š” ๋“ฑ์˜ ์ž๋™ํ™”๋œ ํˆด๋ง์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ p5.js ์›น์‚ฌ์ดํŠธ์—์„œ ํ˜ธ์ŠคํŠธ ๋˜์ง€๋งŒ, ์ €์žฅ์†Œ์˜ ์ผ๋ถ€๋กœ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. +- p5.js๋Š” ์ตœ๊ทผ์— [ES6](https://en.wikipedia.org/wiki/ECMAScript#6th_Edition_-_ECMAScript_2015)๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€ํ™”๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ธฐ์—ฌ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด์„  [ES6 ์ฑ„ํƒ](./es6-adoption.md)์„ ๋ฐฉ๋ฌธํ•ด์ฃผ์‹ญ์‹œ์˜ค. diff --git a/docs/yuidoc-p5-theme/assets/blobs.csv b/docs/yuidoc-p5-theme/assets/blobs.csv index bda44d2203..2b7f05d1a0 100644 --- a/docs/yuidoc-p5-theme/assets/blobs.csv +++ b/docs/yuidoc-p5-theme/assets/blobs.csv @@ -1,3 +1,3 @@ -ID,Name,Flavor,Shape,Color -Blob1,Blobby,Sweet,Blob,Pink +ID,Name,Flavor,Shape,Color +Blob1,Blobby,Sweet,Blob,Pink Blob2,Saddy,Savory,Blob,Blue \ No newline at end of file