๐ŸŽ’ ๊ณต๋ถ€/โ“ ๊ถ๊ธˆํ•ด์š”

๋ฐ”์ดํŠธ ์ฝ”๋“œ, ๊ธฐ๊ณ„์–ด, ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ, ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ…?

dev_sia 2022. 10. 29. 00:04

๋ฐ”์ดํŠธ ์ฝ”๋“œ, ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ, ๊ธฐ๊ณ„์–ด, ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ, ๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋ฐ”์ดํŠธ ์ฝ”๋“œ

๊ฐ€์ƒ๋จธ์‹ ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ์ฝ”๋“œ์ด๋‹ค.

์–ด์…ˆ๋ธ”๋ฆฌ์–ด์— ๊ฐ€๊นŒ์šด ํ˜•ํƒœ๋ฅผ ๋ ๊ณ  ์žˆ๋‹ค.

๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ํ•ด์„๋œ๋‹ค.

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹
    • ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ๋‚ด๋ ค๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋ฐฉ์‹
    • ์ •์  ์ปดํŒŒ์ผ ์–ธ์–ด๋ณด๋‹ค ์‹คํ–‰์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ๊ฐ€์ƒ๋จธ์‹ , JVM์„ ์‚ฌ์šฉํ•˜๋Š” Java์˜ ์ปดํŒŒ์ผ ๋ฐฉ์‹์„ ์ž ์‹œ ๋“ค์—ฌ๋‹ค๋ณด์ž.

Java๋Š” ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ ์„ฑ์งˆ์ด ์žˆ๋‹ค.

๋ณดํ†ต ํ”„๋กœ๊ทธ๋žจ๋“ค์€ OS์— ์–นํ˜€์„œ ๋Œ์•„๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— OS์—์„œ ๊ทœ์ •ํ•˜๋Š” ์‹คํ–‰ ๋ฐฉ์‹์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

  • OS์—์„œ ๊ทœ์ •ํ•˜๋Š” ์‹คํ–‰ ๋ฐฉ์‹?
  • ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, ์œˆ๋„์šฐ ํ”Œ๋žซํผ์—์„œ ์ปดํŒŒ์ผ ๊ณผ์ •๊ณผ ์–ด์…ˆ๋ธ”๋ง ๊ณผ์ •์„ ๊ฑฐ์ณ ์‹คํ–‰ ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์ž. windows์—์„œ๋„ x64, x32 ๋“ฑ ๋ฒ„์ „์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.
  • ์ด ์‹คํ–‰ ํŒŒ์ผ์€ .exe ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„๋‹ค. ์ฆ‰, microsoft windows ํ”Œ๋žซํผ์˜ ์‹คํ–‰ํŒŒ์ผ์ด๋‹ค. ์ด ํŒŒ์ผ์€ ๋‹น์—ฐํžˆ Mac OS์—์„œ๋Š” ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • ์ •ํ™•ํžˆ๋Š” OS๋งˆ๋‹ค, ํ•˜๋“œ์›จ์–ด ์ œ์กฐ์‚ฌ๋งˆ๋‹ค ๊ธฐ๊ณ„์–ด ์„ค๊ณ„๊ฐ€ ๋‹ค๋ฅด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— OS์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์€ OS์™€ ํ•˜๋“œ์›จ์–ด ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ปดํŒŒ์ผ ๊ณผ์ •๊ณผ ์–ด์…ˆ๋ธ”๋ง ๊ณผ์ •์˜ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ชจ๋‘ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Java๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์™œ๋ƒํ•˜๋ฉด OS ์œ„์— JVM, ์ฆ‰ ๊ฐ€์ƒ๋จธ์‹ ์„ ํ•˜๋‚˜ ๋” ์–น์–ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ๋Œ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Java์˜ ์ปดํŒŒ์ผ ๊ณผ์ •์€ ๋Œ€์ถฉ ์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ๋‹ค.

Java์˜ ๋Œ€๋žต์ ์ธ ์ปดํŒŒ์ผ ๊ณผ์ •

์ฆ‰ JVM์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๊ธฐ๊ธฐ๋ผ๋ฉด ํ”Œ๋žซํผ(OS)๊ณผ ์ƒ๊ด€์—†์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์—์„œ ํ”„๋กœ๊ทธ๋žจ์€ OS์—์„œ ๊ทœ์ •ํ•˜๋Š” ์‹คํ–‰ ๋ฐฉ์‹์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์ด๋ ‡๊ฒŒ ์‹คํ–‰๋˜๋Š” Java ํ”„๋กœ๊ทธ๋žจ๋„ JVM์—์„œ ๊ทœ์ •ํ•˜๋Š” ์‹คํ–‰ ๋ฐฉ์‹์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

JVM์€ ๋ฐ”์ดํŠธ์ฝ”๋“œ, ์ฆ‰ Bytecode๋กœ ์ž‘์„ฑ๋œ .class ํ™•์žฅ์ž์˜ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” JVM์—์„œ ์‹คํ–‰๋œ๋‹ค. ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•˜๋“œ์›จ์–ด์˜ ๋ฉ”๋ชจ๋ฆฌ, ํž™, ์Šคํƒ ์˜์—ญ์— ์˜ฌ๋ผ๊ฐ€๋Š”์ง€๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ชฐ๋ผ๋„ ๋œ๋‹ค. ๊ทธ๊ฑฐ ๋‹ค JVM์ด ์•Œ์•„์„œ ํ•ด ์ค€๋‹ค.

์ฆ‰ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” JVM(๋˜๋Š” ๋‹ค๋ฅธ ๊ฐ€์ƒ๋จธ์‹ )์ด ์•Œ์•„๋“ฃ๋Š” ์‹คํ–‰ ํŒŒ์ผ ํ˜•์‹์ด๋‹ค.

์ด ๊ฐœ๋…์€ ๋‚˜์ค‘์— c, c++๊ณผ c#, java์˜ ์ปดํŒŒ์ผ ๊ณผ์ •์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ๋Š” ํฌ์ŠคํŒ…์—์„œ ํ•œ๋ฒˆ ๋” ์งš๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.

 

๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ

์ด ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์ด ๊ธ€์„ ์“ฐ๊ฒŒ ํ•œ ์›์ธ์ด๋‹ค…

์ด์ง„ ์ฝ”๋“œ๋ผ๊ณ ๋„ ํ•œ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๊นŒ์ง€ ๋“ค์—ˆ์„ ๋•Œ๋Š” ๋ญ”๊ฐ€…์–ด๋””์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ํ˜•์‹ ๊ฐ™์ง€๋งŒ ์ด์ง„ ์ฝ”๋“œ๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋ณด๋‹ˆ ๋А๋‚Œ์ด ์ข‹์ง€ ์•Š๋‹ค.

๊ทธ๋ ‡๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋Š” ๊ทธ๋ƒฅ 0101010์ด๋‹ค.

0๊ณผ 1์˜ ์—ฐ์†์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ฝ”๋“œ๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ผ๊ณ  ํ•œ๋‹ค.

 

๊ธฐ๊ณ„์–ด

์—ฌ๊ธฐ์„œ ๊ธฐ๊ณ„์–ด์˜ ์ •์˜๋ฅผ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž.

์œ„ํ‚ค๋ฐฑ๊ณผ์— ๋”ฐ๋ฅด๋ฉด ๊ธฐ๊ณ„์–ด๋Š” “CPU๊ฐ€ ์ง์ ‘ ํ•ด๋…ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋น„ํŠธ ๋‹จ์œ„๋กœ ์“ฐ์ธ ์ปดํ“จํ„ฐ ์–ธ์–ด๋ฅผ ํ†ตํ‹€์–ด ์ผ์ปซ๋Š”๋‹ค.”

๊ธฐ๊ณ„์–ด๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์™€ 1:1๋กœ ๋Œ€์‘๋œ๋‹ค.

๊ธฐ๊ณ„์–ด๋Š” CPU์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋ฅผ ๊ฐ–๋Š”๋‹ค. ๊ณตํ†ต์ธ ๋ช…๋ น์–ด๋„ ์กด์žฌํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ๋ช…๋ น์–ด๋„ ์กด์žฌํ•œ๋‹ค.

์˜ค… ์—ฌ๊ธฐ๊นŒ์ง€ ์•Œ์•„๋ƒˆ์œผ๋ฉด ์œ„์—์„œ ๋งํ•œ “OS์—์„œ ๊ทœ์ •ํ•˜๋Š” ์‹คํ–‰ ๋ฐฉ์‹”์ด ๋Œ€์ถฉ ๋ฌด์—‡์ธ์ง€ ๊ฐ์ด ์žกํžŒ๋‹ค.

๊ทธ๋ƒฅ CPU ๋”ฐ๋ผ์„œ ๊ธฐ๊ณ„์–ด๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๋œป์ด๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋นจ๊ฐ›๊ณ  ์‚ฌ๊ฐ์‚ฌ๊ฐํ•˜๊ณ  ๋‹ฌ๋‹ฌ ์ƒํผํ•œ ๊ณผ์ผ์„ ํ•œ๊ตญ์–ด๋กœ ์‚ฌ๊ณผ, ์˜์–ด๋กœ apple, ๋ถˆ์–ด๋กœ pomme๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.

 

๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ native code

ํŠน์ • ํ”„๋กœ์„ธ์„œ์—์„œ ์‹คํ–‰์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋œ ์–ธ์–ด์ด๋‹ค.
== ํŠน์ • ํ”„๋กœ์„ธ์„œ์™€ ๊ทธ ํ”„๋กœ์„ธ์„œ์˜ ๋ช…๋ น์–ด๋กœ ๋™์ž‘ํ•˜๋„๋ก ์ปดํŒŒ์ผ๋œ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ์ด๋‹ค.
์ฆ‰, ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋Š” JVM์—์„œ ์ ์ ˆํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋˜์–ด ์‹คํ–‰๋œ๋‹ค.
  • unmanaged code์™€ ๋™์˜์–ด๋กœ ํ˜ผ์šฉ๋˜๋Š” ์ผ์ด ์žฆ๋‹ค.
  • ๋งŒ์•ฝ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์„œ ๊ธฐ๋ฐ˜์—์„œ ๋˜‘๊ฐ™์€ ์ž‘์—… ๋‚ด์šฉ์„ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋Š” ๋ฐ”๋กœ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์„ ์ผ์ปซ๋Š”๋‹ค.
  • “ํ˜„์žฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋Œ์•„๊ฐ€๋Š” ํ™˜๊ฒฝ์— ์ ํ•ฉํ•œ ๊ธฐ๊ณ„ ์–ธ์–ด”

์ƒ๊ฐ๋ณด๋‹ค Java์™€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ, ๊ทธ ์ปดํŒŒ์ผ ๊ณผ์ •์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๊ธธ์–ด์ง„๋‹ค…

๋‚˜์ค‘์— ์ถ”๊ฐ€๋กœ Java์˜ ์ปดํŒŒ์ผ ๊ณผ์ •์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์„ ํ•ด์•ผ๊ฒ ๋‹ค.

 

์–ธ๋งค๋‹ˆ์ง€๋“œ ์ฝ”๋“œ unmanaged code

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•œ ๋ถ„๋ฅ˜์ด๋‹ค.
  • ์–ด์…ˆ๋ธ”๋ฆฌ์–ด, C, C++ ๋“ฑ์˜ ์–ธ์–ด๊ฐ€ ์žˆ๋‹ค.
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

๋งค๋‹ˆ์ง€๋“œ ์ฝ”๋“œ managed code

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•œ ๋ถ„๋ฅ˜์ด๋‹ค.
  • Java, C# ๋“ฑ์ด ์žˆ๋‹ค.
  • CLR(Common Language Runtime) ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•œ๋‹ค.
    • CLR์— ๋Œ€ํ•ด์„œ๋Š” ์ถ”๊ฐ€ ํฌ์ŠคํŒ…์„ ์ž‘์„ฑํ•˜๊ฒ ๋‹ค…
  • ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌ๋œ๋‹ค. → Garbage collection์ด ์กด์žฌํ•œ๋‹ค.
  • ์‹คํ–‰ ์‹œ OS๊ฐ€ ์•„๋‹Œ ๊ฐ€์ƒ ๋จธ์‹ ์„ ํ†ตํ•ด ์‹คํ–‰๋œ๋‹ค.
  • ํŠน์ง•
    • ๊ฐ์ฒด์ง€ํ–ฅ ๋ชจ๋ธ
    • ์–ธ์–ด ๋…๋ฆฝ์ 
    • ํ˜•์•ˆ์ •์„ฑ
    • Garbage Collection (๋Œ€์ฒด๋กœ ํฌ์ธํ„ฐ ๊ฐ™์€ ๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค)
    • ๋‹จ์ผ ํ†ตํ•ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ํ”Œ๋žซํผ ๋ ˆ๋ฒจ์—์„œ ๋งŽ์€ API๋“ค์„ ์ œ๊ณตํ•ด ์ค€๋‹ค.

 

๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด native language

  • ์—๋ฎฌ๋ ˆ์ด์…˜์ด๋‚˜ ํ˜ธํ™˜ ๋ชจ๋“œ์˜ ์‚ฌ์šฉ ๋“ฑ ์™ธ์ ์ธ ์ง€์› ์—†์ด, ํŠน์ • ํ•˜๋“œ์›จ์–ด๋‚˜ OS์—์„œ ๊ทธ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š” ์–ธ์–ด๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด๋ผ๊ณ  ํ•œ๋‹ค.
  • CPU ๋‚ด์—์„œ ๊ณง๋ฐ”๋กœ ํ•ด์„๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์œˆ๋„์šฐ ํ”Œ๋žซํผ์˜ ๋Œ€ํ‘œ์ ์ธ ๋„ค์ดํ‹ฐ๋ธŒ ์–ธ์–ด๋Š” C++์ด๋‹ค.
  • ์•ˆ๋“œ๋กœ์ด๋“œ ํ”Œ๋žซํผ์€ Java, Kotlin
  • IOS ํ”Œ๋žซํผ์€ Swift, Objective C ๋“ฑ์ด๋‹ค.

 

 

์ด๊ฑฐ ๋“ค์œผ๋ฉด์„œ ์ž‘์„ฑํ–ˆ๋‹ค.