Skip to content

프로그램 실행 과정

Program Execution Steps는 소스코드로 작성한 프로그램을 실행하는 과정을 말한다. 이러한 과정은 언어의 특성에 따라 다르게 나타난다.

컴파일 언어

컴파일 언어는 코드가 실행되기 전 컴파일러를 거쳐 기계어로 번역된다. 대표적인 언어로는 C/C++가 있다.

Java 또한 컴파일 언어에 속하나 이번 문서에서는 바이트코드 언어라는 항목으로 분리하여 설명한다.

실행 단계는 보통 Compile Time, Load Time, Execution Time으로 구분한다.

Compile Time

프로그램을 실행하기 위해서는 컴퓨터가 읽을 수 있는 코드로 변환하는 과정이 필요하다. 이때 소스코드는 CompilerAssembler 등을 사용하여 특정 목적 코드로 변환된다. C/C++의 경우 Proprocessing 과정을 거치기도 한다.

Load Time

번역된 기계어는 외부 라이브러리나 컴포넌트 등을 연동하는 과정을 거치기도 하는데, 여기에 Linker가 사용된다. 이후 Loader를 사용하여 필요한 시스템 라이브러리와 함께 프로그램을 메모리에 로드한다.

Execution Time

메모리에 적재된 프로그램은 프로세스로서 실행되며, 동적으로 필요한 라이브러리를 로드한다.

바이트코드 언어

바이트코드는 특정 하드웨어가 아닌 가상머신에서 실행하기 위한 코드를 말한다. 대표적으로 JVM 언어(Java, Kotlin, Scala 등)와 C#이 있다.

이러한 언어들은 컴파일 언어와 인터프리터 언어의 중간에 속하는 특징을 가지므로 하이브리드 방식이라고 부르기도 한다.

실행단계는 보통 Compile TimeRun Time으로 구분한다.

Compile Time

고급 프로그래밍 언어로 작성된 소스코드를 컴퓨터에서 실행 가능한(Executable) 파일로 만드는 단계이다. 이때 JVM 기반 언어나 C# 등은 소스코드를 바이트코드로 번역한다.

Run Time

프로그램이 실행되는 시점이다. 가상머신에서 실행되는 언어들은 이때 JIT 컴파일러를 사용하여 기계어로 번역된다. 즉, 번역과 실행이 함께 이루어진다.

인터프리터 언어

인터프리터 언어는 소스코드를 한 줄씩 읽어 해석하는 방식으로 실행하는 언어이다. 대표적인 언어로는 PythonJS(JavaScript)가 있다.

Run Time

인터프리터는 별도의 컴파일 과정 없이 소스코드를 런타임 시점에 해석한다. 바이트코드 언어가 런타임에 바이트코드를 해석함과 동시에 실행했다면, 인터프리터 언어는 고급 프로그래밍 언어를 바로 해석하고 실행한다.

파이썬 인터프리터는 내장된 컴파일러를 사용해 바이트코드를 런타임에 생성하고 내장된 가상머신을 사용하여 실행한다. 이러한 방식을 통해 플랫폼에 독립적으로 소스코드를 실행한다.

참고문헌


Last update : 29 octobre 2023
Created : 13 mai 2023