1. GAC란?
GAC(Glocal Assembly Cache)란 마이크로소프트사의 CLR(Common Language Runtime) 플랫폼에 도입된 .NET 어샘플리 캐시입니다. 즉, 특수하게 관리되는 중앙 저장소를 두는 접근방법을 통해서 예전에 발생했던 DLL 지옥과 같은 문제가 발생하는것을 피하기 위한 공유 라이브러리라고 생각하시면 됩니다.
GAC에 존재하는 어셈블리들은 강력한 이름으로 서명되어 있기 때문에 동일한 이름이지만 버전이 틀린 여러개의 파일을 동시에 보관할 수 있습니다.
2. GAC의 몇가지 문제점
Global Assembly Cache 매커니즘은 예전의 DLL 지옥과 같은 문제를 피할 수 있게 해주지만, 아직 몇가지 결점을 가지고 있습니다.
- 기본적으로 어플리케이션은 컴파일할때 사용됐었던 .NET Framework 버전이 컴퓨터에 설치가 되어 있어야지만 동작이 가능합니다. 최신 버전의 .NET Framework가 설치되어 있어도 어플리케이션은 동작되지 않습니다.
- 만일 어플리케이션에서 사용된 .NET 코어의 몇가지 호출이 framework의 몇가지의 버전만 지원할 경우 Conditional compilation을 사용해야 할 필요가 있습니다.
- 네이티브 코드에 의존한 .NET 어플리케이션은 GAC 매커니즘안에서도 호환성에 문제가 발생할 위험이 있습니다.
- GAC에 추가할 모든 어셈블리는 강력한 이름을 가지고 있어야 합니다. 그러나 몇가지 상황에서는 강력한 이름을 생성하는게 매우 힘들수 있습니다. 예를 들자면, 만일 강력한 이름을 가지고 있지않은 어셈플리를 참조하는 어셈블리일 경우 GAC에 등록할 수 없습니다. 만일 서드파티 어셈블리 파일을 개발한 개발자가 강력한 이름으로 어셈블리를 서명하지 않았다면 GAC에 등록하는것이 불가능하게 된다는 뜻입니다.