📌 What is dll?
DLL(Dynamic Link Library)이란 "동적 링크 라이브러리"를 뜻한다.
여기서 그러면 대체 라이브러리가 뭔데? 라는 의문을 가질 수 있다.
dll에 대해 알아보기 전에
먼저 라이브러리에 대해 알아보자.
📌 라이브러리란 ?
- 라이브러리란 소프트웨어 개발에서 자주 쓰고 기초적인 함수들을
중복 개발하는 것을 피하기 위해 표준화된 함수 및 데이터 타입을 만들어서 모아 놓은 것이다.
- 보통 Code를 보면 반복되는 기능들이 많기에 매번 다시 작성하기에 번거로울 수 있기에,
그러한 Logic을 따로 모아둔 파일이라고 볼 수 있다.
이렇게 따로 모아두면 작업 속도도 빨라지고, 작업에 대해 신뢰성 또한 확보할 수 있다.
- 즉, 자주 사용되는 표준적인 함수를 매번 직접 작성해서 사용하는 것은
시간낭비가 심하기 때문에 표준화할 수 있는 함수,데이터, 타입을 미리 만들어서 모아 놓은 것을 뜻한다.
- 이러한 라이브러리를 언제 메인 프로그램에 연결하느냐에 따라
"정적 라이브러리(.lib)" 와 "동적 라이브러리 (.dll)"로 구분할 수 있다.
📌 정적 라이브러리 (.lib, Static Link Library)
- 실행파일 안에 라이브러리가 하나로 묶인다.
- 정적 링크라고 하며 컴파일 시점에 라이브러리가 링커에 의해 Main소스와 연결되어 실행 파일의 일부분이 된다.
즉, 컴파일시 해당 파일 내 함수들이 복사되는 것이다.
- 만들어진 실행파일만 있으면 전달만 하면 되기에 어느 곳에서나 실행이 가능하다. 즉, 배포작업이 쉽다.
- 프로그램 실행 후 처리시간이 빠르다.
- .lib 파일의 형태로 생성된다.
- 실행파일 크기는 라이브러리에 따라 커질 수 있다.
📌 동적 라이브러리 (.dll, Dynamic Link Library)
- 동적 링크라고 하며 실행 파일에서 해당 라이브러리의 기능을 사용 시에만,
라이브러리 파일을 참조하여(혹은 다운로드받아) 기능을 호출한다.
- 실행파일 안에 포함되지 않고, 프로그램 실행 시에 참조된다.
- 실행파일의 크기가 작다.(메모리를 절약할 수 있다)
- .dll 파일의 형태로 생성된다.
- 물리 메모리에 한번 올라간 dll은 둘 이상의 프로세스가 각각 자신의
가상 메모리에 매핑해서 공유하는 구조를 지니기 때문에 메모리 사용에 대한 효율성이 높다.
런타임 중에 필요할 때 외부 dll 파일에서 참조한다.
- 정적 링크와는 다르게 컴파일 시점에 실행 파일에 함수를 복사하지 않고,
함수의 위치정보만 갖고 그 함수를 호출할 수 있게 한다.
- dll은 컴파일 시점에 Main 코드와 결합되지 않는다.
프로그램을 실행하면 dll 파일을 필요할 때 호출한다.
그렇기에 실행파일과 dll 파일은 독립적으로 존재한다고 볼 수 있다.
- 간단한 예를 들자면 메모장이나 그림판, 한글워드 등 다양한 윈도우용 프로그램을 보면
파일열기 기능이 있는데, 동일한 창이 뜨는것을 볼수 있다.
이는 각 프로그램들이 윈도우에서 제공하는 시스템 라이브러리를 사용하기 때문이다.
- 각 프로그램(.exe)에서 필요한 기능을 그때그때 윈도우에서 찾아서 사용하게 되는데,
이 시스템 라이브러리 파일이 .DLL 형태로 윈도우 상에 존재하게 된다
즉, 실행파일인 (.exe) 파일에 모든 기능을 넣지 않고, 별도의 DLL파일로 저장할 수 있다는 것이다.
📌 DLL을 사용하는 이유?
1) 더 적은 리소스 사용
- 한 코드를 여러 프로그램이 동시에 사용하기 때문에 메모리가 절약된다.
- 사용되는 디스크 공간을 줄일 수 있다. (정적링크를 사용하는 경우 실행 파일에 라이브러리의 함수가 모두 포함되어 실행파일이 커지지만 DLL을 사용하는 프로그램은 크기가 작다.)
- 운영 체제와 프로그램이 더 빠르게 로드 및 실행되며 컴퓨터에서 디스크 공간을 더 적게 차지한다.
2) 모듈식 아키텍처 활용
- DLL을 사용하면 모듈식 프로그램을 효율적으로 개발할 수 있다.
- 여러 언어 버전이 필요한 큰 프로그램이나 모듈식 아키텍처가 필요한 프로그램을 개발할 수 있다.
- 기존 DLL 파일 "B"에 새로운 DLL 파일 "C"를 만들어서 성능을 높일 수 있다.
3) 손쉬운 배포와 설치
- DLL 내의 함수를 업데이트하거나 수정해야 하는 경우 DLL을 배포하고 설치할 때
프로그램을 DLL과 다시 연결하지 않 아도 된다.
- 여러 프로그램이 같은 DLL을 사용하는 경우에는 모든 프로그램에 업데이트나 수정 내용이 적용된다.
- 즉, DLL 파일만 변경해서 배포 및 성능 테스트를 할 수 있다.
4) 프로그래머들의 분담 작업이 용이하며 재사용성도 뛰어남.
- 또한 코드의 양이 적어지므로 디버깅도 용이해진다.
📌 DLL 사용 시 주의사항
- 파일 존재 여부와 위치를 유의해야 한다.
DLL 파일을 함부로 이동시키면 프로그램이 정상적으로 작동하지 않을 수 있다.
즉, 실행시 라이브러리가 실행파일에 연결되기에 DLL파일이 꼭 있어야 한다.
- DLL 파일은 여러 언어와 버전으로 만들어질 수 있지만 실행파일과 DLL파일간 호환성이 되는지 유의하여야 한다.
- DLL간 종속성을 유의해야 한다.
ex) 첫번째 DLL 변경으로 인해 두번째 DLL 파일에도 영향을 미칠 수 있다.
- 가끔 어떤 프로그램 사용시 특정 DLL 파일을 어느 위치에 저장시키라고 하는 경우가 있는데
해당 프로그램을 신뢰할 수 있는지 확인해 보아야 한다.해로운 DLL 파일일 수 있기 때문이다.
※DLL 종속성 이란?
프로그램이나 DLL이 다른 DLL의 DLL 함수를 사용하는 경우 종속성이 작성된다.
이런 경우 해당 프로그램은 더 이상 자체 포함 프로그램이 아니며,
종속성이 손상되면 프로그램에 문제가 발생할 수 있다.
예를 들어 다음 작업 중 하나를 수행하면 프로그램이 실행되지 않을 수 있다.
1) 종속 DLL을 새 버전으로 업그레이드하는 경우
2) 종속 DLL을 수정하는 경우
3) 종속 DLL을 이전 버전으로 덮어쓰는 경우
4) 종속 DLL을 컴퓨터에서 제거하는 경우이러한 작업을 대개 DLL 충돌이라고 하고,
이전 버전과의 호환성이 적용되지 않으면 프로그램이 정상적으로 실행되지 않을 수 있다.
📌참고/ 출처
https://goddaehee.tistory.com/185 [갓대희의 작은공간:티스토리]
https://cha930126.tistory.com/81 [코린이의 즐거운 코딩세상:티스토리]
https://na27.tistory.com/223 [na27:티스토리]
'IT - Introduction to Computer Science' 카테고리의 다른 글
[IT지식] 샌드박스[sandbox]란? (0) | 2022.06.10 |
---|---|
[IT지식] 프로토콜(Protocol)이란? (0) | 2022.06.09 |
[IT지식] 프로시저(PROCEDURE)란? (0) | 2022.06.02 |
[IT지식] 쓰레드(Thread)란? (0) | 2022.05.30 |
[IT지식] CSV파일이란? (0) | 2022.05.26 |