๐Ÿ’ญ ์ปดํ“จํ„ฐ๋Š” ๋‚ด๊ฐ€ ์“ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฝ์„๊นŒ?

์˜๊ทผยท2023๋…„ 5์›” 23์ผ
1
post-thumbnail

ํ‡ด๊ทผ ํ›„ '์ดํŽ™ํ‹ฐ๋ธŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ'๋ฅผ ์ฝ๊ธฐ๋กœ ํ•œ์ง€ ํ•˜๋ฃจ ๋งŒ์— ์ €๋ฅผ ๋ง‰์•„์„  ๋ฌธ์žฅ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

๋ฉด์ ‘ ์ค€๋น„ํ•˜๋ฉด์„œ ๋Œ€์ถฉ์€ ์•Œ์•˜๋˜ ์ปดํŒŒ์ผ, ์ด์ œ๋Š” ๋”์ด์ƒ ๋ชจ๋ฅธ์ฑ„ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์—†์–ด ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.


# ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ญ์—์š”?

์ปดํŒŒ์ผ๋Ÿฌ

์œ„ํ‚ค๋ฐฑ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ทธ ์˜๋ฏธ๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์“ฐ์—ฌ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์˜ฎ๊ธฐ๋Š” ์–ธ์–ด ๋ฒˆ์—ญ ํ”„๋กœ๊ทธ๋žจ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

  • ๊ณ ์ˆ˜์ค€ ์–ธ์–ด(High-Level Language) : ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์–ธ์–ด

  • ์ €์ˆ˜์ค€ ์–ธ์–ด(Low-Level Language) : ๊ธฐ๊ณ„๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์–ธ์–ด

์‚ฌ๋žŒ์ด ๊ธฐ๊ณ„์–ด๋กœ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๊ธฐ๋ž€ ๋„ˆ๋ฌด ์–ด๋ ค์šด ์ผ์ด๋ผ์„œ, ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋กœ ๋ช…๋ น์„ ๋‚ด๋ฆฐ ๋’ค ๊ทธ ๋ช…๋ น์„ ์ €์ˆ˜์ค€ ์–ธ์–ด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์ผ์ข…์˜ ๋ฒˆ์—ญ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์ฃ .

์ฒ˜์Œ์—๋Š” ๊ธฐ๊ณ„์–ด์™€ ๊ฐ€๊นŒ์šด ์–ด์…ˆ๋ธ”๋ฆฌ์–ด(Assembly Language)๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ์ปดํ“จํ„ฐ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๊ณ„์–ด๊ฐ€ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋น„์šฉ์ด ๊ณ„์†ํ•ด์„œ ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ํฐ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์™œ๋ƒํ•˜๋ฉด ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ๊ธฐ๊ณ„์–ด์™€ 1๋Œ€1๋กœ ๋งค์นญ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ !

๋”ฐ๋ผ์„œ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด์˜ ํ•„์š”์„ฑ์ด ๋Œ€๋‘ํ–ˆ๊ณ , ์ด์— ๋ฐœ๋งž์ถฐ ์—ฌ๋Ÿฌ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๊ฐ€ ๋“ฑ์žฅํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Python, Java, Javascript ๋“ฑ์˜ ์—ฌ๋Ÿฌ ์–ธ์–ด๊ฐ€ ๋ฐ”๋กœ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.


์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ๋˜ ๋ญ์—์š”?

Javascript๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ž€ ๋ญ˜๊นŒ์š”? ๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๊ฑธ๊นŒ์š”?


์šฐ์„ , ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ผ์ข…์˜ ๋ฒˆ์—ญ๊ธฐ์ธ ๊ฒƒ์ฒ˜๋Ÿผ, ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋„ ๋ฒˆ์—ญ๊ธฐ์˜ ํ•œ ์ข…๋ฅ˜์ž…๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ „์ฒด์˜ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๋ฐ ๋ฐ˜ํ•ด, ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ํ•œ ์ค„์”ฉ ๋ฒˆ์—ญํ•˜๋ฉฐ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ์ฃผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Javascript์™€ Python์ด ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ๋ฒˆ์—ญํ–ˆ๋˜ ์ฝ”๋“œ๋„ ๋‹ค์‹œ ๋ฒˆ์—ญํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฒˆ์—ญํ–ˆ๋˜ ์ฝ”๋“œ๋Š” ๋‹ค์‹œ ๋ฒˆ์—ญํ•˜์ง€ ์•Š๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋ณด๋‹ค ์‹คํ–‰์†๋„๊ฐ€ ๋Š๋ฆด ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•œ ์ค„์”ฉ ๋ฒˆ์—ญํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์—๋Ÿฌ์˜ ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ ์‰ฝ๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆ˜์ •์ด ์šฉ์ดํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด Javascript๋Š” ์˜ค์ง ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด์ผ๊นŒ์š”? ์•„๋‹™๋‹ˆ๋‹ค!

Javascript๊ฐ€ ์ ์  ๋ฐœ์ „ํ•˜๊ณ  ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ, ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋Œ€๋‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ๊ธ€์—์„œ๋Š” Javascript V8 ์—”์ง„์„ ๊ฐœ๋ฐœํ–ˆ๊ณ , ์ด ์—”์ง„์— ์˜ํ•ด Javascript๋„ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒˆ์—ญ๊ธฐ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฑธ๊นŒ์š”?
์ด ๋ถ€๋ถ„์€ ์•„๋ž˜ ์ปดํŒŒ์ผ ๋‹จ๊ณ„ ์„ค๋ช… ํ›„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


# ์ปดํŒŒ์ผ ๋‹จ๊ณ„

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•  ๋•Œ๋Š”, ํฌ๊ฒŒ ๋‹ค์„ฏ ๊ฐ€์ง€์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

1. Lexical Analysis

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ๋ถ„ํ•ดํ•ด ์ž‘์€ ํ† ํฐ(Token)์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ† ํฐ(Token)์ด๋ž€ ๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ตœ์†Œํ•œ์˜ ๋‹จ์œ„๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

2. Syntax Analysis

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์•ž ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•œ ํ† ํฐ(Token)์„ ๋ฐ›์•„, ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒŒ์Šค ํŠธ๋ฆฌ(parse tree)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ํŒŒ์Šค ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฃฐ์„ ์ž˜ ๋”ฐ๋ฅด๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํŒŒ์Šค ํŠธ๋ฆฌ๋Š” AST(Abstract Syntax Tree), ์ฆ‰ ์ถ”์ƒ๊ตฌ๋ฌธํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

3. Semantic Analysis

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์†Œ์Šค ์ฝ”๋“œ์˜ ์˜๋ฏธ๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ, ๋ณ€์ˆ˜๊ฐ€ ์•Œ๋งž๊ฒŒ ์‚ฌ์šฉ๋˜์—ˆ๋Š”์ง€ ๋“ฑ์„ ์ฒดํฌํ•˜๋Š” ํƒ€์ž… ์ฒดํ‚น(type checking)์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์„ ์–ธ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์ด๋‚˜ ์ž˜๋ชป๋œ ํ•จ์ˆ˜ ์‚ฌ์šฉ ๋“ฑ์˜ Semantic Error๋ฅผ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.

4. Code Generation

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์•ž ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ•œ ํŒŒ์Šค ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•ฉ๋‹ˆ๋‹ค.

5. Optimization

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์•ž ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ , ์ตœ์ ํ™”ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒํ•ฉ๋‹ˆ๋‹ค.


# Javascript๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด?

๊ทธ๋ ‡๋‹ค๋ฉด ์•ž์„œ ๋งํ–ˆ๋˜, Javascript๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด๋ผ๋Š” ๋ง์€ ์‚ฌ์‹ค์ผ๊นŒ์š”?

Javascript๋Š” ์•ž์„œ ์ž ๊น ์‚ดํŽด๋ณด์•˜๋˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํ†ตํ•ด ๊ฑฐ์ณ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋ฉ๋‹ˆ๋‹ค.
๊ทธ ๊ณผ์ •์€ ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋งŒ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ, ํ•œ ์ค„ ํ•œ ์ค„ ๋ฒˆ์—ญํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ํŠน์„ฑ์ƒ ์„ฑ๋Šฅ์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๊ตฌ๊ธ€์˜ Javascript V8 ์—”์ง„์€ ์ผ๋ถ€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋„์ž…ํ•ด ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์œ„ ์ด๋ฏธ์ง€์˜ ๊ณผ์ •์—, ์ค‘๊ฐ„์— ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋ถ™์—ฌ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด์ฃ !

Profiler๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ๊ด€์ฐฐํ•˜๋ฉด์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋‹ค๊ฐ€, ๋ฐ˜๋ณต์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ๋ณด๋‚ด ์‹ค์‹œ๊ฐ„ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ปดํŒŒ์ผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ๋ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํŒ๋‹จํ–ˆ์„ ๋•Œ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ํŒ๋‹จํ•œ ์ฝ”๋“œ๋Š” Decompile ๊ณผ์ •์„ ๊ฑฐ์ณ ๋‹ค์‹œ ๋˜๋Œ๋ฆฌ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Javascript๋Š” (์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋ถ€๋ถ„์ ์œผ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”) ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด๋ ‡๊ฒŒ ์ปดํŒŒ์ผ๋Ÿฌ, ๊ทธ๋ฆฌ๊ณ  Javascript์—์„œ์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋


# Reference

0๊ฐœ์˜ ๋Œ“๊ธ€