ํ์ ์คํฌ๋ฆฝํธ, ์ ๋ง ํด์ถ๋ ๊น?
์ข ์ง๋ ์ด์ผ๊ธฐ์ง๋ง ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์ ๋จ๊ฑฐ์ด ๋ ผ์์ด ๋ฒ์ด์ง๊ณ ์์ต๋๋ค. Ruby on Rails์ ์ฐฝ์์ David Heinemeier Hansson(DHH)์ด hotwired/turbo ํ๋ก์ ํธ์์ TypeScript๋ฅผ ์ ๊ฑฐํ๋ฉด์ ์์๋ ์ด ๋ ผ์์ "TypeScript๋ ๊ณผ์ฐ ํ์ํ๊ฐ?"๋ผ๋ ๊ทผ๋ณธ์ ์ธ ์ง๋ฌธ์ ๋์ง๊ณ ์์ฃ .
TypeScript๋ 2012๋ ๋ง์ดํฌ๋ก์ํํธ์์ ์ถ์ํ ์ดํ, JavaScript์ ์ ์ ํ์ ์ ์ถ๊ฐํด ๋๊ท๋ชจ ํ๋ก์ ํธ์ ์ ์ง๋ณด์์ฑ์ ๋์ฌ์ฃผ๋ ๋๊ตฌ๋ก ์๋ฆฌ๋งค๊นํ์ต๋๋ค. ํ์ง๋ง DHH์ ๊ฒฐ์ ์ดํ, Svelte ๋ฑ ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ TypeScript ์ ๊ฑฐ๋ฅผ ๊ฒํ ํ๋ฉด์ ๊ฐ๋ฐ์๋ค์ ํผ๋์ ๋น ์ก์ด์.
์ด๋ฒ ๊ธ์์๋ TypeScript๋ฅผ ๋๋ฌ์ผ ์ฐฌ๋ฐ ๋ ผ์์ ๊ท ํ์๊ฒ ์ดํด๋ณด๊ณ , ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ์ TypeScript๊ฐ ์ ๋ง ํ์ํ์ง ํ๋จํ ์ ์๋ ๊ธฐ์ค์ ์ ์ํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
TypeScript๋ฅผ ๋ฐ๋ํ๋ ๋ชฉ์๋ฆฌ
DHH๊ฐ Turbo 8์์ TypeScript๋ฅผ ์ ๊ฑฐํ ์ด์
DHH๋ ์์ ์ ๋ธ๋ก๊ทธ ๊ธ "Turbo 8 is dropping TypeScript"์์ ์ ๊ฑฐ ๊ฒฐ์ ์ ๋ฐฐ๊ฒฝ์ ์์งํ๊ฒ ๋ฐํ์ต๋๋ค. ๊ทธ์ ์ฃผ์ฅ์ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์์:
โTypeScript๋ ๋ด ๊ฐ๋ฐ ๊ฒฝํ์ ๊ธฐ์จ์ ๋ํ๊ธฐ๋ณด๋ค๋ ๋ฐฉํด๊ฐ ๋ฉ๋๋ค. ๋ช
์์ ์ธ ์ปดํ์ผ ๋จ๊ณ๊ฐ ํ์ํ ๋ฟ๋ง ์๋๋ผ, ํ์
์ฒด์กฐ(type gymnastics)๋ก ์ฝ๋๋ฅผ ์ค์ผ์ํค์ฃ . ์ฌ์์ผ ํ ๊ฒ๋ค์ด ์ด๋ ค์์ง๊ณ , ์ด๋ ค์ด ๊ฒ๋ค์ ๊ฒฐ๊ตญ any๊ฐ ๋์ด๋ฒ๋ฆฝ๋๋ค.โ
DHH๋ ES6 ์ดํ JavaScript๊ฐ ์ถฉ๋ถํ ์ฑ์ํ ์ธ์ด๊ฐ ๋์๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ํนํ ํด๋์ค ๋ฌธ๋ฒ๊ณผ ๋ค์ํ ๊ฐ์ ์ฌํญ๋ค์ด ์ถ๊ฐ๋๋ฉด์, JavaScript ์์ฒด๋ง์ผ๋ก๋ ์ถฉ๋ถํ ์ฆ๊ฑฐ์ด ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํ๋ค๋ ๊ฑฐ์์.
์ฝ๋ ์ค์ผ๊ณผ ๋ณต์ก์ฑ ๋ฌธ์
TypeScript ๋ฐ๋๋ก ์๋ค์ด ๊ฐ์ฅ ์์ฃผ ์ธ๊ธํ๋ ๋ฌธ์ ๋ ๋ฐ๋ก '์ฝ๋ ์ค์ผโ์ ๋๋ค. ๊ฐ๋จํ JavaScript ์ฝ๋๊ฐ TypeScript๋ก ์์ฑ๋๋ฉด ํ์ ์ ์๋ก ์ธํด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์.
// TypeScript
function processUser(user: User & { permissions: Permission[] }): Promise<ProcessedUser | null> {
// ๊ตฌํ
}
// JavaScript
function processUser(user) {
// ๊ตฌํ
}
์ ์์์ฒ๋ผ TypeScript๋ ํ์ ์ ์๋ฅผ ์ํด ์ถ๊ฐ์ ์ธ ์ฝ๋๊ฐ ํ์ํฉ๋๋ค. ์๊ท๋ชจ ํ๋ก์ ํธ๋ ํ๋กํ ํ์ ๋จ๊ณ์์๋ ์ด๋ฌํ ํ์ ์ ์๊ฐ ์คํ๋ ค ๊ฐ๋ฐ ์๋๋ฅผ ๋ฆ์ถ ์ ์์ฃ .
์ปดํ์ผ ์๊ฐ๊ณผ ๋น๋ ํ๋ก์ธ์ค
TypeScript๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์คํ๋ ์ ์๊ธฐ ๋๋ฌธ์ JavaScript๋ก ๋ณํํ๋ ์ปดํ์ผ ๊ณผ์ ์ด ํ์์ ๋๋ค. ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ด ์ปดํ์ผ ์๊ฐ์ ์ ์ ๋์ด๋๊ฒ ๋๊ณ , ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ๋ถ๋ด์ ์ฃผ๊ฒ ๋ผ์.
DHH๋ "JavaScript๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ์ธ์ด"๋ผ๋ ์ ์ ๊ฐ์กฐํ๋ฉฐ, ๋๊ตฌ ์์ด ์์ ๋กญ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ด ํฐ ์ถ๋ณต์ด๋ผ๊ณ ๋งํฉ๋๋ค.
TypeScript๋ฅผ ์ง์งํ๋ ์ด์
์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ
TypeScript์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋๊ท๋ชจ ํ๋ก์ ํธ์์์ ์ ์ง๋ณด์์ฑ์ ๋๋ค. ํ์ ์์คํ ์ ์ฝ๋์ ์๋๋ฅผ ๋ช ํํ๊ฒ ํํํ๊ณ , ๋ฆฌํฉํ ๋ง ์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํด์ค์.
interface UserProfile {
id: string;
name: string;
email: string;
createdAt: Date;
}
function updateUserEmail(profile: UserProfile, newEmail: string): UserProfile {
return {
...profile,
email: newEmail
};
}
์ ์ฝ๋์์ ๋ง์ฝ UserProfile ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋๋ฉด, TypeScript๋ ์ํฅ์ ๋ฐ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์ฆ์ ์๋ ค์ค๋๋ค. ์๋ฐฑ ๊ฐ์ ํ์ผ์ ์ผ์ผ์ด ํ์ธํ ํ์๊ฐ ์์ฃ .
์๋ฌ ๊ฐ์์ ์์ ์ฑ
JavaScript๋ ๋ฐํ์์ ํ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉ์๊ฐ ์๋ฌ๋ฅผ ๋ง๋ ์ ์๋ค๋ ๋ป์ด์์. ๋ฐ๋ฉด TypeScript๋ ์ปดํ์ผ ๋จ๊ณ์์ ์ด๋ฐ ์๋ฌ๋ฅผ ์ก์๋ ๋๋ค.
function calculateTotal(price: number, quantity: number): number {
return price * quantity;
}
calculateTotal("100", 5); // ์ปดํ์ผ ์๋ฌ: string์ number์ ํ ๋นํ ์ ์์ต๋๋ค
์ ๋ก์ด๋์ "๋ํ ํ๋ก์ ํธ์์ TypeScript๋ ์์ ์ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ์ ํ์์ "์ด๋ผ๊ณ ๊ฐ์กฐํ์ต๋๋ค. ์๋น์ค ์์ ์ฑ์ด ์ค์ํ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์๋ ์ด๋ฐ ์ฌ์ ์๋ฌ ๋ฐฉ์ง๊ฐ ๋งค์ฐ ์ค์ํ์ฃ .
ํ ํ์ ๊ณผ ๊ฐ๋ฐ์ ๊ฒฝํ
TypeScript๋ IDE์ ์๋์์ฑ, ๋ฆฌํฉํ ๋ง ๋๊ตฌ, ์ค์๊ฐ ์๋ฌ ์ฒดํฌ ๋ฑ ๋ฐ์ด๋ ๊ฐ๋ฐ ๋๊ตฌ ์ง์์ ์ ๊ณตํฉ๋๋ค. ํนํ ํ ํ๋ก์ ํธ์์ ๋ค๋ฅธ ๊ฐ๋ฐ์์ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ ๋ ํ์ ์ ์๋ ์ด์์๋ ๋ฌธ์ ์ญํ ์ ํด์.
/**
* ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๊ณ ์ฒ๋ฆฌํฉ๋๋ค
*/
function validateUser(user: User): ValidationResult {
// IDE๊ฐ User ํ์
์ ๋ชจ๋ ์์ฑ์ ์๋์์ฑํด์ค๋๋ค
if (!user.email.includes('@')) {
return { valid: false, error: 'Invalid email' };
}
return { valid: true };
}
์๋ก์ด ํ์์ด ํฉ๋ฅํ์ ๋, ํ์ ์ ์๋ง ๋ด๋ ํจ์๊ฐ ์ด๋ค ์ธ์๋ฅผ ๋ฐ๊ณ ๋ฌด์์ ๋ฐํํ๋์ง ๋ช ํํ๊ฒ ์ ์ ์์ต๋๋ค.
์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์์ ๊ฐ์น
๋๊ธฐ์ ์ด๋ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ๋ค๋ฃจ๋ ํ๋ก์ ํธ์์ TypeScript์ ๊ฐ์น๋ ๋์ฑ ๋น์ ๋ฐํฉ๋๋ค. ์๋ฐฑ ๋ช ์ ๊ฐ๋ฐ์๊ฐ ํ์ ํ๊ณ , ์๋ ๊ฐ ์ ์ง๋ณด์ํด์ผ ํ๋ ์ฝ๋๋ฒ ์ด์ค์์๋ ํ์ ์์ ์ฑ์ด ํ์์ ์ด์์.
์ค์ ๋ก Microsoft, Google, Airbnb ๊ฐ์ ๋๊ธฐ์ ๋ค์ด TypeScript๋ฅผ ์ ๊ทน์ ์ผ๋ก ๋์ ํ ์ด์ ๋ ๋ฐ๋ก ์ฌ๊ธฐ์ ์์ต๋๋ค.
๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์ ๋ฐ์
์๊ฐ๋ฆฐ ์๊ฒฌ๋ค
DHH์ TypeScript ์ ๊ฑฐ ๊ฒฐ์ ์ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์ ๋จ๊ฑฐ์ด ๋ ผ์์ ๋ถ๋ฌ์ผ์ผ์ผฐ์ต๋๋ค. ํ๊ตญ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์๋ ์๊ฒฌ์ด ๊ทน๋ช ํ๊ฒ ๊ฐ๋ ธ์ด์.
์ฐฌ์ฑํ๋ ์ ์ฅ:
- โ์์ ํ๋ก์ ํธ์์๋ TypeScript๊ฐ ์ค๋ฒ์์ง๋์ด๋ง์ด๋คโ
- โJavaScript์ ์ ์ฐ์ฑ์ด TypeScript์ ์๊ฒฉํจ๋ณด๋ค ๋ซ๋คโ
- โ์ปดํ์ผ ๋จ๊ณ๊ฐ ์๋ ๊ฒ์ด ๊ฐ๋ฐ ์๋๋ฅผ ๋์ธ๋คโ
๋ฐ๋ํ๋ ์ ์ฅ:
- โ๋ํ ํ๋ก์ ํธ์์๋ TypeScript ์์ด ์ ์ง๋ณด์๊ฐ ๋ถ๊ฐ๋ฅํ๋คโ
- โํ์ ์์ ์ฑ์ ์ ํ์ด ์๋ ํ์๋คโ
- โ์ด๊ธฐ ๋ฌ๋์ปค๋ธ๋ ์์ง๋ง ์ฅ๊ธฐ์ ์ผ๋ก๋ ์ด๋์ด๋คโ
Turbo์์ TypeScript ์ ๊ฑฐ ์์ ์ด merge ๋์์ ๋ ๋ฐ์์ ๋์ฒด๋ก ๋ถ์ ์ ์ด์์ต๋๋ค. ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ด ๊ฒฐ์ ์ ์ฐ๋ ค๋ฅผ ํ๋ช ํ์ฃ .
์กฐ์ฝ๋ฉ๋์ ์๊ฒฌ
์ ๋ช ์ ํ๋ฒ ์กฐ์ฝ๋ฉ๋์ "Svelte์์๋ TypeScript๊ฐ ํด์ถ๋๋ค"๋ฉฐ, ์์ฐ์ฑ์ ๋ฐฉํด๊ฐ ๋๋ค๋ ์ด์ ๋ก ๋ด๋ฆฐ ๊ฒฐ์ ์ด๋ผ๊ณ ์ธ๊ธํ์ต๋๋ค. ์ด์ฒ๋ผ ์ผ๋ถ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ TypeScript๋ฅผ ์ ํ์ ์ผ๋ก ๋ง๋ค๊ฑฐ๋ ์ ๊ฑฐํ๋ ์์ง์์ด ๋ณด์ด๊ณ ์์ด์.
JSDoc์ด๋ผ๋ ๋์
TypeScript์ ๋์์ผ๋ก ์์ฃผ ์ธ๊ธ๋๋ ๊ฒ์ด ๋ฐ๋ก JSDoc์ ๋๋ค. JSDoc์ ์ฃผ์์ ํตํด ํ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ์์ด์์.
/**
* @param {string} name - ์ฌ์ฉ์ ์ด๋ฆ
* @param {number} age - ์ฌ์ฉ์ ๋์ด
* @returns {Object} ์ฌ์ฉ์ ๊ฐ์ฒด
*/
function createUser(name, age) {
return { name, age };
}
JSDoc์ ์ปดํ์ผ ๋จ๊ณ ์์ด ํ์ ํํธ๋ฅผ ์ ๊ณตํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ํ์ง๋ง TypeScript๋งํผ์ ๊ฐ๋ ฅํ ํ์ ์ฒดํฌ๋ IDE ์ง์์ ์ ๊ณตํ์ง๋ ๋ชปํด์. ๋ง์ ๊ฐ๋ฐ์๋ค์ด "JSDoc์ ์ธ ๋ฐ์์ผ ๊ทธ๋ฅ TypeScript๋ฅผ ์ฐ๋ ๊ฒ ๋ซ๋ค"๋ ์๊ฒฌ์ ๋ด๋๊ณ ์์ต๋๋ค.
JavaScript์ TypeScript์ ๋ฏธ๋
ECMAScript์ Type Annotations ์ ์
ํฅ๋ฏธ๋กญ๊ฒ๋ ECMAScript TC39 ์์ํ์์๋ JavaScript์ ์ง์ ํ์ ์ฃผ์(Type Annotations)์ ์ถ๊ฐํ๋ ์ ์์ ๊ฒํ ํ๊ณ ์์ต๋๋ค. ํ์ฌ Stage 1 ๋จ๊ณ์ ์๋ ์ด ์ ์์ด ํต๊ณผ๋๋ฉด, JavaScript ์์ฒด์์ ํ์ ์ ํํํ ์ ์๊ฒ ๋ผ์.
// ๋ฏธ๋์ JavaScript?
function add(a: number, b: number): number {
return a + b;
}
์ค์ํ ์ ์ ์ด ํ์ ์ฃผ์๋ค์ด ๋ฐํ์์๋ ๋ฌด์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ์คํํ ์ ์๋ ํํ๊ฐ ๋๋ ๊ฑฐ์ฃ . ์ด๋ ๊ฒ ๋๋ฉด TypeScript์ ์ปดํ์ผ ๋จ๊ณ ์์ด๋ ํ์ ์์ ์ฑ์ ํ๋ณดํ ์ ์์ ๊ฒ์ผ๋ก ๊ธฐ๋๋ฉ๋๋ค.
๊ณต์กด์ ๊ฐ๋ฅ์ฑ
Type Annotations ์ ์์ด ํ์คํ๋๋๋ผ๋, TypeScript๊ฐ ์์ ํ ์ฌ๋ผ์ง์ง๋ ์์ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. TypeScript๋ ๋จ์ํ ํ์ ์ฃผ์ ์ด์์ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๊ณ ์๊ฑฐ๋ ์:
- ๊ณ ๊ธ ํ์ ์์คํ : ์ ๋ค๋ฆญ, ์ ๋์จ ํ์ , ์ธํฐ์น์ ํ์ ๋ฑ
- ํ์ ์ถ๋ก : ๋ช ์์ ์ผ๋ก ํ์ ์ ์์ฑํ์ง ์์๋ ์๋์ผ๋ก ํ์ ์ ํ์
- ๋ฐ์ฝ๋ ์ดํฐ: ๋ฉํํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฅ
- ์๊ฒฉํ ํ์ ์ฒดํฌ: ์ปดํ์ผ๋ฌ ์ต์ ์ ํตํ ์ธ๋ฐํ ์ ์ด
JavaScript์ Type Annotations๊ฐ ์ถ๊ฐ๋๋ฉด, TypeScript๋ ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ํ์๋ก ํ๋ ํ๋ก์ ํธ๋ฅผ ์ํ ๋๊ตฌ๋ก ํฌ์ง์ ๋๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํ
React, Vue, Angular ๊ฐ์ ์ฃผ์ ํ๋ ์์ํฌ๋ค์ ๋ชจ๋ TypeScript๋ฅผ ๊ณต์์ ์ผ๋ก ์ง์ํ๊ณ ์์ต๋๋ค. React ๊ณต์ ๋ฌธ์๋ TypeScript ์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์์ฃ .
// React with TypeScript
interface ButtonProps {
onClick: () => void;
children: React.ReactNode;
disabled?: boolean;
}
const Button: React.FC<ButtonProps> = ({ onClick, children, disabled = false }) => {
return (
<button onClick={onClick} disabled={disabled}>
{children}
</button>
);
};
Next.js, Remix ๊ฐ์ ๋ฉํ ํ๋ ์์ํฌ๋ค๋ TypeScript๋ฅผ ์ผ๊ธ ์๋ฏผ(first-class citizen)์ผ๋ก ์ทจ๊ธํ๋ฉฐ, ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์ ๊ณตํ๊ณ ์์ด์.
์ด๋ฐ ํ๋ฆ์ ๋ณด๋ฉด, ์ ์ด๋ ๋น๋ถ๊ฐ์ TypeScript๊ฐ ์ฃผ๋ฅ ๊ฐ๋ฐ ๋๊ตฌ๋ก ์๋ฆฌ๋ฅผ ์งํฌ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
ํ๋ก์ ํธ์ TypeScript๊ฐ ํ์ํ์ง ํ๋จํ๊ธฐ
TypeScript๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
๋ค์ ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ํด๋น๋๋ค๋ฉด TypeScript ๋์ ์ ์ง์งํ๊ฒ ๊ณ ๋ คํด๋ณด์ธ์:
ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ํฌ๊ฑฐ๋ ์ฅ๊ธฐ ์ ์ง๋ณด์๊ฐ ์์๋ ๋
- 10๊ฐ ์ด์์ ๋ชจ๋์ด ์ํธ์์ฉํ๋ ๊ฒฝ์ฐ
- 1๋ ์ด์ ์ง์์ ์ผ๋ก ๊ฐ๋ฐํ ํ๋ก์ ํธ
- ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํด์ผ ํ๋ ์ํฉ
ํ ๊ท๋ชจ๊ฐ ํฌ๊ฑฐ๋ ํ์ ์ด ์ค์ํ ๊ฒฝ์ฐ
- 3๋ช ์ด์์ ๊ฐ๋ฐ์๊ฐ ๋์์ ์์
- ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ๊ฐ์ ํ์ ์ ๊ณต์ ํด์ผ ํ ๋
- ์๋ก์ด ํ์์ ์จ๋ณด๋ฉ์ด ์ฆ์ ๊ฒฝ์ฐ
์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ
- ๊ธ์ต, ์๋ฃ ๋ฑ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์๋น์ค
- B2B ์ํฐํ๋ผ์ด์ฆ ์๋ฃจ์
- ์๋ฐฑ๋ง ๋ช ์ด ์ฌ์ฉํ๋ ํ๋ก๋์ ์๋น์ค
JavaScript๋ก๋ ์ถฉ๋ถํ ๊ฒฝ์ฐ
๋ฐ๋๋ก ๋ค์ ์ํฉ์ด๋ผ๋ฉด JavaScript๋ง์ผ๋ก๋ ์ถฉ๋ถํ ์ ์์ด์:
ํ๋กํ ํ์ ์ด๋ ๋น ๋ฅธ ์คํ์ด ํ์ํ ๋
- MVP(Minimum Viable Product) ๊ฐ๋ฐ
- ํด์ปคํค์ด๋ ๋จ๊ธฐ ํ๋ก์ ํธ
- ์์ด๋์ด ๊ฒ์ฆ ๋จ๊ณ
์๊ท๋ชจ ํ๋ก์ ํธ๋ ๊ฐ์ธ ํ๋ก์ ํธ
- ํผ์ ๊ฐ๋ฐํ๊ณ ๊ด๋ฆฌํ๋ ํ๋ก์ ํธ
- ๊ฐ๋จํ ๋๋ฉ ํ์ด์ง๋ ๋ธ๋ก๊ทธ
- ํ์ต์ฉ ํ ์ด ํ๋ก์ ํธ
์ด๋ฏธ JSDoc์ผ๋ก ์ถฉ๋ถํ ํ์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ํ๋ณดํ ๊ฒฝ์ฐ
- ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค๊ฐ ์ ๋ฌธ์ํ๋์ด ์์
- ํ์ด JSDoc ์ฌ์ฉ์ ์ต์ํจ
- TypeScript ๋ง์ด๊ทธ๋ ์ด์ ๋น์ฉ์ด ๋ถ๋ด์ค๋ฌ์
ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ๋ฒ
๊ผญ 0 ์๋๋ฉด 100์ ์ ํ์ ํ ํ์๋ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ ๋ต๋ ๊ณ ๋ คํด๋ณผ ์ ์์ด์:
์ ์ง์ ๋์
- ์๋ก์ด ๋ชจ๋๋ถํฐ TypeScript๋ก ์์ฑ
- ์ค์ํ ํต์ฌ ๋ก์ง๋ถํฐ ํ์ ์ถ๊ฐ
- allowJs ์ต์ ์ผ๋ก JavaScript์ TypeScript ํผ์ฉ
์ ํ์ ์ฌ์ฉ
- API ์ธํฐํ์ด์ค์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง TypeScript๋ก ์ ์
- ์ ํธ๋ฆฌํฐ ํจ์๋ JavaScript๋ก ์ ์ง
- ํ๋ ์์ํฌ์์ ์๊ตฌํ๋ ๋ถ๋ถ๋ง ํ์ ์ถ๊ฐ
ํ์ ์คํฌ๋ฆฝํธ๋ ๋๊ตฌ์ผ ๋ฟ์ ๋๋ค
TypeScript ๋ ผ์์ ํต์ฌ์ "์ณ๊ณ ๊ทธ๋ฆ"์ด ์๋๋๋ค. DHH์ฒ๋ผ JavaScript์ ๋จ์ํจ๊ณผ ์์ ๋ก์์ ์ ํธํ ์๋ ์๊ณ , ๋๊ท๋ชจ ํ๋ก์ ํธ์์ TypeScript์ ์์ ์ฑ์ ์ค์ํ๊ฒ ์ฌ๊ธธ ์๋ ์์ด์.
์ค์ํ ๊ฑด ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ ์ํฉ, ํ์ ์ญ๋, ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ์ข ํฉ์ ์ผ๋ก ๊ณ ๋ คํด์ ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค. TypeScript๋ ๋ง๋ฅ ํด๊ฒฐ์ฑ ์ด ์๋๋ฉฐ, JavaScript๋ ๊ตฌ์๋์ ์ ๋ฌผ์ด ์๋๋๋ค.
ECMAScript์ Type Annotations ์ ์์ด ์งํ๋๋ฉด์, ์์ผ๋ก JavaScript์ TypeScript์ ๊ฒฝ๊ณ๋ ๋์ฑ ํ๋ ค์ง ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๊ทธ ์ฌ์ด ์ด๋๊ฐ์์ ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ์ ๋ง๋ ์ต์ ์ ์ ์ฐพ์ผ์๊ธธ ๋ฐ๋๋๋ค.
๊ฒฐ๊ตญ ์ฐ๋ฆฌ์ ๋ชฉํ๋ ๋ ๋์ ์ํํธ์จ์ด๋ฅผ ๋ง๋๋ ๊ฒ์ด๋๊น์ :)