Computer >> 컴퓨터 >  >> 시스템 >> Windows

DLL 파일이란 무엇이고 어떻게 작동할까? 핵심 개념 총정리

DLL 파일이란 무엇이고 어떻게 작동할까? 핵심 개념 총정리

DLL 파일이란 무엇이고 어떻게 작동할까? 핵심 개념 총정리대부분의 경우 우리는 특정 프로그램이 .dll 파일이 없어 실행되지 않을 때에야 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 파일은 어떻게 작동할까?

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 파일이 없을 때 흔히 취하는 방법은 인터넷에서 해당 파일을 검색해 하드 드라이브에 저장하는 것입니다. DLL 파일을 해당 프로그램의 폴더에 넣으면 작동하기는 하지만, 앞서 설명했듯이 여러 프로그램이 같은 파일을 필요로 할 수 있습니다. 따라서 모든 프로그램이 접근할 수 있는 위치, 즉 "System32" 폴더(C:\Windows\System32)에 저장하는 것이 좋습니다. 64비트 사용자라면 "C:\Windows\SysWOW64"에도 DLL 파일을 복사해야 합니다. 두 작업 모두 관리자 권한이 필요합니다.

다만 이 방법은 오래된 DLL 파일, 바이러스 감염 등의 위험을 수반할 수 있어 모든 사람에게 권장되지는 않습니다. 필자의 개인적인 경험으로는 DLL 파일로 인해 문제를 겪은 적이 없습니다(주로 신뢰할 수 있는 사이트에서 받지만, 서드파티 소프트웨어 설치를 피하려면 반드시 "Download Zip File" 옵션을 선택하세요). 결국 이 방식을 사용할지 여부는 개인의 판단에 달려 있습니다.

DLL 파일에 대한 이러한 정보를 알고 계셨나요? 이 글에서 빠진 중요한 내용이 있다면 댓글로 알려주세요.