어셈블리(Assembly)

어셈블리 하면 다들 어셈블리어랑 어셈블러가 생각날지도 모르겠군요…ㅇㅂㅇ;;;

어셈블리는 닷넷의 컴파일된 모듈로 버전 관리되는 배포의 단위입니다. 프로그램 시작 진입점(main 함수)을 가지고 있는 exe 파일과 다른 프로그램으로 시작되는 dll 확장자를 가지고 있습니다. 또 여러 파일로 이루어진 다중 파일 어셈블리와 하나의 파일로 이루어진 단일 파일 어셈블리로 나눌 수 있으며 하나의 응용 프로그램에서 사용하느냐 여러 응용 프로그램에서 사용하느냐에 따라 전용 어셈블리와 공용 어셈블리로 나눌 수 있습니다. 근데 대부분 보는 것은 단일 파일 어셈블리입니다. 이건 좀 더 나중에 다룰 수 있으면 좋겠군요.

어셈블리 구조

위의 그림이 어셈블리 구조입니다.

  • 메니페스트: 어셈블리 자체의 정보를 갖는 메타데이터. 이 어셈블리가 또 다른 어떤 어벨블리를 참조하는지부터 사진에 대한 정보를 모두 담고있다.
  • 형식 메타데이터: 어셈블리에서 사용하는 모든 형식에 대한 구체적이고 자세한 정보를 가지고 있다. 형식 메타데이터 덕분에 리플렉션 기능이 가능하다.
  • CIL 코드: Common Intermediate Language의 약자로, 모든 닷넷 언어들이 만들어 내는 중간코드이다. 이 중간코드는 실행 시 Just-In-Time(JIT)에 의해 네이티브 코드로 변환된다.

닷넨 어셈블리는 CIL 코드라는 중간 코드를 가지고 있다고 했습니다. 그럼 이 구조도 한번 봐야죠. ㅇㅅㅇ

닷넷 컴파일러 구조

위의 구조가 각각의 닷넷 언어의 컴파일러와 Jitter 컴파일러 구조를 보여주는 구조도입니다. 각 닷넨 언어의 컴파일러는 동일한 어셈블리를 만들어 냅니다. 또 이 어셈블리를 어셈블러가 사용되는 시점(실행 시간)에 단 한번(캐싱) 네이티브 코드로 변환합니다. (이 말은 즉, 동일한 논리적, 구조적으로 프로그램을 작성한다면 작성 언어에 대해 굳이 따지지 않는다는 것도 있습니다. ㅇㅅㅇ)

이 외에도 외부에서 라이브러리를 참조하는 과정이 클래스 로더에 있습니다. 주로 사용되는 클래스 라이브러리는 Base Class Library라는 이름으로 닷넷이 있고, 추가적인 라이브러리는 다른 dll을 참조합니다. ㅇㅅㅇ

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다