[WIP]TypeScript์˜ ๋™์ž‘ ์›๋ฆฌ

2025. 10. 25. 11:00ใ†Front-end/TypeScript

๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

0. TypeScript๋ž€?

1. ์ „๋ฐ˜์  ๋™์ž‘ ํ๋ฆ„

2. ํŒŒ์‹ฑ(Parsing)๊ณผ AST ์ƒ์„ฑ

3. ํƒ€์ž… ๊ฒ€์‚ฌ

4. ์„ ์–ธ ํŒŒ์ผ(.d.ts)๊ณผ DefinitelyTyped(@types)์˜ ์—ญํ• 

5. ํŠธ๋žœ์ŠคํŒŒ์ผ(emit)๊ณผ ์ถœ๋ ฅ(JS, sourcemap)

6. ๋ชจ๋“ˆ ํ•ด์„๊ณผ tsconfig ์˜ต์…˜

7. ์–ธ์–ด ์„œ๋น„์Šค์™€ ์—๋””ํ„ฐ ํ†ตํ•ฉ

8. ๋นŒ๋“œ ์ตœ์ ํ™”

9. ๋Ÿฐํƒ€์ž„๊ณผ์˜ ๊ด€๊ณ„

10. ์‹ค๋ฌด์—์„œ ์ฃผ์˜ํ•  ์ 


0. TypeScript๋ž€?

JS์˜ ์ƒ์œ„ ์Šˆํผ์…‹์œผ๋กœ, ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•˜๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ(tsc)๋ฅผ ํ†ตํ•ด JS๋กœ ํŠธ๋žœ์ŠคํŒŒ์ผ๋œ๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๋Š” ๋Ÿฐํƒ€์ž„์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ปดํŒŒ์ผ ํƒ€์ž…์˜ ํƒ€์ž… ๊ฒ€์‚ฌ, ๊ฐœ๋ฐœ ๋„๊ตฌ ํ†ตํ•ฉ์ด ํ•ต์‹ฌ ๊ฐ€์น˜์ด๋‹ค.


1. ์ „๋ฐ˜์  ๋™์ž‘ ํ๋ฆ„

TypeScript ์†Œ์Šค (.ts, .tsx, .d.ts)๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ํฐ ํ๋ฆ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ํŒŒ์‹ฑ(Parsing) : ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ† ํฐํ™” ํ•˜์—ฌ AST(Abstract Syntax Tree)๋ฅผ ์ƒ์„ฑ
  2. ํƒ€์ž… ๊ฒ€์‚ฌ (Type Checking) : 1์—์„œ ์ƒ์„ฑํ•œ AST ์œ„์—์„œ ํƒ€์ž… ์ถ”๋ก  ๋ฐ ํƒ€์ž„ ๊ฒ€์‚ฌ ์ˆ˜ํ–‰
  3. ํŠธ๋žœ์ŠคํŒŒ์ผ(Emit) : ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜์„ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์ƒ JS ๋ฒ„์ „์œผ๋กœ ๋ณ€ํ™˜ (+ sourcemap, ์„ ์–ธํŒŒ์ผ ์ƒ์„ฑ ์˜ต์…˜ ์ฒ˜๋ฆฌ)
  4. ๋นŒ๋“œ/๋ฒˆ๋“ค๋‹จ๊ณ„(ํ†ตํ•ฉ) : tsconfig, ํ”„๋กœ์ ํŠธ ๋ ˆํผ๋Ÿฐ์Šค์— ๋”ฐ๋ผ ๋นŒ๋“œ ์ˆ˜ํ–‰

 

1. ํŒŒ์‹ฑ(Parsing) 

tsc๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(CST) ๋ฐ AST๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์ด ๋‹จ๊ณ„์—์„œ ๋ฌธ๋ฒ•์  ์˜ค๋ฅ˜๊ฐ€ ํƒ์ง€๋œ๋‹ค. 

 

AST์—๋Š” ๊ฐ ๋…ธ๋“œ์˜ ์œ„์น˜, ํ† ํฐ ์œ ํ˜•, ์ž์‹ ๋…ธ๋“œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ,

์ดํ›„์— ์‹ฌ๋ณผ ํ…Œ์ด๋ธ” ๊ตฌ์ถ•๊ณผ ์ œ์–ดํ๋ฆ„ ๋ถ„์„์˜ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

 

2. ํƒ€์ž… ๊ฒ€์‚ฌ (Type Checking)

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. AST์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ํƒ€์ž… ์ฒด์ปค๋Š” ์‹ฌ๋ณผ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ , ํ‘œํ˜„์‹๊ณผ ์„ ์–ธ์„ ์ˆœํšŒํ•˜๋ฉฐ

ํƒ€์ž… ํ˜ธํ™˜์„ฑ์„ ํŒ๋‹จํ•œ๋‹ค.

 

3. ํŠธ๋žœ์ŠคํŒŒ์ผ(Emit)

ํƒ€์ž… ๊ฒ€์‚ฌ ํ›„ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜(annotation)์„ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์ƒ JS ๋ฒ„์ „์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

  • ํƒ€๊นƒ(Target) : tsconfig.json์˜ target ์˜ต์…˜์— ๋”ฐ๋ผ ๋ฌธ๋ฒ• ๋ณ€ํ™˜์ด ์ ์šฉ๋œ๋‹ค.
  • ๋ชจ๋“ˆ์‹œ์Šคํ…œ : module ์˜ต์…˜์— ๋”ฐ๋ผ import, export ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ๊ฒฐ์ •๋œ๋‹ค
  • source map : ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ์†Œ์Šค ๋งต(.map)์„ ์ƒ์„ฑํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €/๋””๋ฒ„๊ฑฐ์—์„œ ์›๋ณธ TS ์œ„์น˜๋กœ ๋งคํ•‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์„ ์–ธ ํŒŒ์ผ ์ƒ์„ฑ : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ, .d.ts๋ฅผ ํ•จ๊ป˜ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

์ฐธ๊ณ 

๋”๋ณด๊ธฐ

์ฐธ๊ณ ์ž๋ฃŒ๋งํฌ

๋ฐ˜์‘ํ˜•