Ember.js RFC ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ๋ฌธ์ํํ์ต๋๋ค. ๋ ํฐ ๋ณํ์ ๋ํ ์ฃผ์ ์ฐ๋ ค ์ฌํญ์ ํด๊ฒฐํ๊ธฐ ์ํ ์ข์ ํ ํ๋ฆฟ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. RFC ํ๋ก์ธ์ค์ ๋ํ ์์ธํ ๋ด์ฉ์ github repo: https://github.com/emberjs/rfcs๋ฅผ ๋ฐฉ๋ฌธ
์ ๋ ๋ชจ๋ TypeScript ํ ๋ก ์ ํ ๊ณณ์ผ๋ก ์ฎ๊ธฐ๊ณ ์ถ์์ต๋๋ค. ์๋ํ๋ฉด ํ์ฌ TypeScript์ ๋ํ ๋ชจ๋ ์ฐฌ๋ฐ ์๋ก ์ด ์ฌ๋ฌ ๋ฌธ์ , ์ค๋ ๋, ํ ์์ฒญ ๋ฐ ํ ๋ก ์ ํฉ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๊ฒ์ ๋ฐ๋ผ๊ฐ๊ธฐ ๋งค์ฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ ์ง์คํ์ง ์์ผ๋ฉด ํฐ ์ง์ ์ด ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ํ ์ต๊ทผ https://github.com/mrdoob/three.js/issues/11552 ์์ ๋ณผ ์ ์๋ฏ์ด three.js ๋ฐ TypeScript์ ๊ด๋ จํ์ฌ ๋ง์ ๊ฒฌ์ธ๋ ฅ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
TypeScript๊ฐ ํ๋ก ํธ์๋ ์ปค๋ฎค๋ํฐ์์ ์ ์ ๋ ๋์คํ๋๊ธฐ ๋๋ฌธ์ ์ฑํ์ ๋ํด ์๊ฐํ ์ ์์ต๋๋ค. ๋ํ npm์์ @types/three
์ ์ฃผ๊ฐ ๋ค์ด๋ก๋์ three
ํจํค์ง๋ฅผ ๋น๊ตํ๋ฉด ๋ง์ ์ฌ๋๋ค์ด ์ด๋ฏธ TypeScript์ ํจ๊ป Three.js๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค. 2019๋
1์ 1์ผ๋ถํฐ 2019๋
1์ 7์ผ๊น์ง ๊ธฐ๊ฐ ๋์ three
56414๊ฑด, @types/three
40588๊ฑด์ด์์ต๋๋ค(์์ธํ ๋ด์ฉ์ https://www.npmjs.com ์ฐธ์กฐ). /package/@types/three ๋ฐ https://www.npmjs.com/package/three). ๊ฒ๋ค๊ฐ ์ด๋ฏธ ์ฌ๋ฌ ํ๋ก์ ํธ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ฑธ์ณ ์ํ๋ ๋ง์ ์์
์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ํ์ ํฉ์น๊ณ TypeScript๋ฅผ ํ ๊ณณ์์ ์ ์งํ๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค.
๋ด ์๊ฒฌ์ผ๋ก๋ TypeScript๋ ๋จ์ ๋ณด๋ค ์ฅ์ ์ด ๋ ๋ง์ต๋๋ค(๋ฌผ๋ก ์ปค๋ฎค๋ํฐ์์๋ JavaScript์ ์ ํ๊ณผ TypeScript์ ์ ํ์ ๋ํด ๋ง์ ๋ ผ๋์ ์ฌ์ง๊ฐ ์์ต๋๋ค)
๋ด๊ฐ ๋ณด๋ ๋ช ๊ฐ์ง ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@types/three
์ ์๊ฐ ์์ต๋๋ค.declarationDir
๋ฅผ ์ฌ์ฉํ๋ฉด ์์ค ์ฝ๋์์ d.ts
ํ์ผ์ ์์ฑํ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ ํ์ดํ์ด ํญ์ ์ต์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค.TypeScript์ ๊ธฐ๋ฐ์ด ๋๋ ๋ชจ๋ ES6 ์์
์ ๋จผ์ ์๋ฃํด์ผ ํฉ๋๋ค. ๋ํ ES6์์ TypeScript๋ก์ ์ ํ์ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์ ๊ฒ์
๋๋ค(TypeScript๋ ์ ํ์ด ์๋ ์ต์ JavaScript์ ๋ง์ด ์ ์ฌํ๊ธฐ ๋๋ฌธ์). ํ์ดํ ๋ผ์ดํฐ๋ก ์์ํ๋ ค๋ฉด ์ฐ๋ฆฌ๋ ๋จ์ง ๋กค์
- ํ๋ฌ๊ทธ์ธ - ํ์ดํ ๋ผ์ดํฐ๋ฅผ ์ถ๊ฐ ํ ํ์๊ฐ (๋ด๊ฐ ์ ์ - ํ๋ฌ๊ทธ์ธ - typescript2๋ฅผ ๋กค์
). ๊ทธ๋ฐ ๋ค์ tsconfig.json
๋ง๋ค๊ณ ๋ชจ๋ TypeScript ์ปดํ์ผ๋ฌ ์ค์ ์ ํ์์ ๋ง๊ฒ ์ค์ ํด์ผ ํฉ๋๋ค. tslint
๋ ์ถ๊ฐํด์ผ ํ ์๋ ์์ต๋๋ค(์ด๋ฅผ ์ํ ๋กค์
ํ๋ฌ๊ทธ์ธ๋ ์์ผ๋ฉฐ, ์ด๋ฅผ rollup-plugin-tslint ๋ผ๊ณ ํจ). ๋น๋๊ฐ ์๋ํ ํ @types/three
๋ฐ three.ts ์ ๊ฐ์ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ํํ ์
๋ ฅ์ ํตํฉํ ์ ์์ต๋๋ค.
์ฒ์์ ์ฐ๋ฆฌ๋ ์๋ก์ด ๊ธฐ์ฌ์๋ค์ ์ํด ๊ทธ๊ฒ์ ๋ฌธ์ํํด์ผ ํ ๊ฒ์ ๋๋ค. Three.js ์ฌ์ฉ์์ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค(TypeScript๊ฐ JavaScript๋ก ๋ณํ๋๊ธฐ ๋๋ฌธ์). ๋ช ๋ฒ ๋ฐ๋ณตํ ํ์๋ TypeScript ๋ฐ JavaScript์ ๋ฌธ์์ ์ฝ๋ ์์ ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๊ฒ์ด ์ด๋ป๊ฒ ์ํ๋ ์ ์๋์ง์ ๋ํ ์ข์ ์๋ Stripe API ๋ฌธ์์ ๋๋ค.
๋น๋ ํ์ดํ๋ผ์ธ์ด ๋ ๋ณต์กํด์ง๊ณ ๋ ๋ง์ ์ข ์์ฑ์ด ์ถ๊ฐ๋ฉ๋๋ค. ๊ฒ๋ค๊ฐ ํ ์คํธ ์ค์ํธ์ ํ ์คํธ ๋ฌ๋๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ฌ์ด์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ํ ์๋ก์ด ๊ธฐ์ฌ์(๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์๊ฐ ์๋)์ ์ง์ ์ฅ๋ฒฝ์ TypeScript๋ฅผ ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ ๋์ ์ ์์ต๋๋ค. ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ฝ๋๋ ์ ํ์ ์ถ๊ฐํ ๋ ๋งค์ฐ ์ฅํฉํด์ง ์ ์์ต๋๋ค. TypeScript๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๊ฐ์ ๋ณํ ๋จ๊ณ๊ฐ ์๊ณ ๋ณํ์ ์์ ํ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ "ํ๋ซํผ"์์ ์กฐ๊ธ ๋ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ต๋๋ค(๋ฌผ๋ก ์์ฒด ๋ณํ์ ์์ฑํ ์ ์์ง๋ง ์ด๊ฒ์ ๋งค์ฐ ์ง๋ฃจํจ).
์์ํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ณ ์ํ์ง๋ง ์ด๋ @types/three
์ ๊ฐ์ ํ๋ก์ ํธ์์ ์ด๋ฏธ ์ํํ ๋ชจ๋ ๋
ธ๋ ฅ์ ๋ฌด์ํ๋ค๋ ์๋ฏธ์ด๊ธฐ๋ ํฉ๋๋ค. TypeScript๋ฅผ ์ฌ์ฉํ๋ Three.js์ ๋ชจ๋ ์ฌ์ฉ์๋ ๋น๊ณต์์ ์ผ๋ก Three๋ฅผ ์
๋ ฅํด์ผ ํฉ๋๋ค.
d.ts
ํ์ผ๋ก๋ง ์์ํด์ผ ํฉ๋๊น, ์๋๋ฉด TypeScript๋ก ์์ ํ ๊ฑด๋๋ฐ์ด์ผ ํฉ๋๊น?๋ฐํ์ ์ฑ๋ฅ์ ๊ด์ ์์ ๋๋ ๊ด์ฌ์ด ์์ต๋๋ค.
๋ํ AssemblyScript์ ๊ฐ์ ์คํ์ ๋๊ตฌ๋ ์์ค ์ฝ๋์ ํน์ ์ฑ๋ฅ ๋นํ์ ๋ถ๋ถ์ ๋ํ ์ต์ ์ด ๋ ์ ์์ต๋๋ค.
Three.js ์ฝ์ด + WASM ์คํ์ ํด์์ต๋๋ค.
https://github.com/takahirox/three.wasm-experimental
https://twitter.com/superhoge/status/1071132448426262529
์คํ์ ํตํด ์ ์ฒด ์ฝ์ด๋ฅผ WASM์ผ๋ก ์ด์ํ๋ฉด ๋ฐํ์ ์ฑ๋ฅ์ 1.5๋ฐฐ ๋ ๋น ๋ฅด๊ฒ ๊ฐ์ ํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๋ฐ๋ฉด ์์ ๋ถ๋ถ(์: Math ์ฝ๋(Vector3, Matrix4, ...))๋ง ๋ถ๋ถ์ ์ผ๋ก ์ด์ํ๋ ๊ฒ์ ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ํฐ JS-WASM ์ค๋ฒํค๋.
ํ์ง๋ง ์ ์ง ๊ด๋ฆฌ์ ์ด๋ ค์ ๋๋ฌธ์ ๊ธฐ์ฌ์๋ฅผ ์ํด ์ ์ฒด Three.js ์ฝ์ด๋ฅผ C++ ๋๋ Rust๋ก ๋ค์ ์์ฑํ๋ ๊ฒ์ ์ข์ง ์๋ค๊ณ ์๊ฐํ์ฌ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์์์ต๋๋ค. TypeScript + AssemblyScript๊ฐ Three.js์์ ์ ๋๋ก ์๋ํ๋์ง ๊ถ๊ธํฉ๋๋ค.
์์ํ๋ ๋ฐฉ๋ฒ? ์ฒ์์๋ d.ts ํ์ผ๋ก๋ง ์์ํด์ผ ํฉ๋๊น, ์๋๋ฉด ์์ ํ TypeScript๋ก ๊ฑด๋๋ฐ์ด์ผ ํฉ๋๊น?
์ฐ๋ฆฌ๋ ์ฃผ๋ก @types/three๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ *.d.ts ํ์ผ์ Three.JS์ ์ถ๊ฐํ๋ PR์ ์ ์ถํ ๊ฒ์ ๋๋ค. ์ ์ง์ ์ผ๋ก ์ํํ ์๋ ์์ต๋๋ค.
@takahirox ๋ฉ์ง ์์ :-) ์ ๋ Three.js ์ฃผ๋ณ์์ ์ผ๋ง๋ ๋ง์ ํ์ ์ ์ธ ์์ ์ด ์ผ์ด๋๋์ง ํญ์ ๋งค๋ฃ๋ฉ๋๋ค. ์ด๋ฌํ ๊ฐ๋ ์ฆ๋ช ์ด ๊ทธ๋ค์ง ์ฃผ๋ชฉ์ ๋ฐ์ง ๋ชปํ๋ ๊ฒ์ ์ ๊ฐ์ ๋๋ค. ๋ํ C++๋ Rust๋ก ๋ชจ๋ ๊ฒ์ ๋ค์ ์์ฑํ๋ ๊ฒ์ ์ ํ ์ฌํญ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. AssemblyScript๊ฐ ๊ทธ๋ด ์๋ ์์ง๋ง AssemblyScript๋ฅผ ์๋ํ์ง ์์๊ธฐ ๋๋ฌธ์ AssemblyScript์ ๋ํด ์ฝ์ ๋ด์ฉ์ ๋งํ ์ ์์ต๋๋ค. ํ์ง๋ง AssemblyScript๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ ๊ฐ ์ดํดํ๊ธฐ๋ก๋ ์ด๊ฒ์ด TypeScript์ ํ์ ์งํฉ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
@bhouston d.ts
ํ์ผ์ @types/three
์์ three
์ ์ฅ์๋ก ์ด๋ํ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํนํ ์ด๋ฌํ d.ts
ํ์ผ์ TypeScript ํ์ผ์์ ์์ฑ๋ ์ ์์ผ๋ฉฐ ํญ์ ๋๊ธฐํ๋์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค. d.ts
ํ์ผ์ด ํญ์ ์๋ํ๋ ๋ฐฉ์์ผ๋ก js ํ์ผ๊ณผ ๋๊ธฐํ๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด d.ts
ํ์ผ์ three
์ ์ฅ์์ ๋ฃ๋ ๊ฒ์ด ๋์์ด ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ํ ๊ทธ๊ฒ์ ์ ์ง ๋ณด์์ ๊ฒฐ์ ์ ๋ฌ๋ ค ์๋ค๊ณ ์๊ฐํฉ๋๋ค. TypeScript๋ฅผ ์ฑํํ๊ณ ์ถ์ง ์๋ค๋ฉด d.ts
ํ์ผ๋ ์ต์
์ด ๋ ์ ์์ต๋๋ค. ๋ํ ๋ช ๋
์์ TypeScript๋ฅผ ์ถ๊ฐํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด ์ด๋ฒ์๋ d.ts
ํ์ผ๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด์ต์ด ์ ๊ณ ์ผ์ด ๋ง์์ง๊น ๋๋ ต์ต๋๋ค. ํ์ง๋ง ์ด์ฉ๋ฉด ๋๋ ๊ทธ์ ๋ญ๊ฐ๋ฅผ ๊ฐ๊ณผํ๊ณ ์์์ง๋ ๋ชฐ๋ผ
@bhouston d.ts ํ์ผ์ @types/three์์ three repo๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด ๋ง์ ์๋ฏธ๊ฐ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํนํ ์ด๋ฌํ d.ts ํ์ผ์ TypeScript ํ์ผ์์ ์์ฑ๋ ์ ์์ผ๋ฉฐ ํญ์ ๋๊ธฐํ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
TypeScript๋ก ์ง์ ์ด๋ํ๋ฉด *.d.ts ํ์ผ์ด ํ์ํ์ง ์์ต๋๋ค. ๋ฌธ์ ๋ ํ์ฌ @types/three ํ๋ก์ ํธ๊ฐ ๋ณ๋๋ก ์ ์ง ๊ด๋ฆฌ๋๊ธฐ ๋๋ฌธ์ Three.JS์์ ํญ์ ์ฝ๊ฐ ๊ตฌ์์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๋ํ ๊ฐ๋ณ ํ์ผ์ด ์๋ three.js์ ๋น๋ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฌ๋งํ๋ฏ๋ก ํธ๋ฆฌ ์์ดํน ๋ฐ ๊ธฐํ ํํ์ ์ต์ ํ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ *.d.ts ํ์ผ์ ์ถ๊ฐํ๋ฉด ํ์ฌ ์ํ์์ ํ๋ก์ ํธ๊ฐ ํฌ๊ฒ ํฅ์๋์ง๋ง *.ts ํ์ผ๋ก ์ง์ ์ด๋ํ๋ ๊ฒ๋งํผ ์ข์ง๋ ์์ต๋๋ค.
*.ts ํ์ผ๋ก ์ง์ ์ด๋ํ ์ ์๋ค๋ฉด ๊ทธ๊ฒ์ด ๋ ๋์ ์ ํ์ ๋๋ค. ์ด์ ๋ํ ์ง์์ด ์๋์ง ํ์ ํ ์ ์์์ต๋๋ค.
๋๋ Three.JS๊ฐ ์ผ์ ์ ์ง์ ์ผ๋ก ํ๋ ๊ฒ์ ์ข์ํ๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ ๋น ๋ฑ ์ด ์๋๋ผ ์ฆ๋ถ ์ต์ ์ด์์ต๋๋ค.
@bhouston ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น ๋ฑ ์ฌ์์ฑ์ ๋ถ๊ฐ๋ฅํด์ ์ ์ง์ ์ผ๋ก ๋์ ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ TypeScript ๋ฌธ์๋ฅผ ์ฝ์ผ๋ฉด ts ๋ฐ js ํ์ผ์ ๋๋ํ ๊ฐ์ง ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋จ์ผ ํ์ผ์ ts๋ก ๋ณํํ๊ธฐ ์์ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์ฐธ์กฐํ์ธ์ .
๊ทธ๋ฌ๋ TypeScript์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๊ด๋ฆฌ์ ์ค ํ ์ฌ๋์ด ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ๋ ๊ฐ์ง ์ต์
( d.ts
ํ์ผ ๋๋ ts ๋ฐ js ํ์ผ ํผํฉ)์ด ๋ชจ๋ ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๊ฐ์ธ์ ์ทจํฅ๊ณผ ์คํ์ผ์ ๊ดํ ์ด๋ ์ ๋์ ๋ฌธ์ ์
๋๋ค.
@tchoartschi ์ด ๋ฌธ์ ๋ฅผ ์งํํ๊ณ ์ถ์ต๋๋ค. @mrdoob ์ด(๊ฐ) ๋๋ํ *.d.ts ํ์ผ์ ์น์ธํ์ต๋๋ค. TypeScript๋ฅผ ์ฌ๋๋ค์๊ฒ ์ฆ์ ๊ฐ์ํ์ง ์๊ณ *.t ๋จ๊ณ ๋์ ๋ชจ๋ ๊ธฐ์ฌ๋ฅผ ๋ค์ ์์ฑํ์ง ์๊ณ ๋ ์ฒ ํํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฑฐ๊ธฐ์ ๊ฐ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฐ๋ฆฌ๋ ์ฌ์ ํ *.js ํ์ผ์ *.ts ํ์ผ๋ก ์ ์ง์ ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๋ณ๋ ฌ *.d.ts ํ์ผ๊ณผ ๋ณํฉํฉ๋๋ค.
๋ณ๋ ฌ *.d.ts ํ์ผ์ ์ ๋ง ์ข์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ด๋ฉฐ ์ํํ๊ธฐ ์ฝ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ "์๋ฒฝํจ"์ด ์ ์ง์ ์ธ ๋ฐ์ ์ ๊ฐ๋ก๋ง๋ ๊ฒ์ ํ์ฉํ์ง ์๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
@bhouston ๋ฉ์ ธ์ ๐ ์ ๋ ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค. ๋๋ ๋น์ ์ด ์์ํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๋ด๊ฐ ์ฐธ์ฌํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ฉ๋ฉด ์ฐ๋ฆฌ๋ @types/three
์ ์ ์ง ๊ด๋ฆฌ์์ ์ด์ผ๊ธฐํ ์๋ ์์ต๋๋ค. Three.js ์์
๊ณต๊ฐ์์ Slack ์ฑ๋์ ๋ง๋ค์ด์ผ ํ๋์? ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋ ๋นจ๋ฆฌ ์กฐ์ ํ ์ ์๊ณ ์ฑํ
๊ณผ ๊ฐ์ ๋ํ๋ก ์ด ๋ฌธ์ ๋ฅผ ๋๋ฝํ์ง ์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ @mrdoob์ด ์์ ์ ๊ด์ ์ ์ถ๊ฐํ ๋๊น์ง ๊ฒ ์ต๋๋ค . ๊ทธ๊ฐ TypeScript์ ๋ฐ๋ํ๋ค๋ฉด ์๊ฐ์ ํฌ์ํด์๋ ์ ๋๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค.
@mrdoob์์ ์ถ๋ณต์ ๋ฐ์ผ๋ฉด ํฌํธ์ ์๊ฐ์ ํ ์ ํ ์ํฅ์ด ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก TypeScript๋ฅผ ์ง์ํ์ง ์์ ๋๊น์ง ์ ๋ JavaScript ES6์ ์ง์คํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
.js๋ก ์ปดํ์ผํ ์ ์๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง src์์ ์ง์ ๊ฐ์ ธ์ฌ ์ ์๊ธฐ ์์ํ์ผ๋ฉฐ ์ด๊ฒ์ด TypeScript๋ก ๋ณํํ๋ ๊ฒ๋ณด๋ค ํ๋ก์ ํธ์ ๋ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
https://github.com/mrdoob/three.js/blob/dev/examples/webgl2_sandbox.html#L37 -L48
*.d.ts ํ์ผ์ ๋๋ํ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ง๋ง ํ์ผ์ ์์ ํ๊ณ ์ต์ ์ํ๋ก ์ ์งํ ์ฌ๋์ด ํ์ํฉ๋๋ค.
@mrdoob ๋ธ๋ผ์ฐ์ ๊ฐ TypeScript๋ฅผ ์ง์ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์ต์ ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. TypeScript๋ฅผ ๊ตฌํํ๋ ค๋ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด์ ์ด๋ค ์๋๋ ๋ฃ์ง ๋ชปํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ํนํ ์์์ ๋น์ ์ ์ฐ๋ ค๋ฅผ ๋ด ๋๋ค. ๋๋ ์๋ก์ด ์๋ฅผ ๋ณด์ง ์์๋ค. ์์ ์์ ์์ค ํ์ผ์ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๊ฒ์ ์ ๋ง ๋ฉ์ง ์ผ์ ๋๋ค.
TypeScript์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ๊ณ src์์ JavaScript๋ฅผ ๊ฐ์ ธ์ฌ ๊ฐ๋ฅ์ฑ์ ๊ณ์ ์ ์งํ๋ ๊ฐ์ฅ ์ข์ ์๋ฃจ์ ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ฌผ๋ก TypeScript ํ์ผ์ ๋ณํํ ๋ค์ ํด๋น JavaScript ํ์ผ์ ๋๋ํ ๊ฐ์ง ์ ์์ง๋ง(TypeScript ์ปดํ์ผ๋ฌ์ ํ์ค ์ค์ ์) ์ด๋ ์ฝ๋ ๋ฒ์ ๊ด๋ฆฌ ๋ฑ์ ๋ณต์กํ๊ฒ ํ ์ ์์ต๋๋ค. ํด๋ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค.
three/
โโโ src/
โโโ cameras
โโโ PerspectiveCamera.ts // authored code
โโโ PerspectiveCamera.js // generated code by TS compiler
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํธ๋์คํ์ผ๋ ์ฝ๋๋ dist
, build
๋๋ bin
ํด๋ ์ด๋๊ฐ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋์๊ฒ ์กฐ๊ธ ์ด์ํด ๋ณด์
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋จ์ง ์๊ฒฌ์ผ ๋ฟ์ด๋ฉฐ ํ์คํ ์ฌ์ค์ ์๋๋๋ค. ์๋ง๋ ๋ ๋์ ์๋ฃจ์
์ ์๊ณ ์๋ TypeScript ๊ดด์ง๊ฐ ์์ ๊ฒ์
๋๋ค.
๋ค๋ฅธ ์ต์
์ @bhouston์ด ์ ์ํ d.ts
ํ์ผ์
๋๋ค. ๊ทธ๋ฌ๋ @mrdoob์ด ์ธ๊ธํ๋ฏ์ด d.ts
ํ์ผ์ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ ๊น๋ค๋ก์ธ ์ ์์ต๋๋ค. ํนํ ์ฅ๊ธฐ์ ์ธ ๊ด์ ์์. ๋ค์ ๋ช ๋
๋์ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด ์ ๋ง ๊ด๋ฆฌ ๊ฐ๋ฅํ๊ฐ์? d.ts
ํ์ผ์ ์ค์ ํ๋ ๋ฐ ๋์์ ์ค ์๋ ์์ง๋ง ํญ์ ์
๋ฐ์ดํธํ๋ ๋ฐ ๊ด์ฌํ ๊ฒ์ด๋ผ๊ณ ๋ณด์ฅํ ์๋ ์์ต๋๋ค. ์ ์๊ฒ๋ ์ผํ์ฑ ์ฌ๋กฏ์ ์ฐจ๋จํ๊ณ ๋ช ๊ฐ์ง ์์
์ ์๋ฃํ๋ ๊ฒ๋ณด๋ค ์ง์์ ์ผ๋ก ์๊ฐ์ ํฌ์ํ๋ ๊ฒ์ด ํจ์ฌ ์ด๋ ต์ต๋๋ค. @types/three
ํ๋ก์ ํธ๋ฅผ ์ง์ํ๋ ๊ฒ์ด ๋ ๋์์ง ์๋๋ฉด three
ํ๋ก์ ํธ์ ์ง์ d.ts
ํ์ผ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ ๋์์ง ์์ง ํ์คํ์ง ์์ต๋๋ค. @types/three
ํ๋ก์ ํธ๋ ์ด๋ฏธ ์๋ ์ค์ด๋ฉฐ d.ts
์ ๊ทผ ๋ฐฉ์๊ณผ ๋์ผํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํฉ๋๋ค. ๋น์ทํ ๊ณผ์ ๋ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ ์ ๋ณด๋ฅผ ์ ์งํ๋ ๊ฒ์
๋๋ค.
๊ทธ๋์ ์ ๊ฒฐ๋ก ์ ์ค๊ธฐ์ ์ผ๋ก Three.js์ TypeScript๊ฐ ๊ทธ๋ค์ง ์ข์ ๋ณด์ด์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ ๋ง์ TypeScript ์ฑํ์ ๋ณด๊ณ ์ถ์ง๋ง ์ ์๊ฒ๋ ๊ด์ฐฎ์ต๋๋ค.
๋ ๋ค๋ฅธ ์ ์:
Phaser ๊ฒ์ ํ๋ ์์ํฌ๋ ์ฃผ์์ ์ฌ์ฉํ์ฌ ์ ํ ์ ์๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ๋๊ตฌ๊ฐ ์คํ ์์ค๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ๋ฐ๋ฅธ ๋ฐฉ์์ผ๋ก ํจ์ ์์ /** ์ฃผ์ */์ ์ถ๊ฐํ์ฌ TS ์ ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Phaser ๊ฒ์ ํ๋ ์์ํฌ๋ ์ฃผ์์ ์ฌ์ฉํ์ฌ ์ ํ ์ ์๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค...
https://github.com/mrdoob/three.js/issues/11550 ๋ฐ https://github.com/mrdoob/three.js/issues/4725#issuecomment -41833647์ ์ฐธ์กฐ ํ์ธ์ .
ํ์ง๋ง *.d.ts
ํ์ผ์ ์ฃผ์์์ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ์ ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค. ๐ค
*.d.ts ํ์ผ์ ๋๋ํ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ง๋ง ํ์ผ์ ์์ ํ๊ณ ์ต์ ์ํ๋ก ์ ์งํ ์ฌ๋์ด ํ์ํฉ๋๋ค.
ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์์ค์ ๋ํด ํ์ดํ์ ํ์ธํ ์ ์๋ค๋ฉด ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋ ์ง ์๊ณ ๊ฒฐ๊ตญ TypeScript์์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ค์ ์์ฑํ ๊ณํ์ด ์๋ค๋ฉด ํ์ดํ์ ์ ์ฅ์๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ ์ด๋ ํ์ฌ ์ ์ง ๊ด๋ฆฌ์๋ TypeScript ์์ฒด๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด ํ๋ก์ ํธ๋ ์์ต๋๋ค https://github.com/semleti/three.ts
์๋ก ์์ํ๋ ๊ฒ๋ณด๋ค ์ดํด๋ณด๊ณ v100์ผ๋ก ๊ฐ์ ธ์ฌ ๊ฐ์น๊ฐ ์์ต๋๊น?
TypeScript์์ Three.js๊ฐ ์ฌ์์ฑ๋๋ ๊ฒ์ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฌํ ๊ฑฐ๋ํ ํ๋ก์ ํธ๋ฅผ ์ํ ์ ํ์ผ๋ก ์์
ํ๋ ๊ฒ์ด ์ผ๋ง๋ ๋ ์ข์์ง ๋ถ๋ช
ํ์ง ์์ ํ... ๊ทธ๋ฆฌ๊ณ ์ธ์ด์ ์์กดํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ์ง ์์ ์ ์๋ ์ด์ ๋ฅผ ์ถฉ๋ถํ ์ดํดํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ํ์ค์ด ์๋๋๋ค.
@schoening ์ด ํ ๋ก ์ ์์ํ ์ด์ ๋ Three.js์ ๊ฐ๋ ์ฆ๋ช TypeScript ๋ฒ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋งํฌํ ๋ฆฌํฌ์งํ ๋ฆฌ ๋๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋๋ค (https://github.com/flyover/three.ts, https://github.com/mrdoob/three.js/issues/11552#issuecomment-367026821). . ๋ถ๊ธฐ๋ Three.ts ๋ฒ์ ์ ์ฃผ์ ๋ฌธ์ ๋ ์ต์ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ์ผ๋ถ ๋ฒ์ ๋ค์ ์์ผ๋ฉฐ ์ด๊ฒ์ "ํต์ฌ" ํ์์ ์ ์ง ๊ด๋ฆฌํ์ง ์๋ ๋ชจ๋ ํ๋ก์ ํธ์ ๋ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. Three.js ํ๋ก์ ํธ๊ฐ TypeScript๋ฅผ ์ง์ํ์ง ์๋๋ค๋ฉด @types/three ํ๋ก์ ํธ๊ฐ ๋๊ธฐํ ์ํ๋ฅผ ์ ์งํ๋๋ก ๋๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ณณ์์ ํ์ ๋ชจ์์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
Three.js๊ฐ ๋จผ ๋ฏธ๋์ ์ด๋ ์์ ์์ TypeScript๋ฅผ ์ง์ํ ์์ ์ด๋ผ๋ฉด ๊ทธ๋ฌํ ์ ํ์ด ์ฑ๊ณตํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค. @donmccurdy๊ฐ ์ธ๊ธํ๋ฏ์ด ๋ ๋์ TypeScript ํธํ์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค. JSDoc์ด ์คํ ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์ด ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. JSDoc ์ฃผ์๋ณด๋ค ํ์ผ์ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ด๋ ต๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ *.d.ts
ํ์ผ์ ๋ํด์๋ ์์ง ํ์ ์ด ์์ง ์์ต๋๋ค. ๋ํ *.d.ts
ํ์ผ์ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์์ค์ ๋ํด ํ์ธํ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ @bhouston ์ ๊ทธ์ ์ ๊ทผ ๋ฐฉ์, ํนํ ์ต์ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋ํ ์ฐ๋ ค๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํ ์ ์์ต๋๋ค. ์๋ง๋ ์ด ๋ฌธ์ ์ ๋ํ ํ๋ช
ํ ํด๊ฒฐ์ฑ
์ด ์์ ๊ฒ์
๋๋ค.
์ง๊ธ๊น์ง ๋์๊ฒ ๊ฐ์ฅ ์ข์ ๊ฒฝํ์ vscode + d.ts
+ JSDoc์ด๋ฉฐ ๋ชจ๋ ๋์ผํ ํ๋ก์ ํธ์ ์์ผ๋ฏ๋ก ๋๊ธฐํ๋ฅผ ์ ์งํ๊ธฐ ์ฝ์ต๋๋ค.
์ต์ vscode ๋ฒ์ ์ d.ts
์์ ๋ณํฉ๋ ์ ์ธ๊ณผ JSDoc์ ์ ํ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก JavaScript ํ์ผ์ ๊ฒ์ฌํ๋ TypeScript ์ปดํ์ผ๋ฌ์ธ checkJs
์ง์์ ๊ฐ์ ํ์ต๋๋ค( tsconfig.json
์์ ํ์ฑํ ๊ฐ๋ฅ). JSDoc ๊ตฌ๋ฌธ์์ ๋ณด๊ธฐ ํํ "๊ณ ๊ธ" ์ ํ์ ๊ฒฝ์ฐ.
vscode๋ ๋ชจ๋ ์ ํ์ ํ์์ํฌ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ ์ ํ์ ์ค๋ฅ๋ ๊ฐ์งํ ์ ์์ผ๋ฏ๋ก ๋ฆฌํฉํ ๋ง์ด ์๋ฃ๋ ๋๋ง๋ค d.ts
์์ "๋ฒ๊ทธ/์ด์ " ์ ํ์ ์ฝ๊ฒ ๋ณด๊ณ ํธ์งํ ์ ์์ผ๋ฏ๋ก ๊ณ์ ๋๊ธฐํ๋ฉ๋๋ค. .
TypeScript์ ๊ฐ์ฅ ๋์ ์ ์ ์ถ๊ฐ ํธ๋์คํ์ผ ๋จ๊ณ๋ก, ๋ชจ๋ ๋จ์ผ ์ฝ๋ ๋ณ๊ฒฝ์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ์์ปจ๋, vscode์ JSDoc + d.ts
๋ ์ ํ์ ๋ชจ๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ง๋ง ์ถ๊ฐ๋ก ๋๋ฆฐ ํธ๋์คํ์ผ ๋จ๊ณ์ ๋จ์ ์ ์๋๋๋ค.
์ ์ผํ ๋ฌธ์ ๋ ๋ชจ๋ ๊ฒ์ 100% ์ ์ ํ JSDoc ์ ํ์ ์ถ๊ฐํ๋ ๊ฒ์ด๋ฏ๋ก vscode๊ฐ ์ด์ ์์กดํ ์ ์์ต๋๋ค( @constructor
, <strong i="16">@enum</strong> {number}
, <strong i="18">@param</strong> {number} n Number of steps
)
๋๋ ๋ํ @bhouston ๊ณผ @LuWangThreekit ์ด *.d.ts
ํ์ผ์ ๋ํ PR์ ๋ง๋ค์๋ค๋ ๊ฒ์ ์ฌ๊ธฐ์ ์ถ๊ฐํ๊ณ ์ถ์ ์ต๋๋ค. ์์ธํ ๋ด์ฉ์ https://github.com/mrdoob/three.js/issues/11552#issuecomment -454881060 ๋ฐ/๋๋ PR https://github.com/mrdoob/three.js/pull/์์ ํ์ธํ์ธ์. 15597
์ฐธ๊ณ : ๋ธ๋ผ์ฐ์ ์ TypeScript๋ Deno (GitHub์์ 32,000๊ฐ์ ๋ณ์ ๊ฐ์ง Rust์ V8 ๊ธฐ๋ฐ TypeScript ์ธํฐํ๋ฆฌํฐ)๊ฐ ๊ฐ์น๊ฐ ์๋ ๊ฒ์ผ๋ก ํ๋ช ๋๋ฉด ๊ทธ๋ฆฌ ๋ฉ์ง ์์ ์ ์์ต๋๋ค.
์ฝ์ด ๋ฐ ์์ ๋ชจ๋์ ๋ํ ์ ํ ์ ์ธ ํ์ผ์ ์ถ๊ฐํ์ผ๋ฏ๋ก ์ง๊ธ์ ๋ฌธ์ ๋ฅผ ๋ซ๋ ๊ฒ์ด ์ข์ต๋๋ค. TS ์ฌ์ฉ์๋ฅผ ์ํ ๊ฐ๋ฐ ๊ฒฝํ์ ํ์คํ ์๋ ๋ณด๋ค ๋์์ง ๊ฒ์ ๋๋ค.
TypeScript์ ๊ด์ฌ์ด ์๋ ๋ชจ๋ ์ฌ๋์ ์ํด...
@bhouston ์ด ์์ ํ๊ณ ์๋ ์ด Three.js์์ ์๊ฐ์ ๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ๋ฌ๋ถ์ด ์ฐพ๊ณ ์๋ ๊ฒ์ผ ์ ์์ต๋๋ค.
@bhouston ์ Threeify ๋ ํ๋ฅญํ ํ๋ก์ ํธ์ธ ๊ฒ ๊ฐ์ต๋๋ค ๐คฉ SemVer๊ฐ ์๊ณ ์๋ฏธ๋ก ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. TypeScript ์์ ๊ตฌ์ถ๋์์ผ๋ฉฐ ํต์ฌ ๊ฐ์น๋ Tree Shaking, Small Build Files ๋ฑ๊ณผ ๊ฐ์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค์ด Three.js์์๋ ๋ณด๊ณ ์ถ์ดํ๋ ๋ชจ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์ ๋ Threeify์ ๋ค์ด๊ฐ๋ ์์ ์ ์ ๋ง ์์คํ๊ฒ ์๊ฐํฉ๋๋ค๐
@bhouston @mrdoob ํ์ง๋ง ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ ๋ง ํ์ํ๊ฐ์? ์ปค๋ฎค๋ํฐ๋ฅผ ๋๋๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ต๋๊น? ๋ง์ ๋ํ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ๊ฐ ์ฝ๋์ ์ปค๋ฎค๋ํฐ์ ํฌํฌ ์์ด SemVer, TypeScript, Tree Shaking ๋ฑ๊ณผ ๊ฐ์ ๊ฒ์ผ๋ก ์ ํํ ์ ์์์ต๋๋ค.
@pailhead ๊ฐ Three.js๋ก ์์ ํ๋ ๊ฒ์ ๋ํ ํฅ๋ฏธ๋ก์ด ๊ธฐ์ฌ๋ฅผ ์์ฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ์๊ฐ์๋ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค: ๋ค๋ฅธ three.js ๋ฒ์ ์ผ๋ก ์์ ํ๊ธฐ . ๊ทธ๋์ ์ปค๋ฎค๋ํฐ์ Threeify ๊ฐ ๊ตฌํํ๋ ค๊ณ ํ๋ ๊ฒ๋ค์ ์ฑํํ๋ ๋ฐ ๋์์ ์ฃผ๊ณ ์ถ์ ์ฌ๋๋ค์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ๋ณด๋ค ํ์ ํฉ์ณ Three.js๋ฅผ ๊ฐ์ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์์.
์ธํฐ๋ท์ ๋ง์ ๊ธฐ์ฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก Pailhead์ ๊ธฐ์ฌ๋ ํธํฅ๋์ด ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค๋ฅธ ์ฉ๋๋ ๊ณ ๋ คํ์ง ์์ต๋๋ค.
์๋ก์ ๊ฐ๋ฐ ์ํฌํ๋ก๋ฅผ ๋ฐฉํดํ์ง ์๊ณ ๋ชจ๋ ์ ํ์ js ๊ฐ๋ฐ์๋ฅผ ์์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ๋ @pailhead ์ ๋งค์ฐ ์ ์ฌํ ๊ฒฝํ์ Vue , Ember , React , Svelte , Angular ์ ๊ฐ์ ์ต์ ํ๋ก ํธ ์๋ ํ๋ ์์ํฌ๋ก ์์ ํ๋ ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ์ผ๋ฐ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Vue ๊ฐ ์ด๋ป๊ฒ ํ๋์ง ์ดํด๋ด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ์น์ฌ์ดํธ๋ฅผ ํฅ์์ํค๋ ค๋ PHP ํ๋ก๊ทธ๋๋จธ๋ถํฐ ์ ๊ตํ ์น ์ฑ์ ๊ฐ๋ฐํ๋ ์ฌ๋๋ค์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๋ณด์ ํ๊ณ ์์ต๋๋ค. ๋ค์ํ ์ ํ์ ์ฌ์ฉ์ ๊ฐ์ ๊ณก์ ์ ๋งค์ฐ ๋ฉ์ง๊ฒ ๊ตฌ๋ถ๋ฆฝ๋๋ค.
๋ํ ๋ชจ๋ ์ฌ๋์ ๊ฒฝํ์ ์์์ํค์ง ์๊ณ ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ์ ์ ๊ทธ๋ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํ๋ฅญํ ์๊ฐ ์์ต๋๋ค. Ember ๊ฐ ์ด๋ป๊ฒ ์น ์ปค๋ฎค๋ํฐ์ ์ ๊ณ ํ์ค๊ณผ ํจ๊ป ์ง์์ ์ผ๋ก ์ฑ์ฅํ ์ ์์๋์ง ์ดํด๋ณผ ์ ์์ต๋๋ค.
์ต์ ์น ๊ฐ๋ฐ์ ์คํํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ํ์ง๋ง ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ๊ณ ๊ทธ๋ฐ ๋ถ๋ถ์ ๋ํด ๋ง์ ์๊ฐ์ ํด์ผ ํ๋ค๋ ๋ฐ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ด๊ฒ์ด ์ฌ๋ฌ ๊ฐ์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๊ฒ๋ณด๋ค ํ๋์ ์ธ ๊ฒฝํ์ ๋ง๋ค๊ธฐ ์ํด ํจ๊ป ์ผํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํ๋ ์ด์ ์ ๋๋ค.
์ด ์ค๋ ๋๋ฅผ ์ดํด๋ณด๋ฉด ์ด๋ฏธ Three.ts์ Threeify๋ผ๋ ๋ ๊ฐ์ ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ์์ผ๋ฉฐ ์๋ง๋ ๋ ๋ง์ ํ๋ก์ ํธ๊ฐ ์์ ๊ฒ์ ๋๋ค. ํฌํฌ์ ๋ณ๋์ ์ด๋์ ํฐ๋ธ๋ฅผ ๋ง๋๋ ๋์ ํจ๊ป ์์ ํ๋ค๋ฉด ์ ์ฒด Three.js ์ปค๋ฎค๋ํฐ์ ์์ฒญ๋ ์ด์ ์ด ์์ ๊ฒ์ด๋ผ๊ณ ์ง์ฌ์ผ๋ก ๋ฏฟ์ต๋๋ค.
@mrdoob , ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ธฐ ์ํ ์ค๋ฌธ์กฐ์ฌ๋ ์ด๋ป์ต๋๊น? typescript์ ์ฌ์ฉ์ ํ ๊ฐ์ง์ด๋ฉฐ ์ถ์ ์น๋ฅผ ์ป์ ์ ์๋ ๋ค๋ฅธ ์ง์ ๋ณ์๊ฐ ์๋ค๊ณ ํ์ ํฉ๋๋ค.
@roomle-build ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ TypeScript๋ก ๋ณํํ ๋์ ๋จ์ ์ ๋์ดํ ์ ์์ต๋๊น?
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ TypeScript๋ฅผ ์ ์ง์ ์ผ๋ก ์ฑํํ ๋์ ์ค์ง์ ์ธ ๋จ์ ์ ๋ณด์ด์ง ์์ต๋๋ค. ๋์กฐ์ ์ผ๋ก ๋ง์ ์ด์ ์ ๊ฐ์ ธ์ฌ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค(๋ง์ ํ๋ก์ ํธ๊ฐ TypeScript๋ก ๋ณํํ๋ ์ด์ ์ ๋๋ค). ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ฌผ๋ก ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด์ ์ ๋งํ๋ฏ์ด ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ผ๋ฉฐ ์ฌ๊ธฐ์์ ์ด๋ฌํ ์๋ฃจ์ ์ ๋ณต์ฌํ ์ ์์ต๋๋ค(์: Vue ๋๋ Ember ).
ํ์ง๋ง ๋ด๊ฐ ์ง์ ํ๊ณ ์ถ์ ์ฃผ์ ๋ด์ฉ์ ์ปค๋ฎค๋ํฐ๊ฐ ๋ถ์ด๋๊ณ ์ฐ๋ฆฌ๊ฐ ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ํฌํฌ์ ํฌํฌ๊ฐ ์๋ ๊ฒฝ์ฐ ์ํํ๋ค๊ณ ์๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค. ๋๋ ํํธํ์ ํฌ์ด ์๋๋ฉฐ ์๋ก ๋ฐ๋ํ๋ ๊ฒ๋ณด๋ค ํจ๊ป ์ผํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฌผ๋ก ๊ฒฝ์์ด ๋๋จํ๊ณ ์ด๊ฒ์ด Three.js ํ๋ก์ ํธ์์๋ ํ์ ์ ๋ฒ์ฐฝํ๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์ฃผ์ฅํ๋ ๋ค๋ฅธ ์ฌ๋๋ค๋ ์์ง๋ง ์ ๋ ํ์ ์ ๋ ๋ฏฟ์ต๋๋ค ๐
three.js
์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์ ๊ทผ์ฑ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. @roomle-build๊ฐ ๋์ดํ ์์ ์ ์์ง์ ์ฌ์ฉ ํธ์์ฑ์ ์
ํ์ํฌ ์ ์์ต๋๋ค(ํนํ ์ด๋ณด์์ ๊ฒฝ์ฐ). ๋์ฒด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋์ง ์๋ ํ JavaScript๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ ๊ฒ์ ํฌํํฉ๋๋ค.
๋๋ ํํธํ์ ํฌ์ด ์๋๋ฉฐ ์๋ก ๋ฐ๋ํ๋ ๊ฒ๋ณด๋ค ํจ๊ป ์ผํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์น์ 3D ์์ง์ด ๋ ๋ง๋ค๊ณ ํด์ ๊ฐ๋ฐ์๊ฐ ์๋ก ๋ฐ๋ํ๋ ๊ฒ์ ์๋๋๋ค. ๋๋ก๋ ์๋ก ๋ค๋ฅธ ํ๋ก์ ํธ๊ฐ ์๋ก ๋ค๋ฅธ ๊ฒ์ ์ด์ ์ ๋ง์ถ๋ ๊ฒ์ด ์ค์ ๋ก ๋ ์ข์ต๋๋ค.
three.js
์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์ ๊ทผ์ฑ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. @roomle-build๊ฐ ๋์ดํ ์์ ์ ์์ง์ ์ฌ์ฉ ํธ์์ฑ์ ์ ํ์ํฌ ์ ์์ต๋๋ค(ํนํ ์ด๋ณด์์ ๊ฒฝ์ฐ).
๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ ๊ทผ์ฑ์ ์ํฅ์ ์ฃผ์ง ์๊ณ TypeScript์์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ ๋ ์ด ๋ฐฉ๋ฒ์ด ํ์๋์ง ์์ต๋๋ค. ์ด์ ์ Vue์ Ember๋ฅผ ์๋ก ๋ค์์ต๋๋ค. TypeScript์ ๋ํ ์
์ฅ์ ๊ฒํ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ๊น์? ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ํ๋ก์ ํธ์ ์ฑ๊ณต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋ณต์ฌํ๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ฒ์ ๋ฐ๋ช
ํ ํ์๊ฐ ์์ต๋๋ค. ๋ํ TypeScript๋ IDE๊ฐ ์ ์ฒด ํ๋ก์ ํธ์ ๊ฐ์๋ฅผ ๋ ๋นจ๋ฆฌ ์ป์ ์ ์๋๋ก ๋์์ฃผ๊ธฐ ๋๋ฌธ์ ๊ธฐ์ฌ์๊ฐ three.js
๋ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋ค๋ ์ด์ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋์ฒด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋์ง ์๋ ํ JavaScript๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ ๊ฒ์ ํฌํํฉ๋๋ค.
๊ฐ๊น์ด ๋ฏธ๋์๋ ์ด๋ฐ ์ผ์ด ์ผ์ด๋์ง ์์ ๊ฒ์ด๋ฏ๋ก TypeScript์ ๋ํด ๋ณด๋ค ์ค์ฉ์ ์ธ ๊ด์ ์ ๊ฐ์ ธ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์์ ์ผ๋ฏ์ด ํ๋ก์ ํธ์ ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ๊ตฌ์ฑ๋๋ ๋ฐฉ์์ ๋ฌธ์ ์ผ ๋ฟ์ด๋ฉฐ ์ฌ์ฉ ํธ์์ฑ๊ณผ ๊ฐ๋ฐ ๊ฒฝํ ๊ฐ์ ์ ์ถฉ์ ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ์ฐ๋ฆฌ์ ์ ์ฅ์ ๋ถ๋ช ํ ํ๋ค๊ณ ์๊ฐํ๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก TypeScript๋ฅผ ์ง์ํ์ง ์์ ๋๊น์ง ์ ๋ JavaScript ES6์ ์ง์คํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
.js๋ก ์ปดํ์ผํ ์ ์๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง src์์ ์ง์ ๊ฐ์ ธ์ฌ ์ ์๊ธฐ ์์ํ์ผ๋ฉฐ ์ด๊ฒ์ด TypeScript๋ก ๋ณํํ๋ ๊ฒ๋ณด๋ค ํ๋ก์ ํธ์ ๋ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
https://github.com/mrdoob/three.js/blob/dev/examples/webgl2_sandbox.html#L37 -L48
*.d.ts ํ์ผ์ ๋๋ํ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ง๋ง ํ์ผ์ ์์ ํ๊ณ ์ต์ ์ํ๋ก ์ ์งํ ์ฌ๋์ด ํ์ํฉ๋๋ค.