.NET 빌드 과정의 이해

JS·2023년 2월 4일
0

Tech Reference

목록 보기
7/13

C# 프로그램의 빌드는 어떻게 이루어지는가?

C# 언어로 이루어진 코드를 실행파일로 만들기 위해 빌드할 때 C# 코드는 CLI 사양을 준수하는 중간 언어(IL; Intermediate Language)로 컴파일 된다. 이 중간언어는 CPU가 바로 해석할 수 없기 때문에 가상 머신(VM; Virtual Machine)인 CLR이 CPU가 이해할 수 있도록 해석해주어야 한다

코드가 IL로 변환되면 다시 한번 프로그램에 사용되는 리소스와 함께 패키징 되어 어셈블리(Assembly)가 된다. C#에서의 어셈블리는 모든 프로젝트가 성공적으로 컴파일되면 컴파일러에서 자동으로 생성되는 파일인데, 동적 링크 라이브러리(DLL; Dynamic Link Library) 또는 실행파일(EXE; Executable)이다

C/C++를 컴파일하면 생성되는 어셈블리 언어와는 다른 개념이기 때문에 혼동되어서는 안된다

CLR의 역할

만들어진 C# 프로그램을 실행하면 어셈블리가 실행되며 CLR에 로드된다. CLR은 어셈블리 안에 존재하는 IL코드를 플랫폼에 따라 동적 변환 컴파일(JIT; Just IN Time Compilation) 혹은 정적 변환 컴파일(Ahead-Of-Time Compilation) 과정을 수행하여 네이티브 코드(Native Code)로 변환한다

그리고 변환된 네이티브 코드를 사용하여 프로세서가 주어진 명령을 처리한다

JIT(Just-In-Time)

  • 실행시키면서 변환을 시키는 과정으로 인터프리터(Interpreter) 방식이라고도 한다
  • 코드를 한 줄 한 줄 읽어내려가면서 실시간으로 기계어로 번역하는 과정이 진행된다
  • 동적 컴파일 기술이라고도 한다
  • 실행시간이 구조상 AOT보다 느리다

AOT(Ahead-Of-Time)

  • 이 방식은 코드를 전부 읽고 기계어로 변환한다
  • 본래 영어단어의 뜻을 생각하여 Ahead-Of, 실행시키기 전에라는 의미이다
  • 정적 컴파일 기술이라고도 한다
  • 실행시간이 구조상 JIT보다 빠르다

.NET Framework에서 소스코드가 변환되는 과정


Reference

profile
게임 프로그래머 지망생

0개의 댓글