DLL 구동원리
- IT 정보/DLL메세지 해결
- 2018. 10. 11. 13:42
컴퓨터를 사용하다 보면 여러 오류를 경험하게 된다. 처음 접하게 되면 어 이거 뭐야 하면서 당황하면서 기사 또 불러야 하나라고 생각하는 사람도 있다. 컴퓨터에 대해 잘 모르는 사람들은 포멧까지 생각하는 경우도 있는데 늘 말하지만 포맷은 제일 나중에 하는 것이다. 물론 자주쓰는 프로그램까지 세팅된 이미지가 있다면 키 하나만 누르면 복구되니 편한것도 사실이고 Windows7이후 윈도우 자체에서 지원하는 기능으로 편하게 쓰고 있는 것도 사실이다.
DLL 그것이 알고 싶다
DLL 메시지 원리
보통 새롭게 프로그램을 설치하거나 패치 후에 발생하는 경우가 많다. DLL은 Dynamic Link Library의 약자다. 실행파일에 속하지만 우리가 알고있는 exe 확장자가 아니라 의아해 할 수 있다. 자세히 설명하기는 그렇고 간단히 설명하겠다. 스마트폰에는 다양한 기능이 있는데 스마트폰을 off하고 다시 on하면 안드로이드가 되었던 구동이 된다. 이때 다양한 모듈이 실행된다. 카메라 기능을 실행하면 그 기능에 대한 프로그램만 실행된다. 여기서 인터넷 전화 메진저 기능이 한 프로그램으로 구동되면 무겁고 불필요하게 메모리 사용량도 커진다.
DLL 존재의 이유
아래는 DLL 파일 실행되는 방식을 순서도로 표현해봤다.
DLL 구동원리
DLL은 정적프로그램 처럼 링크 시에 실행 파일에 결합되는 것이 아니라 실행 될때 DLL도 함께 프로그램의 메모리 공간에 로딩되어 주소등을 호출하여 사용 할 수 있다. DLL은 공용자원 처럼 프로그램 실행 시 필요 할 때마다 메모리에서 로딩 할 수 있고 필요없다면 해제 할 수 도 있다.
DLL 장점
위에서 표현했지만 공용자원 처럼 동시에 여러 프로그램에서 필요한 DLL을 호출하면 다른 프로그램에게도 라이브러리를 자원 사용을 허용한다. 실행 파일은 DLL에 있는 함수를 가져올 수 있다. 즉 import가 가능해지게 되어 DLL은 함수를 실행파일로 보낼 수 있게 된다. 실행파일이 3번이 실행되면 메모리에 적재된다. 이때 DLL 파일을 메모리에서 중복되어 적재된이 있는지 파악 후 신규로 필요한 것이라면 적재를 하고 그렇지 않으면 적재하지 않습니다.
즉 이미 실행 파일에 의해 DLL이 메모리에 탑재되어 있으면 새롭게 메모리 주소를 부여하여 탑재를 하지 않는것이다. 즉 수십개의 실행 파일이 실행되더라도 동일한 DLL을 호출한다면 한번의 호출로 동작이 가능하여 효율이 비약적으로 늘어난다.
정적으로 구동된다면 실행 할 때마다 적재되어 메모리를 너무 비효율적으로 사용되어 사용자 입장에서는 스트레스만 가중 됩니다. 이만큼 초기 설계가 중요합니다.
예를 들어보자. 10개의 프로그램을 만들다고 가정해보자.
프로그래밍을 조금이라도 수업을 들은 사람은 이 #include <stdio.h> 헤더파일은 기억할 것이다. 이 헤더를 이용하여 컴파일하여 만들면 편하기는 하지만 그 과정에서 용량이 라이브러리 만큼 용량이 커져버린다. 1Mb 용량을 가진 프로그램을 만들었지만 사용된 라이브러리가 2MB용량이나 사용했다면 3MB가 되어 10개의 프로그램이면 30MB가 필요하지만 DLL을 이용하여 프로그래밍하면 총 12MB로 상당히 줄어든다.
운영체제 또는 프로그램을 세분화하여 필요한 기능만 사용하기 위한 DLL 확장자를 가진 파일이다. 위에서도 언급 했지만 로컬 디스크에 잘 모셔두었다가 베스킨라빈스 처럼 내가 원하는 것만 골라서 실행 할 수 있다
PC를 쾌적하게 사용하기 위해선 자원관리가 중요하다. 메모리가 부족하다고 가상메모리 늘려달라고 메시지도 팝업되는 경우도 있으니 말이다. 세분화 되어있는 DLL파일은 공유하여 사용이 가능하다. 약자가 그대로 동적인 또는 아낌없이 나눠줄 수 있는 친화력 강한 함수 모음집이라 생각하면 좋을 것 같다.
정리
정적인 라이브러리를 사용하여 컴파일 할 경우 중복되는 라이브러리를 사용될 경우 용량도 커지고 메모리 자원 소모도 커지게 된다. 우리에겐 아낌없이 공유해주는 DLL이 있기에 중복 사용되는 라이브러리를 공용 라이브러리로 대체하여 프로그램 용량과 메모리를 간소화 하는 장점이 있다.
정적인 라이브러리를 통해 만들어진 프로그램은 10개 모두 다 수정해야 하지만 DLL을 사용한 경우 DLL만 수정하면 된다. 자원관리와 유지보수에 용이하다.
다음 포스팅은 윈도우 초기 셋팅 또는 프로그램이나 게임등 패치 후 발생되는 DLL ERORR에 대한 FIX를 같이 해보자.