목차
1부. CLR의 기본
3장. 공유 어셈블리와 강력한 이름의 어셈블리
어셈블리를 강력한 이름으로 서명하기
- 잘 알려진 디렉터리에 같이 복사가 될 경우, 나중에 복사되는 어셈블리가 처음 복사된 어셈블리를 덮어쓰는 일이 생겨 이전 버전의 어셈블리를 참조하던 모든 응용프로그램들이 사용하던 함수를 찾을 수 없는 일이 생기게 된다. 이것이 바로 Windows에서의 DLL 지옥의 원형이며, 공유되는 DLL들을 모두 System32 디렉터리 아래로 복사하려고 하기 때문에 문제가 된다.
- 분명한 것은 파일 이름을 이용해서 어셈블리를 구분하는 것만으로는 충분하지 않다는 것이다. CLR은 어셈블리들을 고유하게 식별할 수 있는 새로운 매커니즘을 필요로 한다. 이러한 매커니즘을 강력한 이름의 어셈블리라고 부른다.
- 강력한 이름의 어셈블리는 다음 네 가지의 특성을 통하여 어셈블리를 고유하게 식별하는데, 확장명 없는 파일 이름, 버전 번호, 문화권 정보, 공개 키 값이다.
- 공개 키 값은 매우 큰 숫자로, 공개 키로부터 얻어진 작은 해시 값을 주로 사용한다. 이 해시 값을 공개 키 토큰(Public Key Token)이라고 이야기 한다.
- 마이크로소프트는 표준 공개/개인 키 암호화 기술을 GUID, URL, URN 등을 대신하여 채택하였다.
- 암호화 기술은 어셈블리의 한 비트까지도 무결성이 유지되고 있는지 컴퓨터에 설치될 때 검사할 수 있는 방법을 제공하며, 게시자별로 권한을 다르게 할당할 수 있게 만들어준다.
💡
참고 System.Reflection.AssemblyName 클래스 타입은 어셈블리 이름을 직접 만들거나 만들어진 어셈블리 이름의 분석을 도와주는 도우미(Helper) 클래스다.
- 강력한 이름의 어셈블리는 파일 이름, 어셈블리 버전, 문화권 정보를 가지고 있으며, 여기에 게사자의 개인 키로 서명이 되어 있다.
Uploaded by Notion2Tistory v1.1.0