본문 바로가기

IT 살이/04. 기술 - 프로그래밍

ClickOnce에서 변경되지 않은 어셈블리의 다운 여부 테스트

Q&A 게시판에 올라온 질문중에서 ClickOnce 배포에서 애플리케이션을 게시할때마다(기본적으로 게시 버전은 계속 높아진다), 어셈블리는 변경이 없더라도 다시 다운받는가 라는 질문이 있었다. 이에 대해서 간단히 테스트를 해 봤다.  달봉이의 테스트 노트북 환경은 이렇다.

.NET 2.0 설치

HTTP를 통한 어셈블리 다운 관찰 툴 : IE Inspector(http://www.ieinspector.com/index.html)


테스트를 해 본 결과 ClickOnce 애플리케이션의 버전은 올라가도 그 구성 어셈블리들은 버전이 동일하면 다운되지 않음을 알 수 있었다.

■ 테스트 #1 : 최초 다운 로드 모습

먼저 로컬 머신에 이미 다운된 ClickOnce 어셈블리들을 mage.exe –cc 명령을 통해서 모두 삭제한 후의 다운로드 모습이다. 당연히 모든 파일들을 다 다운받는다.


<그림 1>(클릭하면 선명한 그림이 뜹니다)

■ 테스트 #2 : 애플리케이션 버전 업, 어셈블리 버전 변함 없음

다음은 애플리케이션의 버전은 높이고, 구성 어셈블리들의 버전은 동일한 경우의 다운되는 모습이다.

<그림2>(클릭하면 선명한 그림이 뜹니다)

테스트 #3: 애플리케이션 버전 업, 어셈블리 버전 업

다음은 애플리케이션의 버전도 높이고, 특정 어셈블리의 버전을 하나 1.0.0.0->2.0.0.0으로 업시켜서 다시 게시를 했다. 그러나 그 내용은 변경되지 않았다. 그런 다음 다운되는 모습을 캡쳐한 것이다.

<그림3>(클릭하면 선명한 그림이 뜹니다)

버전이 변경된 어셈블리만 추가로 다운되는 것을 볼 수 있습니다.

테스트 #4 : 애플리케이션 버전 업, 어셈블리 버전 변화 없음, 어셈블리 내용 변경

다음은 어셈블리 버전은 변화가 없으나 어셈블리의 내용은 변경된 경우입니다.

<그림4>(클릭하면 선명한 그림이 뜹니다)

어셈블리 버전은 변경이 되지 않았지만 그 내용이 변경된 경우도 마찬가지로 해당 어셈블리만 다운되는 것을 볼 수 있다.

결론

ClickOnce 애플리케이션의 버전은 업되더라도, 구성 어셈블리들은 버전과 내용이 동일한 경우는 다운되지 않는다.

추측

ClickOnce에서는 배포될 어셈블리들에 대한 정보를 매너페이스 파일에 기록한다. 지난 포스트를 참조하길 바란다.

2009/04/23 - [01. 기술-APP] - [연재 04] ClickOnce : Look Into The Internals


애플리케이션 매너페스트 파일(.exe.manifest)에는 애플리케이션 구성 어셈블리들과 그리고 각 어셈블리들에 대한 해쉬값을 값을 가지고 있다. 클라이언트측 ClickOnce 엔진은 클라이언트측의 해쉬값과 서버측 해쉬값을 비교함으로써 그 어셈블리 다운 여부를 결정할 것으로 보인다.

클라이언트 머신에서는,  수정이 없는 같은 내용의 어셈블리라고 해서 여러 버전의 그 어셈블리를 공유하지는 않는다. 애플케이션별로 모든 어셈블리를 별도의 공간(디렉토리)에 동일한 어셈블리의 복사본을 관리한다. 즉 버전이 동일해서 다운을 받지 않았다고 해서 이전의 어셈블리를 다른 버전의 애플리케이션과 공유하지는 않는다. 그렇다면 .NET 프레임워크에서는 지능적으로 동일한 버전의 어셈블리는 서버측으로부터 다운하는 대신에 클라이언트 머신상에서의 로컬 복사가 이뤄질 것이라는 예상을 해 본다.