Skip to content

โ† ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐ€์ด๋“œ ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

๐ŸŸฆ TypeScript ์ƒ์„ธ ๊ฐ€์ด๋“œ โ€‹

"์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ผ๋Š” ์ž์œ ๋กญ๊ณ  ๋ณ€๋•์Šค๋Ÿฌ์šด ์นœ๊ตฌ์—๊ฒŒ ํŠผํŠผํ•œ ์•ˆ์ „์žฅ์น˜(ํƒ€์ž…)๋ฅผ ๋‹ฌ์•„์ฃผ๋Š” ์Šค๋งˆํŠธํ•œ ๋น„์„œ"


๐Ÿ’ก 1. 30๋…„์ฐจ ์„ ๋ฐฐ์˜ ์‰ฌ์šด ์„ค๋ช… โ€‹

์›น ์„ธ์ƒ์„ ์ง€๋ฐฐํ•˜๋Š” JavaScript๋Š” ์•„์ฃผ ์ž์œ ๋กœ์šด ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์— ์ˆซ์ž๋ฅผ ๋„ฃ์—ˆ๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋ฌธ์ž๋ฅผ ๋„ฃ์–ด๋„ "์‘, ๊ดœ์ฐฎ์•„!" ํ•˜๊ณ  ๋ฐ›์•„์ค๋‹ˆ๋‹ค. ํ˜ผ์ž์„œ ์ž‘์€ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ํŽธํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ์—ฌ ์ˆ˜๋งŒ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ์งœ๊ฒŒ ๋˜๋ฉด ์ด '์ž์œ ๋กœ์›€'์ด ์–ธ์ œ ํ„ฐ์งˆ์ง€ ๋ชจ๋ฅด๋Š” ํญํƒ„(๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ)์ด ๋ฉ๋‹ˆ๋‹ค.

TypeScript๋Š” ๋ฐ”๋กœ ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— "ํƒ€์ž…(Type)" ์ด๋ผ๋Š” ๊ผฌ๋ฆฌํ‘œ๋ฅผ ๊ฐ•์ œ๋กœ ๋ถ™์—ฌ์„œ, ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ๋„ ์ „์— ์—๋Ÿฌ๋ฅผ ์žก์•„๋‚ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋น„์œ ํ•˜์ž๋ฉด: ์„ค๊ณ„๋„ ์—†์ด ๋Œ€์ถฉ ์ง“๋˜ ๊ฐ€๊ฑด๋ฌผ(JavaScript)์— ๊ผผ๊ผผํ•œ ์•ˆ์ „ ๊ธฐ์ค€๊ณผ 3D ์„ค๊ณ„๋„(TypeScript)๋ฅผ ์ž…ํžˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ 2. ์–ด๋””์— ์ฃผ๋กœ ์“ฐ์ด๋‚˜์š”? โ€‹

  1. ๋ชจ๋˜ ์›น ํ”„๋ก ํŠธ์—”๋“œ: React, Vue, Next.js ๋“ฑ์˜ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฒฐํ•ฉํ•ด ํ™”๋ฉด๋‹จ ๋กœ์ง์„ ์งค ๋•Œ ์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€(De facto standard)์œผ๋กœ ์“ฐ์ž…๋‹ˆ๋‹ค.
  2. ๋Œ€๊ทœ๋ชจ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค: NestJS ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์„ ์ด์šฉํ•ด ํŠผํŠผํ•œ ์„œ๋ฒ„ API๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ๋„๋ฆฌ ์“ฐ์ž…๋‹ˆ๋‹ค.

โš–๏ธ 3. ์žฅ์ ๊ณผ ๋‹จ์  (์„ ๋ฐฐ์˜ ์†”์ง ํ•œ๋งˆ๋””) โ€‹

  • ์žฅ์  (์ตœ๊ณ ์˜ ํŒŒํŠธ๋„ˆ):
    • ๊ท€์‹ ๊ฐ™์€ ์—๋Ÿฌ ๊ฐ์ง€: ์ฝ”๋“œ ์‹คํ–‰ ์ „์— ์˜คํƒ€๋‚˜ ํƒ€์ž… ์‹ค์ˆ˜๋ฅผ ์—๋””ํ„ฐ(VS Code ๋“ฑ)๊ฐ€ ์ฆ‰์‹œ ๋นจ๊ฐ„ ์ค„๋กœ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
    • ์ž๋™ ์™„์„ฑ: ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ผ์ผ์ด ๊ธฐ์–ตํ•  ํ•„์š” ์—†์ด ๋งˆ์šฐ์Šค๋งŒ ์˜ฌ๋ ค๋„ ๋ฌด์—‡์„ ์“ธ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฐ€์ด๋“œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์  (์ง„์ž… ์žฅ๋ฒฝ):
    • ๊ณต๋ถ€ํ•  ๊ฒŒ ๋งŽ์Œ: ์ธํ„ฐํŽ˜์ด์Šค(Interface), ์ œ๋„ค๋ฆญ(Generic) ๋“ฑ ํƒ€์ž… ๊ด€๋ จ ๊ทœ์น™์„ ์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋นŒ๋“œ(์ปดํŒŒ์ผ) ์‹œ๊ฐ„: ๋ธŒ๋ผ์šฐ์ €๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฝ์ง€ ๋ชปํ•˜๋ฏ€๋กœ, ๊ฒฐ๊ตญ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํ•œ ๋ฒˆ ๋ณ€ํ™˜(์ปดํŒŒ์ผ)ํ•ด์ฃผ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ 4. ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ์ฒซ๊ฑธ์Œ ์ฝ”๋“œ โ€‹

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๋ณ€์ˆ˜ ๋’ค์— : type์„ ๋ถ™์—ฌ์„œ ์ด ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์„ ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

typescript
// 1. ํƒ€์ž…์„ ๊ผผ๊ผผํ•˜๊ฒŒ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
interface Developer {
  name: string;
  careerYears: number;
  isSenior: boolean;
}

// 2. ์ •์˜๋œ ํƒ€์ž…์— ๋งž์ถ”์–ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
const seniorDev: Developer = {
  name: "Kim Antigravity",
  careerYears: 30,
  isSenior: true
};

// ๋งŒ์•ฝ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž˜๋ชป๋œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ฉด ์ฝ”๋“œ๊ฐ€ ๋นŒ๋“œ๋˜๊ธฐ๋„ ์ „์— ์—๋Ÿฌ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
// seniorDev.careerYears = "30๋…„"; // โŒ ์—๋Ÿฌ ๋ฐœ์ƒ! (์ˆซ์ž ํƒ€์ž…๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ)

๐ŸŽฏ 5. ์ดˆ๋ณด์ž ์ถ”์ฒœ ๊ณต๋ถ€ ๋ฐฉํ–ฅ โ€‹

  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ์ดˆ ๊ฐœ๋…(๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๋น„๋™๊ธฐ)์„ ๋จผ์ € 60% ์ด์ƒ ์ˆ™์ง€ํ•˜์„ธ์š”.
  2. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ํƒ€์ž… ๊ทœ์น™์„ ๋งˆ์Šคํ„ฐํ•˜๋ ค ํ•˜์ง€ ๋ง๊ณ  ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ : string, : number๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์„ธ์š”.
  3. ์ ์ฐจ ์ธํ„ฐํŽ˜์ด์Šค(interface)๋ฅผ ํ™œ์šฉํ•ด ๊ฐ€์งœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทœ๊ฒฉํ™”ํ•˜๋Š” ์—ฐ์Šต์œผ๋กœ ๋„“ํ˜€๊ฐ€๋ฉด ๋น ๋ฅด๊ฒŒ ์ ์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ง€์‹DB โ€” ๋” ๋‚˜์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ์œ„ํ•ด