
대부분의 경우 우리는 특정 프로그램이 .dll 파일이 없어 실행되지 않을 때에야 DLL 파일과 마주하게 됩니다. 오류 메시지를 확인한 뒤 인터넷에서 해당 DLL 파일을 찾아 다운로드하고, 적절한 폴더에 넣어 프로그램을 다시 실행하죠. 그리고 그걸로 끝입니다. DLL 파일에 대한 이야기는 보통 여기서 마무리됩니다.
하지만 이 파일들에 대해 조금 더 알아볼 가치가 충분합니다. 파일 하나가 없다는 이유만으로 프로그램이 실행되지 않는 것을 보면 분명 중요한 역할을 하는 것 같은데, 대체 DLL 파일이란 무엇이고 어떻게 작동하는 걸까요? 지금부터 그 답을 찾아보겠습니다.
DLL 파일이란?

거의 모든 사람이 한 번쯤은 DLL 파일을 다뤄본 적이 있습니다. 대개 새로 설치한 프로그램이 특정 DLL 파일이 없다는 이유로 실행되지 않을 때죠.
DLL은 "Dynamic-Link Library(동적 연결 라이브러리)"의 약자로, 마이크로소프트가 Windows와 OS/2 운영체제에서 공유 라이브러리 개념을 구현한 방식입니다. DLL 파일은 본질적으로 EXE 실행 파일과 동일하지만, 링킹 과정에서의 명확성을 위해 다른 이름을 사용합니다. 다만 DLL 파일은 직접 실행할 수 없기 때문에 rundll.exe, rundll32.exe 같은 도구가 별도로 존재합니다.
DLL 파일은 개발자가 코드와 데이터를 공유하기 위해 활용하는 수단입니다. 이를 통해 애플리케이션을 다시 링크하거나 다시 컴파일할 필요 없이 기능을 업그레이드할 수 있습니다. 다시 말해, DLL 파일에는 여러 프로그램이 공통으로 사용하는 코드와 데이터가 담겨 있습니다. 하나의 DLL 파일은 필요로 하는 여러 애플리케이션이 함께 사용할 수 있어, 동일한 정보의 사본을 여러 개 만들어 둘 필요가 없습니다.
DLL 파일은 어떻게 작동할까?

두 개의 파일을 상상해 봅시다. 일반 실행 파일인 "example.exe"와, 이 실행 파일이 사용하는 "library.dll"입니다. "example.exe"가 실행될 때 운영체제는 이 두 파일을 어떻게 연결할까요?
"example.exe"가 실행되면 운영체제는 이를 메모리에 불러온 뒤, 파일 내부에 있는 데이터 테이블을 확인합니다. 이 테이블에는 (말로 표현하자면) "이 프로그램은 library.dll 파일에서 다음 목록의 함수들을 사용한다"는 정보가 담겨 있습니다. 기술적인 용어로는 "example.exe" 프로그램이 "library.dll"로부터 함수를 "임포트(import)"한다, 즉 "가져온 함수(imported functions)"를 사용한다고 표현합니다.
그다음 로더(loader) 코드가 "library.dll"을 검색하고, 파일을 찾으면 메모리에 로드합니다. 이 DLL 파일 내부에는 "익스포트 목록(export list)"이라 불리는 또 다른 목록이 있는데, 여기에는 DLL 내부의 각 함수에 특정 메모리 주소가 연결되어 있습니다. 이 시점부터 "example.exe"가 "library.dll"의 함수를 호출해야 할 때는 해당 주소를 사용하기만 하면 됩니다.
DLL 파일을 구하고 저장하는 방법

특정 프로그램에 DLL 파일이 없을 때 흔히 취하는 방법은 인터넷에서 해당 파일을 검색해 하드 드라이브에 저장하는 것입니다. DLL 파일을 해당 프로그램의 폴더에 넣으면 작동하기는 하지만, 앞서 설명했듯이 여러 프로그램이 같은 파일을 필요로 할 수 있습니다. 따라서 모든 프로그램이 접근할 수 있는 위치, 즉 "System32" 폴더(C:\Windows\System32)에 저장하는 것이 좋습니다. 64비트 사용자라면 "C:\Windows\SysWOW64"에도 DLL 파일을 복사해야 합니다. 두 작업 모두 관리자 권한이 필요합니다.
다만 이 방법은 오래된 DLL 파일, 바이러스 감염 등의 위험을 수반할 수 있어 모든 사람에게 권장되지는 않습니다. 필자의 개인적인 경험으로는 DLL 파일로 인해 문제를 겪은 적이 없습니다(주로 신뢰할 수 있는 사이트에서 받지만, 서드파티 소프트웨어 설치를 피하려면 반드시 "Download Zip File" 옵션을 선택하세요). 결국 이 방식을 사용할지 여부는 개인의 판단에 달려 있습니다.
DLL 파일에 대한 이러한 정보를 알고 계셨나요? 이 글에서 빠진 중요한 내용이 있다면 댓글로 알려주세요.