사이드 바이 사이드 어셈블리

(WinSxS에서 넘어옴)

사이드 바이 사이드 어셈블리(side-by-side assembly, SxS, WinSxS) 마이크로소프트 윈도우 기술은 마이크로소프트 윈도우에서 동적 링크 라이브러리(DLL) 사용 시 발생하는 문제(총체적으로 DLL 지옥)를 완화시키는 것을 시도하는, 윈도우 98, 윈도우 2000 이후 버전의 윈도우의 실행 파일을 위한 표준이다. 이러한 문제들은 충돌, DLL을 찾지 못하는 문제, DLL 중복 문제, 유효하지 않거나 존재하지 않는 등록 문제를 포함한다. 사이드 바이 사이드로, 윈도우는 여러 버전의 DLL을 윈도우 디렉터리의 WinSxS 하위 디렉터리에 저장하며 요청 시 이것들을 불러온다. 이를 통해 사이드 바이 사이드 매니페스트를 포함하는 애플리케이션의 경우 의존성 문제를 줄여준다.

비주얼 C++ 2005와 2008은 SxS에 모든 C 런타임 라이브러리들을 포함한다. 그러나 비주얼 C++ 2010에서 라이브러리들은 더 이상 이 기술을 사용하지 않는다. 그 대신 파일명에 DLL의 버전 번호를 포함시켜서 이제는 각기 다른 버전의 DLL이 기술적으로 완전히 각기 다른 DLL임을 의미하게 된다.[1][2]

매니페스트 포맷 편집

애플리케이션 매니페스트는 내부적으로 XML로 표현된다. SxS 매니페스트에 연결된 URL은 "urn:schemas-microsoft-com:asm.v1"이다.

클릭원스 등의 기타 최근의 몇몇 마이크로소프트 기술들은 동일한 매니페스트 포맷을 갖추고 있다.

예시 매니페스트 편집

다음은 C 런타임 DLL에 의존하는 애플리케이션의 매니페스트의 예이다.

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

WinSxS (윈도우 컴포넌트 스토어) 편집

비스타 이후로 윈도우 운영 체제는 코어 구성 요소를 위해 WinSxS를 사용한다. winsxs 디렉터리에 속한 운영 체제 파일들은 윈도우 디렉터리 구조의 일반적인 위치로부터 하드 링크된다. winsxs의 하위 디렉터리의 파일은 여러 위치(예: System32 디렉터리와 애플리케이션 디렉터리)로부터 링크될 수 있다. 윈도우 탐색기는 이 파일들이 차지하는 디스크 공간을 두 번 카운트한다.[3] 이는 fsutil 명령 줄 프로그램을 통해 증명할 수 있다.[4] 링크 카운트를 보여주는 일부 서드 파티 탐색기 확장도 존재한다.

그러나 winsxs의 모든 파일이 이러한 방식으로 "실제" 운영 체제 파일로 투사되지는 않는다. 이를테면 일부 윈도우 업데이트 설치 후 업데이트에 의해 오래된 파일 버전은 winsxs에 그대로 유지되지만 "실제" 윈도우 디렉터리에 더 이상 연결되지는 않는다. 이로써 업데이트는 안전하게 제거할 수 있다.[5]

각주 편집

  1. Section "Visual C++ Libraries" in Breaking Changes in Visual C++. Retrieved on 2010-09-10.
  2. See section "Differences between Visual C++ 2008 and Visual C++ 2010" in "Deployment in Visual C++ 2010" Archived 2018년 3월 25일 - 웨이백 머신. Retrieved on 2010-09-10.
  3. “KB 2592038: How to Alleviate Disk Space Pressure Caused By a Large Windows Component Store (WinSxS) Directory”. 《support.microsoft.com》. 2012년 10월 14일에 원본 문서에서 보존된 문서. 
  4. joscon (2010년 8월 6일). “Should you delete files in the \WinSXS directory? And what’s the deal with VSS?”. 《The Windows Servicing Guy》. 2012년 1월 1일에 원본 문서에서 보존된 문서. 2019년 3월 3일에 확인함. 
  5. Huges, Jeff (2008년 9월 17일). “What is the WINSXS directory in Windows 2008 and Windows Vista and why is it so large?”. Microsoft Corporation. 2011년 3월 15일에 확인함. 

외부 링크 편집