개인적으로 '정적' 라이브러리를 사용하는것을 더 선호한다.
현대에 와서 C++ 언어가, C언어를 제외한 고급언어 대비 갖는 장점이라 함은
'메모리 절약', '속도' 이 두가지 측면일 것이다.
동적 라이브러리 대신에 → 정적 라이브러리를 사용하는것은 속도에는 영향이 없지만,
메모리를 사용하는데 있어서는 다소 비 효율적이다.
그도 그럴것이 동적 (Dynamic) 라이브러리는
필요한 부분만을 메모리에 올려 사용하는 방식으로 최대한 메모리를 절약 할 수 있기 때문이다.
반면 정적 (Static) 라이브러리는
소스코드의 모든 부분을 실행 바이너리에 포함시키기에, 불필요하게 실행 파일의 크기가 늘어나게 된다.
설명만 들어본다면 동적 라이브러리를 사용하지 않을 이유가 없어 보인다.
하지만 동적 라이브러리에는 치명적인 약점이 존재한다.
바로 '안정성' 이 떨어진다는 점이다.
나는 한때 CryptoPP 라는 라이브러리를 통해 Hash(SHA, MD), Encrypt(AES, RSA) 를 구현 하였는데,
이상하게도 동적 라이브러리로 실행할때, 빌드에 실패하는 현상이 발생하였다.
같은 PC 내에서는 무리가 없었지만 다른 PC에서는 build 되지 않았던 것이다.
결론적으론 그 이유를 찾았는데, 별거 아닌 사소한 이유였었다.
문제는 내가 만드는 코드는 개인 '라이브러리' 였고.
가능하면 다른 사람들이 이러한 잡스러운 문제 없이, 각자 본인의 코드에 삽입하여 사용하는것을 원했다.
바이너리로 배포하는것이라면 '동적' 라이브러리도 상관 없겠지만.
다른 코드에 삽입되는 목적을 지닌 프로젝트에 '동적' 라이브러리는 걸림돌이 될 수 밖에 없다.
때문에 그 뒤로 나는 해당 프로젝트에선 '정적' 라이브러리를 주로 사용하게 되었다.
여담으로
위와 같이 안정성이 떨어지는 현상을 'DLL HELL' 이라고 표현한다.
정말 이유가 뭔지도 모르는 사소한 설정변화로 인해서 DLL이 갑자기 안돌아가기 시작하면,
그 많은걸 하나하나 다 확인 해 봐야한다.
이런 지랄맞은 상황이 매 버전을 업데이트 할 때마다 나타나면... 정말 역겹다.
결론
MS가 안 쓰려고 단계적으로 없애는 것은 대부분 '이유' 가 있다.
여러 의견이 있지만
나는 동적 라이브러리를 사용하는것을 '지양' 해야 한다고 생각한다.
하지만 현재로써는 DLL은 매우 광범위한 영역에서 사용되므로
C++ 개발자라면 사용법은 반드시 숙지하고 있어야 한다.
현재로서 개발용 버전은 정적, 배포 버전은 동적 버전으로 배포하는것을 추천한다.
'Programming > C++' 카테고리의 다른 글
[C++] std::thread 를 멈추는 방법 (0) | 2021.09.18 |
---|---|
[C++] std::thread vs std::async (0) | 2021.09.17 |
[C++] 인터페이스에 관한 팁 (순수가상함수) (0) | 2021.06.09 |
[C++] 다형성 vitual 키워드에 관한 팁 (0) | 2021.06.09 |
[C++] openSSL Hash 사용법 (0) | 2021.05.12 |