Windows 64비트의 Sysnative 폴더란?
Windows 7 64비트 버전이 출시되면서 Windows 디렉터리 내부의 폴더 구성에 작은 변화가 생겼습니다. Windows 10, Windows 8, Windows 7의 64비트 에디션에는 Sysnative와 SysWOW64라는 두 개의 새로운 폴더가 포함되어 있습니다. 이 폴더들은 오직 64비트 Windows에서만 존재합니다. 64비트 머신에서 32비트 Windows를 실행하거나, 32비트 머신에서 32비트 Windows를 실행하는 경우에는 이 폴더들을 확인할 수 없습니다.
또한 Windows 디렉터리 외부에는 Program Files (x86)이라는 폴더도 있습니다. 우리는 프로그램의 실행 파일이 저장되는 Program Files 폴더에 익숙한데, 64비트 시스템에서는 64비트 프로그램이 Program Files 폴더에, 32비트 프로그램은 Program Files (x86) 폴더에 각각 저장됩니다. 다만 Windows는 64비트 머신에서 32비트 프로그램을 실행하기 위해 일종의 에뮬레이션을 사용하므로, 원하는 파일에 정확히 접근하려면 Windows(64비트)의 시스템 폴더 구조를 이해하고 있는 것이 중요합니다.
32비트 시스템에서는 32비트 DLL이 System32 폴더에 저장되지만, 64비트 Windows에서는 64비트 관련 DLL이 System32 폴더에 저장됩니다. 이는 프로그래밍 편의성과 하위 호환성 확보를 위한 설계입니다. 즉, 64비트 프로그램이 코드에서 System32를 참조하면 호출 시점에 자동으로 64비트 DLL을 받게 됩니다. 덕분에 개발자들은 Windows 64비트 환경을 위해 프로그램 코드를 별도로 변경할 필요가 없습니다.
요약하자면, Windows는 64비트로 업그레이드한 후에도 기존 프로그램들이 API를 사용할 때 올바른 DLL을 가져올 수 있도록, Windows 디렉터리의 System32 폴더에 있던 모든 32비트 DLL을 다른 폴더로 이동시켰습니다. 문제는 32비트 애플리케이션이 System32 폴더에 직접 접근하려 할 때 발생합니다. 이 경우 해당 프로그램은 64비트 DLL을 처리하도록 작성되지 않았기 때문에 충돌(crash)이 일어날 수 있습니다.
함께 읽기: Panther 폴더란 무엇인가요?
Windows 64비트의 SysWOW64 폴더
Windows 10, Windows 8, Windows 7의 64비트 버전에서는 모든 32비트 DLL이 새로운 SysWOW64 폴더로 이동되었습니다. 따라서 32비트 프로그램이 32비트 DLL을 호출할 때는 SysWOW64 폴더에 접근해야 합니다.
개발자들이 프로그램을 일일이 점검해서 DLL 함수가 SysWOW64 폴더를 가리키도록 수정해야 한다고 생각할 수 있지만, Microsoft는 이미 이 부분까지 처리해 두었습니다. 32비트 프로그램이 C:\Windows\System32를 호출하면 에뮬레이터가 해당 경로를 자동으로 C:\Windows\SysWOW64로 리디렉션합니다. 즉, Windows 64비트에서 32비트 프로그램을 실행하기 위해 에뮬레이터가 사용되며, 이를 통해 하위 호환성이 유지되고 DLL 파일 호출 시 발생할 수 있는 오류도 방지됩니다.
함께 읽기: FOUND.000 폴더란 무엇인가요?
Windows 64비트의 Sysnative 폴더
반대로 32비트 프로그램이나 애플리케이션이 64비트 DLL이 필요한 경우도 있습니다. 이럴 때는 리디렉션 폴더인 Sysnative를 사용해야 합니다. Sysnative는 System32 폴더를 가리키는 가상 폴더이자 별칭(alias)이라고 생각하면 됩니다. 실제로 시스템에 물리적으로 존재하는 폴더는 아닙니다.
따라서 32비트 프로그램이 64비트 DLL에 접근해야 한다면 C:\Windows\System32 경로를 사용해서는 안 됩니다. 32비트 프로그램용 에뮬레이터가 이 경로를 SysWOW64라는 32비트 DLL 폴더로 연결해 버리기 때문입니다. 대신 C:\Windows\SysNative를 DLL 경로로 지정하세요. 경로에 Sysnative를 사용하면 SysWOW64가 아닌 System32 폴더로 리디렉션됩니다.
파일 탐색기를 열어도 C:\Windows에서는 Sysnative 폴더를 찾을 수 없습니다. 폴더 옵션에서 숨김 파일 및 시스템 폴더 표시를 활성화해도 마찬가지입니다. 그 이유는 64비트 Windows에서 실행되는 Windows 파일 탐색기 자체가 64비트 프로그램이며, Sysnative 폴더는 오직 32비트 프로그램에서만 보이고 접근할 수 있기 때문입니다.
핵심 정리:
- System32 폴더에는 64비트 DLL 파일이 저장됩니다.
- SysWOW64에는 32비트 DLL 파일이 저장되며, 32비트 프로그램은 이 폴더로 자동 리디렉션됩니다.
- Sysnative는 32비트 프로그램이 64비트 DLL을 호출할 수 있도록 도와주는 리디렉션 폴더입니다.
추가 참고 자료: MSDN.
System32와 SysWOW64 폴더의 차이점이 궁금하신가요?