공부/기타

동적 라이브러리(Dynamic library)란?

셩잇님 2023. 6. 10. 17:31
반응형

 

 

1. 동적 라이브러리란?

공유 라이브러리 또는 동적 링크 라이브러리(DLL)라고도 하는 동적 라이브러리는 소프트웨어 개발에 사용되는 라이브러리 유형입니다. 이는 다른프로그램에서 사용할 수 있는 컴파일된 코드와 데이터가 포함된 파일입니다. 정적 라이브러리와 달리 동적 라이브러리는 컴파일 시점에 애플리케이션에 직접 링크되지 않습니다. 대신 애플리케이션이 실행될 때 런타임에 동적으로 로드되고 링크됩니다. 따라서 실행에 필요한 모든 코드와 데이터를 포함할 필요가 없으므로 프로그램을 더 작고 모듈화할 수 있습니다. 또한 동적 라이브러리는 이를 사용하는 프로그램을 다시 컴파일하지 않고도 업데이트할 수 있습니다.

 

2. 동적 라이브러리의 특징

컴파일 및 링크: 동적 라이브러리는 애플리케이션 코드와 별도로 컴파일 및 링크됩니다. 소스 코드는 객체 코드 파일로 컴파일된 다음 이러한 객체 코드 파일이 동적 라이브러리 파일(.dll(Windows) 또는 .so(Unix/Linux))로 함께 번들됩니다.

 

런타임에 로드 및 링크하기: 동적 연결 프로세스는 애플리케이션이 시작되고 실행될 때 발생합니다. 운영 체제는 필요한 동적 라이브러리를 메모리에 로드하고 애플리케이션 코드와 동적으로 연결합니다.

  • 동적 라이브러리는 암시적 또는 명시적으로 로드 및 링크할 수 있습니다.
  • 암시적 링크는 애플리케이션이 시작될 때 운영 체제의 런타임 로더에 의해 자동으로 이루어집니다.
  • 명시적 연결은 플랫폼별 함수 또는 API를 사용하여 프로그래밍 방식으로 동적 라이브러리를 로드하고 연결하는 것입니다.

 

심볼 해상도: 동적 링커는 런타임에 애플리케이션과 동적 라이브러리 간의 심볼 및 참조를 확인합니다.

  • 링커는 동적 라이브러리에 정의된 함수 또는 변수와 같은 외부 심볼에 대한 함수 호출 및 참조를 확인합니다.
  • 동적 링커는 로드된 동적 라이브러리에서 필요한 심볼을 검색하고 참조를 확인합니다.

 

공유 메모리: 동적 라이브러리는 동일한 시스템에서 실행되는 여러 프로세스 간에 공유됩니다. 여러 애플리케이션이 동일한 동적 라이브러리를 사용하면 동일한 메모리 공간을 공유할 수 있으므로 메모리 소비를 줄이고 리소스를 효율적으로 활용할 수 있습니다.

런타임 종속성: 동적 라이브러리를 사용하면 모듈식 설계와 코드 재사용이 가능합니다. 공통 기능을 여러 애플리케이션에서 공유할 수 있는 독립형 모듈로 분리할 수 있는 방법을 제공합니다.

  • 애플리케이션은 동적 라이브러리에서 제공하는 함수와 심볼을 동적으로 로드하고 사용할 수 있으므로 코드 중복을 피할 수 있습니다.
  • 동적 라이브러리는 다른 라이브러리에 대한 자체 종속성을 가질 수 있으며 런타임 링커가 이러한 종속성을 해결합니다.

 

유연성 및 업그레이드 가능성: 동적 라이브러리는 공유 기능을 업그레이드하거나 패치를 적용할 때 유연성을 제공합니다. 동적 라이브러리에서 버그가 발견되거나 기능이 개선된 경우, 라이브러리를 업데이트하면 애플리케이션 자체를 다시 컴파일하거나 다시 링크할 필요 없이 해당 라이브러리를 사용하는 모든 애플리케이션에 변경 사항을 제공할 수 있습니다.

 

3. 동적 라이브러리의 장점
성능 향상: 동적 라이브러리를 사용하면 운영 체제에서 프로그램이 실제로 사용할 때만 프로그램에 필요한 코드와 데이터를 메모리에 로드할 수 있으므로 프로그램 성능을 향상시킬 수 있습니다. 이렇게 하면 프로그램을 시작하는 데 걸리는 시간을 줄일 수 있으며 프로그램이 실행되는 동안에도 성능을 향상시킬 수 있습니다.


이식성 향상: 동적 라이브러리는 프로그램을 다시 컴파일할 필요 없이 다른 운영 체제에서 사용할 수 있도록 하여 프로그램의 이식성을 향상시킬 수 있습니다. 동적 라이브러리의 코드와 데이터는 특정 운영 체제에 국한되지 않기 때문입니다.


개발의 용이성: 동적 라이브러리를 사용하면 개발자가 다른 라이브러리의 코드와 데이터를 재사용할 수 있어 프로그램 개발이 더 쉬워집니다. 이를 통해 개발자의 시간과 노력을 절약할 수 있으며, 다른 개발자가 테스트하고 디버깅한 코드를 사용함으로써 코드의 품질을 개선하는 데 도움이 될 수 있습니다.

 

4. 동적 라이브러리의 단점
복잡성 증가: 동적 라이브러리는 라이브러리의 로딩 및 언로딩을 관리해야 하므로 프로그램의 복잡성을 증가시킬 수 있습니다. 이는 복잡한 작업이 될 수 있으며 올바르게 수행하지 않으면 오류가 발생할 수 있습니다.
보안 위험: 동적 라이브러리를 제대로 관리하지 않으면 보안 위험이 발생할 수 있습니다. 예를 들어, 악의적인 사용자가 악성 동적 라이브러리를 프로그램에 로드할 수 있다면 잠재적으로 프로그램을 제어할 수 있습니다.
종속성 문제: 동적 라이브러리는 프로그램 간에 종속성 문제를 일으킬 수 있습니다. 예를 들어, 두 프로그램이 모두 동일한 동적 라이브러리를 사용하는데 라이브러리가 업데이트되면 두 프로그램이 모두 업데이트되어야 올바르게 작동할 수 있습니다.

 

5. 결론

동적 라이브러리는 코드 재사용성, 모듈식 설계, 메모리 소비 감소, 공유 기능을 독립적으로 업데이트할 수 있는 기능 등의 이점을 제공합니다. 일반적으로 공유 기능, 플러그인 또는 확장성이 필요한 운영 체제, 프레임워크 및 애플리케이션에 사용됩니다. 그렇지만 동적 라이브러리를 사용할 때 고려해야 할 몇 가지 위험과 복잡성도 있습니다.

 

 

 

반응형