p5.js์ ๊ธฐ์ฌํ๋๋ฐ์ ๊ด์ฌ์ ๊ฐ์ ธ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ฐ๋ฆฌ ์ปค๋ฎค๋ํฐ๋ ๋ชจ๋ ํํ์ ๊ธฐ์ฌ๋ฅผ ์์คํ๊ฒ ์๊ฐํ๋ฉฐ โ์ปจํธ๋ฆฌ๋ทฐํฐโ์ ์๋ฏธ๋ฅผ ์ต๋ํ ๋์ ๋ฒ์๋ก ํ์ฅํ๊ณ ์ ํฉ๋๋ค. ์ด๋ ๋ฌธ์ํ, ๊ฐ์, ์ฝ๋ ์์ฑ, ์ฐฝ์ ํ๋, ๊ธ์ฐ๊ธฐ, ๋์์ธ, ์ด๋, ์กฐ์งํ, ํ๋ ์ดํ ๋ฐ ๊ทธ ์ธ์๋ ์ฌ๋ฌ๋ถ์ด ์์ํ ์ ์๋ ๋ชจ๋ ๊ฑธ ํฌ๊ดํฉ๋๋ค. ์ฐ๋ฆฌ์ ์ปค๋ฎค๋ํฐ ํ์ด์ง์๋ ์ปค๋ฎค๋ํฐ์ ์ฐธ์ฌํ๊ณ ๊ธฐ์ฌํ ์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ๋ค์ ๋ํ ๊ฐ์๊ฐ ์ ์๋์ด ์์ต๋๋ค. ๊ธฐ์ ์ ์ธ ๊ธฐ์ฌ๋ฅผ ํ๊ณ ์ ํ์ ๋ค๋ฉด, ์์ํ๊ธฐ์ ์์ ์ด ๊ธ์ ์กฐ๊ธ ๋ ์ฝ์ด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
์ด ํ๋ก์ ํธ๋ ์ฌ-์ปจํธ๋ฆฌ๋ทฐํฐ์ค(all-contributors) ์ฌ์์ ๋ฐ๋ฆ ๋๋ค. ์๋ด ์ฌํญ์ ๋ฐ๋ผ ๋ฆฌ๋๋ฏธ(readme)์ ๋ณธ์ธ์ ์ถ๊ฐํ์ธ์! ํน์ ๊นํ๋ธ ์ด์์ ์ฌ๋ฌ๋ถ์ ์ปจํธ๋ฆฌ๋ทฐ์ ์ ๋๊ธ๋ก ๋ฌ์์ฃผ์๋ฉด ์ ํฌ๊ฐ ์ถ๊ฐํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ฝ๋ ๋ณด๊ด ์์น
p5.js ํ๋ก์ ํธ์ ํต์ฌ์ ์ธ ์ ์ฅ์๋ค์ ์๋์ ๊ฐ์ต๋๋ค:
- p5.js: ๋ณธ ์ ์ฅ์์๋ p5.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ค ์ฝ๋๊ฐ ๋ณด๊ด๋์ด ์์ต๋๋ค. ์ ์ ๋ค์ด ๋ณด๊ฒ ๋๋ p5.js์ ๋ ํผ๋ฐ์ค ๋งค๋ด์ผ ๋ํ ์ด ์์ค ์ฝ๋์ ํฌํจ๋์ด ์๋ JSDoc ๊ฐ์ฃผ์์ ์์ฑ๋ฉ๋๋ค. ๋ณธ ์ ์ฅ์๋ ๋ก๋ ๋ฆฌ ๋งฅ์นด์(Lauren Lee McCarthy)๊ฐ ๊ด๋ฆฌํฉ๋๋ค.
- p5.js-website: ๋ณธ ์ ์ฅ์์๋ ๋ ํผ๋ฐ์ค ๋งค๋ด์ผ์ ์ ์ธํ p5.js ์น์ฌ์ดํธ์ ์ฝ๋๊ฐ ์ ๋ถ ๋ณด๊ด๋์ด ์์ต๋๋ค. ๋ณธ ์ ์ฅ์๋ ๋ก๋ ๋ฆฌ ๋งฅ์นด์(Lauren Lee McCarthy)๊ฐ ๊ด๋ฆฌํฉ๋๋ค.
- p5.js-sound: ๋ณธ ์ ์ฅ์์๋ p5.sound.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ณด๊ด๋์ด ์์ต๋๋ค. ๋ณธ ์ ์ฅ์๋ ์ ์ด์จ ์๊ฐ(Jason Sigal)์ด ๊ด๋ฆฌํฉ๋๋ค.
- p5.js-web-editor: ๋ณธ ์ ์ฅ์์๋ p5.js ์น ์๋ํฐ์ ์์ค ์ฝ๋๊ฐ ๋ณด๊ด๋์ด ์์ต๋๋ค. ๋ณธ ์ ์ฅ์๋ ์บ์ ํ๋ผ์ผ์ง์ธ(Cassie Tarakajian)์ด ๊ด๋ฆฌํฉ๋๋ค. ์์ ์ p5.js ์๋ํฐ๋ ์ด์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ค๋ ์ ์ ์ฐธ๊ณ ํ์ญ์์ค.
- p5.accessibility: ๋งน์ธ ๋ฐ ์๊ฐ ์ฅ์ ์ธ๋ค์ด ์กฐ๊ธ ๋ ์ฝ๊ฒ p5 ์บ๋ฒ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
์ ์ฅ์ ํ์ผ ๊ตฌ์กฐ
๋ณธ ํ๋ก์ ํธ์ ๋ง์ ํ์ผ๋ค์ด ์์ต๋๋ค! ์ฌ๊ธฐ์ ๊ทธ ๊ฐ๋ตํ ๊ฐ์๊ฐ ์์ต๋๋ค. ํท๊ฐ๋ฆด ์๋ ์์ง๋ง, ๊ธฐ์ฌํ๊ธฐ ์ํด์ ์ ์ฅ์์ ๋ชจ๋ ํ์ผ์ ์ดํดํ ํ์๊น์ง๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ ์์ญ(์ธ๋ผ์ธ ๋ํ๋ฉํ ์ด์ ์ ๊ณ ์น๋ ๊ฒ์ด ํ ์๊ฐ ๋ ์ ์๊ฒ ์ต๋๋ค)์์ ์์ํด์ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ค๋ฅธ ์์ญ์ผ๋ก ๋์๊ฐ๋ ๊ฑธ ๊ถ์ฅํฉ๋๋ค. ๋ฃจ์ด์ฌ ํ๋ ์ด๋ผ(Luisa Pereira)์ ๊ฐ์ Looking Inside p5.js์ p5.js ์์ ํ๋ฆ์ ์ฌ์ฉ๋๋ ๋๊ตฌ์ ํ์ผ๋ค์ ๋ํ ์๊ฐ๋ฅผ ๋์์์ผ๋ก ํ์ธํ์ค ์ ์์ต๋๋ค.
contributor_docs/
์๋ ์ปจํธ๋ฆฌ๋ทฐํฐ๋ค์ ์ํ ๊ด๋ก์ ์์น์ ์ค๋ช ํ๋ ๋ฌธ์๊ฐ ๋ค์ด ์์ต๋๋ค.docs/
์๋ ์ฌ์ค ๋ฌธ์๋ค์ด ์์ต๋๋ค! ๋์ , ์จ๋ผ์ธ ๋ ํผ๋ฐ์ค ๋งค๋ด์ผ์ ์์ฑํ๊ธฐ ์ํ ์ฝ๋๊ฐ ๋ด๊ฒจ ์์ต๋๋ค.lib/
์๋ ๋น์ด ์๋ ์์ ํ์ผ๊ณผ p5.js-sound ์ ์ฅ์์์ ํ ๋ฆฌํ์คํธ๋ฅผ ํตํด ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธ ๋๋ p5.sound ์ ๋์จ์ด ๋ด๊ฒจ ์์ต๋๋ค. ๋ํ ์ด๊ณณ์ ๋น๋ ๋ p5.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ Grunt๋ฅผ ์ด์ฉํด ํ๋์ ํ์ผ๋ก ์ปดํ์ผ ๋ ํ์ ์์นํ๊ฒ ๋๋ ๊ณณ์ด๊ธฐ๋ ํฉ๋๋ค. ํ ๋ฆฌํ์คํธ๋ฅผ ํ ๋ ๊นํ๋ธ ์ ์ฅ์๋ก ๋ฐ๋ก ํ์ผ์ ์ด๋์ํฌ ํ์๊ฐ ์๋ ๊ฒ์ ๋๋ค.src/
์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํ ๋ชจ๋ ์์ค ์ฝ๋๊ฐ ๋ด๊ฒจ ์๋๋ฐ, ์ด๋ค์ ๋ถ๋ฆฌ๋ ๋ชจ๋์ ํํ๋ก ์ฃผ์ ๋ณ๋ก ์ ๋ฆฌ๋์ด ์์ต๋๋ค. ๋ง์ฝ p5.js๋ฅผ ์์ ํ๊ณ ์ ํ๋ค๋ฉด ์ฌ๊ธฐ ์๋ ์์ค ์ฝ๋์ ์์ ์ ํ๋ฉด ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ํด๋ ์์๋ ๊ฐ๊ฐ์ ๋ฆฌ๋๋ฏธ ํ์ผ(readme.md)์ด ์์ผ๋ ์ด๋ฅผ ์ฐธ๊ณ ํด ์์ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.tasks/
์๋ ์๋ก์ด ๋ฒ์ ์ p5.js๋ฅผ ๋น๋, ๋ฐฐํฌ, ๋ฆด๋ฆฌ์ค ํ๋๋ฐ์ ๊ด๋ จ๋ ์๋ํ ๋ ์์ ๋ค์ ์ํํ๋ ์คํฌ๋ฆฝํธ๋ค์ด ๋ด๊ฒจ ์์ต๋๋ค.tests/
๋ ๋ด์ฉ ์์ ์ด ์์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๋๋ก ์๋ํ๋๋ก ๋ณด์ฅํด์ฃผ๋ ์ ๋ ํ ์คํธ๋ค์ ๋ด๊ณ ์์ต๋๋ค.utils/
๋ ์ ์ฅ์์ ์ ์ฉํ ์๋ ์๋ ์ถ๊ฐ์ ์ธ ํ์ผ๋ค์ ๋ด๊ณ ์๋๋ฐ, ์ผ๋ฐ์ ์ผ๋ก ๋ณธ ๋๋ ํ ๋ฆฌ๋ ๋ฌด์ํด๋ ๊ด์ฐฎ์ต๋๋ค.
๋ฌธ์ํ
๋ฌธ์ํ๋ ๋ณธ ํ๋ก์ ํธ์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ๋ฎ์ ํ์ง์ ๋ฌธ์ํ๋ ์๋ก์ด ์ด์ฉ์์ ์ปจํธ๋ฆฌ๋ทฐํฐ๋ค์ ์ง์ ์ฅ๋ฒฝ์ ๋์ฌ ํ๋ก์ ํธ ์ฐธ์ฌ๋๋ฅผ ์ ํ์ํต๋๋ค. contributing_documentation.md ํ์ด์ง๋ ๋ฌธ์ํ๋ฅผ ์์ํ๋ ๋ฐ์ ๊น์ด ์๋ ๊ฐ์๋ฅผ ์ ์ํฉ๋๋ค. p5.js๋ฅผ ์ํ ๋ฌธ์ํ๋ ์๋์ ๊ฐ์ ๊ณณ๋ค์์ ์ฃผ๋ก ์ฐพ์๋ณผ ์ ์์ต๋๋ค:
- p5js.org/reference๋ ์์ค ์ฝ๋์ ์ธ๋ผ์ธ ๋ํ๋ฉํ ์ด์ ์ผ๋ก๋ถํฐ ์์ฑ๋ฉ๋๋ค. ์ด๋ ํ ์คํธ ์ค๋ช , ํ๋ผ๋ฏธํฐ, ์ฝ๋ ์ค๋ํซ ์์ ๋ฑ์ ํฌํจํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฝ๋์ ์ธ๋ผ์ธ ๋ํ๋ฉํ ์ด์ ์ ๊ธด๋ฐํ ์ฐ๊ฒฐ์ํค๊ณ , ๋ฌธ์ํ์ ๊ธฐ์ฌํ๋ ๊ฒ ์ฝ๋์ ๊ธฐ์ฌํ๋ ๊ฒ ๋งํผ์ด๋ ์ค์ํ๋ค๋ ์๊ฐ์ ๊ฐํํ๊ธฐ ์ํด ์ธ๋ผ์ธ ๋ํ๋ฉํ ์ด์ ์ ํ์ฉํ๋ ๊ฒ์ ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋น๋ ๋๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋๊ฐ ์๋ํ๋ ๋ฐฉ์ ์ฌ์ด์ ๋ฌธ์ ๊ฐ ์์์ ํ์คํ ํ๊ธฐ ์ํด ์ธ๋ผ์ธ ๋ํ๋ฉํ ์ด์ ๊ณผ ์์๋ฅผ ํ์ธํฉ๋๋ค. ์ด์ ๊ธฐ์ฌํ๊ธฐ ์ํด์ inline_documentation.md ํ์ด์ง๋ฅผ ์ดํด๋ณด๋ ๊ฑธ๋ก ์์ํ์๊ธฐ ๋ฐ๋๋๋ค.
- p5js.org/examplesํ์ด์ง๋ p5.js๋ฅผ ํ์ตํ๋ ๋ฐ์ ์ ์ฉํ ์ ์๋ ๊ธธ์ด๊ฐ ๊ธด ์์๋ค์ ๋ด๊ณ ์์ต๋๋ค. ์ปจํธ๋ฆฌ๋ทฐ์ ์ ์ํด์๋ adding_examples.md ํ์ด์ง๋ฅผ ์ดํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
- p5js.org/tutorialsํ์ด์ง๋ p5.js์ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ ์ ๋ฐฐ์ธ ์ ์๋๋ก ๋์์ฃผ๋ ํํ ๋ฆฌ์ผ๋ค์ ๋ด๊ณ ์์ต๋๋ค. ๊ธฐ์ฌํ๊ธฐ ์ํด์๋ p5.js ์น์ฌ์ดํธ์ ํํ ๋ฆฌ์ผ์ ๋ํ ํํ ๋ฆฌ์ผ์ ์ดํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค!
- p5.js ์น์ฌ์ดํธ๋ ํ์ฌ ๋ช ๊ฐ์ง ๋ค๋ฅธ ์ธ์ด๋ค์ ์ง์ํ๊ณ ์์์ ํ์ธํ์ค ์ ์์ต๋๋ค. ์ด๋ ๊ตญ์ ํ(ํน์ ์ค์ฌ์ i18n)๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ์ด์ ๋ํ ๋ฌธ์๋ i18n_contribution ํ์ด์ง์์ ๋ ์์ธํ ๋ณด์ค ์ ์์ต๋๋ค.
๊นํ๋ธ ์ด์ ํ๋ฆ
์๋ ค์ง ๋ฒ๊ทธ์ ์ถ๊ฐ๋์์ผ๋ฉด ํ๋ ์๋ก์ด ๊ธฐ๋ฅ๋ค์ ๊นํ๋ธ ์ด์๋ค์ ํตํด ์ถ์ ๋ฉ๋๋ค. ์ด์ ๋ ์ด๋ธ๋ค์ ์ด์๋ค์ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ๋ถ๋ฅํ๋ ๋ฐ์ ์ฌ์ฉ๋๋๋ฐ, ์๋ฅผ ๋ค๋ฉด ์ด๋ณด์์๊ฒ ์ ํฉํ ์ด์๋ค์ ๋ ์ด๋ธ๋ง ํ๋ ์์ ๋๋ค.
์ด๋ฏธ ์ ๊ธฐ๋ ์ด์ ์ค์ ์์ ์ ์์ํ๊ณ ์ถ์ ๊ฒ ์๋ค๋ฉด, ๋ค๋ฅธ ์ปจํธ๋ฆฌ๋ทฐํฐ๋ค์ด ์งํ ์ฌํญ์ ํ์ ํ๊ณ ๋์์ ์ค ์ ์๋๋ก ํด๋น ์ด์์ ๋๊ธ์ ๋ฌ์์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
์ด์๋ฅผ ํด๊ฒฐํ๋ค๋ฉด, p5.js ๋ง์คํฐ ๋ธ๋์น์ ํ ๋ฆฌํ์คํธ(PR)๋ฅผ ์ ์ถํ์ญ์์ค. PR์ ์ค๋ช ์นธ์ โresolves #XXXXโ(#XXXX๋ฅผ ํด๊ฒฐํจ)๋ผ๊ณ ์จ์ ํด๊ฒฐํ ์ด์๋ฅผ ํ๊ทธํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๋ง์ฝ ์ด PR์ด ํด๋น ์ด์๋ฅผ ๋ค๋ฃจ๊ธฐ๋ ํ์ง๋ง ์์ ํ ํด๊ฒฐํ์ง๋ ๋ชปํ๋ ๊ฑฐ๋ผ๋ฉด(์ฆ, ์ฌ๋ฌ๋ถ์ PR์ด merge ๋๊ณ ๋์๋ ์ด์๊ฐ ์ด๋ ค ์์ด์ผ ํ๋ค๋ฉด), โaddresses #XXXXโ(#XXXX๋ฅผ ๋ค๋ฃธ)์ด๋ผ๊ณ ์จ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
๋ง์ฝ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๊ฑฐ๋ ์๋กญ๊ฒ ๋ํ๊ณ ์ถ์ ๊ธฐ๋ฅ์ ๋ํ ์์ด๋์ด๊ฐ ์๋ค๋ฉด, ์ด์๋ฅผ ๋จผ์ ์ ์ถํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ์ด์๋ฅผ ์ ์ถํ์ง ์๊ณ ์์ ์ฌํญ์ด๋ ์๋ก์ด ๊ธฐ๋ฅ์ ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํด๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ์๋ฝํ๊ธฐ ์ด๋ ค์ธ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ด์์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ๊ณ ํด๋น ์ด์๋ฅผ ๋ค๋ค๋ ๊ด์ฐฎ๋ค๋ ๊ฑธ ํ์ธํ๋ค๋ฉด, ์์ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ ๋ฒ๊ทธ๋ฅผ ๊ณ ์น๊ฑฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ์ปจํธ๋ฆฌ๋ทฐ์ ์ ์์ํ ์ ์์ต๋๋ค.
๋ฒ๊ทธ ๋ฆฌํฌํธ๋ฅผ ์ฌํํ๊ฑฐ๋ ๋ฒ์ ๋ฒํธ ํน์ ์ฌํ ์๋ด์์ ๊ฐ์ ์ฃผ์ ์ ๋ณด๋ค์ ์์ฒญํ๋ ๋ฑ ์ด์๋ค์ ์ ๋ณํ๋ ์์ ํ ์๋ ์์ต๋๋ค. ์ด๋ฅผ ์์ํ๊ธฐ์ ๊ฐ์ฅ ์ฉ์ดํ ๋ฐฉ๋ฒ ์ค ํ๋๋ ์ฝ๋ ํธ๋ฆฌ์์ง(CodeTriage)์์ p5.js๋ฅผ ๊ตฌ๋ ํ๋ ๊ฒ๋๋ค.
organization.md ํ์ผ์ ์ด์๋ค์ด ์ด๋ป๊ฒ ์ฒด๊ณํ ๋ ์ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ๋ํ ์์ฌ๊ฒฐ์ ๊ณผ์ ์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง์ ๋ํ ๋๋ต์ ์ธ ๊ฐ์๋ฅผ ๋ด๊ณ ์์ต๋๋ค. ์ด์ ๊ด์ฌ์ด ์๋ค๋ฉด ์ผ๋ง๋ ์ง ๊ธฐ์ฌํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
๊ฐ๋ฐ ๊ณผ์
๊ฐ๋ฐ ํ๋ก์ธ์ค๋ผ๋ ๊ฒ ์ฒ์์๋ ์ฝ๊ฐ ๊น๋ค๋ก์ธ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ผ๋ ๊ฑด ์ฌ๋ฌ๋ถ ๋ฟ๋ง์ด ์๋๋ผ, ์ฒ์์ ๋ชจ๋๊ฐ ํผ๋์ ๊ฒช๊ณค ํฉ๋๋ค. ๋ฐ์ ๋ณด์๋ฉด ์ ์ ๊ณผ์ ์ ์ฐจ๋ก ์ฐจ๋ก ํ์ธํ์ค ์ ์์ต๋๋ค. ๋ง์ฝ ์ง๋ฌธ์ด ์๋ค๋ฉด ํฌ๋ผ์ ๋ฌผ์ด๋ณด๊ฑฐ๋ ๋งํ ๋ถ๋ถ์ ์ค๋ช ํ๋ ์ด์๋ฅผ ์ ์ถํ๋ฉด ์ ํฌ๊ฐ ํ ์ ์๋ ์ต๋ํ์ ๋์์ ๋๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค.
์๋ ์ ์ฐจ๋ ์ฝ๋ฉ ํธ๋ ์ธ(The Coding Train)์ ๋น๋์ค ๊ฐ์์์๋ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.๐๐
node.js๋ฅผ ์ค์นํ์ธ์. node.js๋ฅผ ์ค์นํ๋ฉด ์๋์ ์ผ๋ก npm ํจํค์ง ๋งค๋์ ๋ ์ค์น๋ฉ๋๋ค.
๋ณธ์ธ์ ๊นํ๋ธ ๊ณ์ ์ p5.js ์ ์ฅ์๋ฅผ ํฌํฌ ํ์ญ์์ค.
ํฌํฌ ๋ ๊นํ๋ธ ์ ์ฅ์๋ฅผ ๋ก์ปฌ ์ปดํจํฐ์ ํด๋ก ํ์ญ์์ค.
$ git clone https://github.com/YOUR_USERNAME/p5.js.git
ํ๋ก์ ํธ ํด๋๋ก ๋ค์ด๊ฐ npm์ ํ์ํ ๋ชจ๋ ๋ํ๋์๋ฅผ ์ค์นํ์ญ์์ค.
$ cd p5.js $ npm ci
์ด์ Grunt๊ฐ ์ค์น๋์์ํ ๋ฐ, ์์ค ์ฝ๋๋ก๋ถํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๋ํ๊ธฐ ์ํด ์ด๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
$ npm run grunt
๋ง์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ผ์ ๊ณ์ํด์ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด, ์ฌ์ ์ ์๋์ผ๋ก ์ผ์ผ์ด ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ง ์์๋ ์์ค ํ์ผ ๋ณ๊ฒฝ ์ฌํญ์ ์๋์ ์ผ๋ก ๋ค์ ๋น๋ํด์ค ์ ์๋๋ก npm run dev
๋ฅผ ์คํ ํ๋ ๊ฒ ๋์ ๊ฒ์
๋๋ค.
๋ก์ปฌ์์ ์ฝ๋ ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๊ณ , ๊น(Git)์ผ๋ก ์ปค๋ฐ ํ์ญ์์ค.
$ git add -u $ git commit -m "YOUR COMMIT MESSAGE"
๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ์์์ ํ์ธํ๊ณ , ๊ณ ์ฅ ๋ฐ ๋ค๋ฅธ ๋ฌธ์ ๋ค์ ๋ํ ํ ์คํธ๋ฅผ ํ๊ธฐ ์ํด
npm run grunt
๋ฅผ ๋ค์ ํ ๋ฒ ์คํํ์ญ์์ค.๋ณ๊ฒฝ ์ฌํญ์ ์ฌ๋ฌ๋ถ์ ๊นํ๋ธ ํฌํฌ์ ํธ์ ํ์ญ์์ค.
$ git push
๋ชจ๋ ๊ฒ ์ค๋น๋์๋ค๋ฉด, ๋ณ๊ฒฝ ์ฌํญ์ ํ ๋ฆฌํ์คํธ๋ก ์ ์ถํ์ญ์์ค.
์ปค๋ฐ์ด ๊ฑฐ์ ๋นํ๋ ๊ฒฝ์ฐ
p5.js ์ฝ๋ ๋ฒ ์ด์ค์ ํฌํจ๋์ด ์๋ ๊ฐ๋ฐ์ ํด๋ค์ ์ด๋ค ๊ฒ๋ค์ ๋ํด ์ผ๋ถ๋ฌ ๋งค์ฐ ์๊ฒฉํ ๊ธฐ์ค์ ์ ์ฉํ๋๋ก ๋ง๋ค์ด์ ธ ์์ต๋๋ค. ์ด๊ฑด ์ข์ ๊ฒ๋๋ค! ์ด๋ ๋ชจ๋ ๊ฑธ ์ผ๊ด์ฑ ์๊ฒ ๋ง๋ค๊ณ , ๊ท์จ์ด ์ง์ผ์ง๋๋ก ๋์ธ ๊ฒ๋๋ค. ์ฌ๋ฌ๋ถ์ด ๋ญ๊ฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ๋ง๋ค์๋ ์ปค๋ฐ์ด ๊ฑฐ์ ๋นํ ์๋ ์์์ ์๋ฏธํ๊ธฐ๋ ํ์ง๋ง, ๋๋ดํ์ง๋ ๋ง์์ฃผ์ธ์. ์ฌ์ง์ด ๊ฒฝํ ๋ง์ p5.js ๊ฐ๋ฐ์๋ค์ ์ปค๋ฐ๋ ์ข ์ข ๊ฑฐ์ ๋นํ๊ณค ํฉ๋๋ค. ๋ณดํต์ ์ฝ๋ ๋ฌธ๋ฒ ์๋๋ฉด ์ ๋ ํ ์คํธ๊ฐ ๋ฌธ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ฝ๋ ๋ฌธ๋ฒ
p5.js๋ ๊น๋ํ๊ณ ์ผ๊ด์ฑ ์๋ ์คํ์ผ์ ์ฝ๋ ๋ฌธ๋ฒ์ ์๊ตฌํ๊ธฐ์, Prettier์ ESlint๋ผ๋ ํด์ ์ฌ์ฉ์ด ํ์์ ๋๋ค. ์ปค๋ฐ์ ํ๊ธฐ ์ ์ ํน์ ์คํ์ผ ๊ท์น์ ์ ๊ฒํ๊ฒ ๋๋๋ฐ, ์ฌ์ฉํ๋ ์ฝ๋ ์๋ํฐ์ ESlint ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ฉด ํ์ดํ ํจ๊ณผ ๋์์ ์ค๋ฅ๋ฅผ ํ์ด๋ผ์ดํธ ํด์ค๋๋ค. ์ฝ๋ ์คํ์ผ์ ๊ดํด์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฐ์ฑ๊ณผ ๊ด๋ จ๋ ์ค๋ฅ๋ฅผ ๋ด๋๋ฐ, ์ด๋ ์ฐธ์ฌ์ ๊ธฐ์ฌ์ ์ฅ๋ฒฝ์ ๋ฎ์ถ๊ธฐ ์ํจ์ ๋๋ค.
์๋ฌ๋ฅผ ํฌ์ฐฉํ๊ธฐ ์ํด์๋ ํฐ๋ฏธ๋์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ์ธ์($
ํ๋กฌํํธ๋ ์
๋ ฅํ์ง ๋ง์ญ์์ค):
$ npm run lint
์ด๋ค ๋ฌธ๋ฒ ์ค๋ฅ๋ ์๋์ ์ผ๋ก ๊ณ ์ณ์ง ์๋ ์์ต๋๋ค:
$ npm run lint:fix
ํ๋ก์ ํธ์ ๊ธฐ์กด ์คํ์ผ์ ๊ณ ์ํ๋ ๊ฒ ์ ํธ๋๋๊ฒ ๋ณดํต์ด์ง๋ง, ๊ฐ๋์ ๋ค๋ฅธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ๋ ์ฝ๊ฒ ๋ง๋ค๊ธฐ๋ ํฉ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋, Prettier์ // prettier-ignore
์ฃผ์์ ์ด์ฉํด ์์ธ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์๊ตฌ๋๋ ์คํ์ผ ์ ํธ ์ฌํญ๋ค์ ๊ทธ๋ด๋งํ ์ด์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค๋ฉด ์์ธ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ๋ง๋ค์ง ๋ง์์ฃผ์๊ธธ ๋ฐ๋๋๋ค.
์ฌ๊ธฐ ์ฝ๋ ์คํ์ผ ๊ท์น์ ๋ํ ๊ฐ๋ตํ ์์ฝ๋ณธ์ด ์์ต๋๋ค. ๋ค๋ง ์ด ๋ชฉ๋ก์ด ์ ๋ถ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ .prettierrc์ .eslintrc ํ์ผ์ ์ ์ฒด ๋ชฉ๋ก์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
ES6 ์ฝ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
(ํฐ ๋ฐ์ดํ ๋ณด๋ค๋) ์์ ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ค์ฌ์ฐ๊ธฐ๋ ์คํ์ด์ค ๋ ๊ฐ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์ฝ๋์ ์ ์๋์ด ์๋ ๋ชจ๋ ๋ณ์๋ค์ ์ ์ด๋ ํ ๋ฒ์ ์ฌ์ฉ๋๋๊ฐ, ์๋๋ฉด ์์ ํ ์์ ์ผ ํฉ๋๋ค.
x == true ํน์ x == false๋ก ๋น๊ต๋ฌธ์ ์์ฑํ์ง ๋ง์ญ์์ค. ์ด๊ฒ ๋์ (x) ๋ (!x)๋ฅผ ์ฌ์ฉํ์ญ์์ค. x == true๋ ๋ถ๋ช ํ if (x) ์๋ ๋ค๋ฆ ๋๋ค! ํท๊ฐ๋ฆด ์ฌ์ง๊ฐ ์๋ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋(null)๊ณผ ๋น๊ตํ๊ณ , ์ซ์๋ฅผ 0์, ๋ฌธ์์ด(string)์ โโ๊ณผ ๋น๊ตํ์ญ์์ค.
์์ฑํ๋ ํจ์๊ฐ ๋ชจํธํ๊ฑฐ๋ ๋ณต์กํ ๊ฒฝ์ฐ ์ฃผ์์ ๋ต๋๋ค.
๋ ๋ง์ ์คํ์ผ๋ง ํ์ ์ฐธ๊ณ ํ๊ธฐ ์ํด์ ๋ชจ์ง๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฐ์ต(Mozilla JS practice)์ ๋ณด์ญ์์ค.
์ ๋ ํ ์คํธ
์ ๋ ํ ์คํธ๋ ์ฃผ๋ ผ๋ฆฌ์ ์ฑ๋ฅ ๊ฒ์ฆ์ ๋ณด์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์์ ๊ท๋ชจ์ ์ฝ๋๋ค์ ๋๋ค. unit_testing.md ํ์ด์ง์ ์ ๋ ํ ์คํธ์ ๋ํ ๋ ๋ง์ ์ ๋ณด๊ฐ ๋ด๊ฒจ ์์ต๋๋ค. ๋ง์ฝ ์ฌ๋ฌ๋ถ์ด p5.js๋ฅผ ์ํ ์ฃผ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ค๋ฉด, ์๋ง๋ ํ ์คํธ๋ฅผ ํฌํจํด์ผ ํ ๊ฒ์ ๋๋ค. ํ ์คํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ค๋ฉด, ๊ทธ๊ฑด ์ด๋๊ฐ์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๋ป์ด๋ฏ๋ก ํ ๋ฆฌํ์คํธ๋ฅผ ์ ์ถํ์ง ๋ง์ญ์์ค.
์ ๋ ํ ์คํธ๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด์๋ ํ๋ก์ ํธ์ ๋ํ๋์๋ค์ ๋ฐ๋์ ์ค์นํด์ผ ํฉ๋๋ค.
$ npm ci
์ด๊ฒ์ด p5.js๋ฅผ ์ํ ๋ชจ๋ ๋ํ๋์๋ค์ ์ค์นํ ๊ฒ์ ๋๋ค; ๊ฐ๋จํ๊ฒ๋, ์ ๋ ํ ์คํ ์ ๊ฐ์ฅ ์ค์ํ ๋ํ๋์๋ค์ ๋ค์์ ํฌํจํฉ๋๋ค:
- Mocha: p5.js๋ฅผ ์ํ, ๊ฐ๋ณ์ ์ธ ํ ์คํธ ํ์ผ๋ค์ ์คํํ๋ ๊ฐ๋ ฅํ ํ ์คํ ํ๋ ์์ํฌ
- mocha-chrome: ๊ตฌ๊ธ ํฌ๋กฌ์ ์ด์ฉํด Mocha ํ ์คํธ๋ฅผ ๋๋ฆฌ๋ ๋ชจ์ฐจ ํ๋ฌ๊ทธ์ธ
๋ํ๋์๋ค์ด ์ค์น๋๋ฉด, Grunt๋ฅผ ์ด์ฉํด ์ ๋ ํ ์คํธ๋ฅผ ๋๋ฆฌ์ญ์์ค.
$ grunt
๋๋ก ์ปค๋งจ๋ ๋ผ์ธ ๋์ ๋ธ๋ผ์ฐ์ ์์ ํ ์คํธ๋ฅผ ๋๋ฆฌ๋ ๊ฒ๋ ์ ์ฉํฉ๋๋ค. ์ด๋ฅผ ์ํด์ , ๋จผ์ ์๋ฒ ์ฐ๊ฒฐ์ ์์ํ์ญ์์ค:
$ npm run dev
์๋ฒ๊ฐ ๋์๊ฐ๋ฉด, ๋ธ๋ผ์ฐ์ ์์ test/test.html
์ ์ด ์ ์์ ๊ฒ๋๋ค.
์ ๋ ํ ์คํ ์ ๋ํ ์์ ํ ์ค๋ช ์ p5.js ๋ฌธ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒ์ด์ง๋ง, ๊ฐ๋ตํ๊ฒ๋ง ๋งํ์๋ฉด src/ ๋๋ ํ ๋ฆฌ์ ์๋ ์์ค ์ฝ๋์ ๊ฐํด์ง ์ค๋ํ ์์ ์ฌํญ์ด๋, ์๋ก ๊ตฌํ๋ ๊ธฐ๋ฅ์ Mocha๊ฐ ์คํํ ์ ์๋ ํ ์คํธ ํ์ผ์ด test/ ๋๋ ํ ๋ฆฌ์ ๋๋ฐ๋์ด์ผ ํ๋๋ฐ, ์ด๋ ํฅํ ๋์ฌ ๋ชจ๋ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ์ผ๊ด์ฑ ์๊ฒ ์๋ํ ๊ฒ์์ ๊ฒ์ฆํ๊ธฐ ์ํจ์ ๋๋ค. ์ ๋ ํ ์คํธ๋ฅผ ์์ฑํ ๋, Chai.js ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ๊ณ ํด ์ด์์ (assertion) ๋ฉ์ธ์ง๋ฅผ ๊ตฌ์ฑํจ์ผ๋ก์จ ๋ฏธ๋์ ํ ์คํธ๋ก ์ก์๋ผ ์ ์๋ ์ค๋ฅ๋ค์ด ์ผ๊ด์ฑ ์๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ธฐํ
- contributor_docs/ ํด๋์๋ ์ดํด๋ณผ๋งํ ๋ค๋ฅธ ํ์ผ๋ค๋ ์์ต๋๋ค. ์ด๋ค์ ๋ณธ ํ๋ก์ ํธ์ ๊ธฐ์ ์ ์ธ ํน์ ๋น๊ธฐ์ ์ ์ธ ๊ฐ ์์ญ๊ณผ ๊ด๊ณ๋ ๊ฒ๋ค์ ๋๋ค.
- p5.js ๊ฐ๋ฐ ์์ ํ๋ฆ์์ ์ฌ์ฉ๋๋ ๋๊ตฌ์ ํ์ผ๋ค์ ๋ํ ์์ ์ค๋ช ์ Looking Inside p5.js์์ ๋ณด์ค ์ ์์ต๋๋ค.
- ์ฝ๋ฉ ํธ๋ ์ธ์ ์ด ๋์์๐๐์์๋ p5.js์ ๊ธฐ์ ์ ๊ธฐ์ฌ๋ฅผ ์์ํ๋ ๊ฒ์ ๋ํ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
- p5.js ๋์ปค(Docker) ์ด๋ฏธ์ง๋ ๋์ปค์ ๋ง์ดํธ ๋ ์ ์๋๋ฐ, ์ด๋ Node ๊ฐ์ ํ์ ์์๋ค์ ์๋์ผ๋ก ์ค์นํ ํ์ ์์ด, ๊ทธ๋ฆฌ๊ณ ๋์ปค ์ค์น๋ฅผ ์ ์ธํ๊ณ ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์ง ํธ์คํธ ์ด์ ์ฒด์ ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ๋ p5.js๋ฅผ ๊ฐ๋ฐํ๋๋ฐ์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- p5.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋น๋ ๊ณผ์ ์ json ๋ฐ์ดํฐ ํ์ผ์ ์์ฑํ๋๋ฐ, ์ด๋ p5.js์ ๊ณต๊ฐ API๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ, ์ด๋ ์๋ํฐ์์ p5.js ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ๋ฑ์ ์๋ํ๋ ํด๋ง์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด ํ์ผ์ p5.js ์น์ฌ์ดํธ์์ ํธ์คํธ ๋์ง๋ง, ์ ์ฅ์์ ์ผ๋ถ๋ก ํฌํจ๋์ด ์์ง๋ ์์ต๋๋ค.
- p5.js๋ ์ต๊ทผ์ ES6๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋์ต๋๋ค. ์ด ๋ณํ๊ฐ ์ฌ๋ฌ๋ถ์ ๊ธฐ์ฌ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น ์ง๋ฅผ ๋ณด๊ธฐ ์ํด์ ES6 ์ฑํ์ ๋ฐฉ๋ฌธํด์ฃผ์ญ์์ค.