Computer >> 컴퓨터 >  >> 시스템 >> Windows 7

Windows 공유 폴더·네트워크 드라이브 접근이 느릴 때: SMB 캐시 문제 해결 가이드

증상: 공유 폴더 열기가 10~60초씩 걸리는 문제

사용자들이 Windows에서 네트워크 공유 폴더를 열거나 파일을 저장할 때 매우 느린 네트워크 성능을 호소하는 경우가 있습니다. UNC 경로(\\서버\공유폴더)나 매핑된 드라이브 문자로 공유 폴더에 접속하면 폴더 내용이 화면에 표시되기까지 10~60초가 걸립니다. 또한 네트워크 폴더에 새 파일을 만들어도 즉시 나타나지 않고, F5 키로 새로 고침을 해도 3~4분 후에야 보입니다. 흥미로운 점은 전체 파일 경로(\\lon-file-srv1\public\new_file.docx)를 직접 입력하면 파일 탐색기에는 보이지 않더라도 파일 자체는 정상적으로 열린다는 사실입니다.

Windows 공유 폴더·네트워크 드라이브 접근이 느릴 때: SMB 캐시 문제 해결 가이드

SMB 네트워크 리다이렉터의 캐싱 메커니즘

Windows는 원격 컴퓨터의 공유 파일이나 네트워크 리소스에 접근할 때 네트워크 리다이렉터(Network Redirector)라는 특수 구성 요소를 사용합니다. SMB v2.x부터(프로토콜 버전별 차이 참조) 이 네트워크 리다이렉터는 공유 폴더와 파일에 네트워크로 접근할 때 캐싱 메커니즘을 활용합니다. 덕분에 클라이언트와 서버 간의 트래픽과 SMB 요청 수를 크게 줄일 수 있으며, 특히 느리고 불안정한 네트워크 환경에서 그 효과가 두드러집니다. 기본적으로 이 캐시는 10초마다 초기화됩니다.

Windows 클라이언트에서 네트워크 공유 접근이 느리다면, 클라이언트 측 또는 공유 폴더 설정에서 SMB 메타데이터 캐싱을 비활성화해 볼 수 있습니다.

공유 폴더 설정에서 SMB 캐싱 비활성화하기

공유 폴더 속성을 연 뒤 공유 탭 → 고급 공유캐싱으로 이동합니다. 여기서 두 번째 옵션인 “이 공유 폴더의 파일 또는 프로그램을 오프라인으로 사용할 수 없음”을 선택합니다.

Windows 공유 폴더·네트워크 드라이브 접근이 느릴 때: SMB 캐시 문제 해결 가이드

또는 다음 PowerShell 명령으로도 처리할 수 있습니다:

Set-SMBShare -Name MySharedDocs -CachingMode None

이 명령은 해당 공유 폴더의 캐싱과 오프라인 액세스를 모두 비활성화합니다(Windows 오프라인 파일 기능 관련 문서 참조).

SMB 클라이언트 캐시를 제어하는 레지스트리 값

SMB 클라이언트 측 네트워크 공유 폴더 캐시 설정을 제어하는 레지스트리 값은 세 가지가 있습니다. Microsoft는 이러한 기본값이 대부분의 환경에서 최적의 성능을 제공한다고 안내하고 있습니다. 캐시 설정은 다음 레지스트리 키에 위치합니다: HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters

  • DirectoryCacheLifetime: 공유 폴더 메타데이터 캐시의 수명(기본값 10초)
  • FileNotFoundCacheLifetime: “파일을 찾을 수 없음” 응답 캐시(기본값 5초)
  • FileInfoCacheLifetime: 파일 정보 캐시 유지 시간(기본값 10초)

이러한 레지스트리 설정에 대한 자세한 내용은 Microsoft의 Windows 파일 서버 성능 최적화 공식 문서(docs.microsoft.com)에서 확인할 수 있습니다.

SMB 캐싱이 오히려 문제를 일으키는 이유

기본적으로 SMB 공유 폴더의 캐시 수명은 10초에 불과합니다. 클라이언트가 공유 폴더 내용을 새로 고치면 마지막 업데이트 결과가 10초간 클라이언트에 저장되며, 이후 이 네트워크 공유에 접근할 때 모든 애플리케이션은 먼저 로컬 캐시를 사용하려고 시도합니다.

그런데 일부 환경에서는 SMB 폴더의 데이터 캐싱 메커니즘이 올바르게 작동하지 않습니다(주로 수천 개의 파일과 폴더를 담고 있는 네트워크 폴더·드라이브에서 발생). 이 경우 사용자는 공유 폴더에서 파일을 열거나, 조회하거나, 생성할 때 상당한 지연을 경험하게 됩니다.

레지스트리로 SMB 캐싱 완전히 끄기

SMB 폴더의 캐싱을 비활성화하려면 HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters 키 아래에 DirectoryCacheLifetime이라는 이름의 DWORD 값을 새로 만들고 값을 0으로 설정합니다. 마찬가지로 FileInfoCacheLifetimeFileNotFoundCacheLifetime 값도 0으로 지정합니다. regedit.exe를 직접 사용하거나, 다음과 같이 New-ItemProperty PowerShell cmdlet으로 생성할 수 있습니다:

$regpath= "HKLM:\System\CurrentControlSet\Services\LanmanWorkstation\Parameters"
$Name1 = "DirectoryCacheLifetime"
$Name2 = "FileInfoCacheLifetime"
$Name3 = "FileNotFoundCacheLifetime"
New-ItemProperty -Path $regpath -Name DirectoryCacheLifetime -Value 0 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $regpath -Name FileInfoCacheLifetime -Value 0 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $regpath -Name FileNotFoundCacheLifetime -Value 0 -PropertyType DWORD -Force | Out-Null

Windows 공유 폴더·네트워크 드라이브 접근이 느릴 때: SMB 캐시 문제 해결 가이드

설정을 적용하려면 컴퓨터를 재시작해야 합니다. 도메인에 가입된 여러 대의 컴퓨터에 동일한 설정을 배포해야 한다면 GPO(그룹 정책)를 활용하면 편리합니다.

주의: 네트워크 폴더 캐싱을 비활성화하면 네트워크 트래픽이 증가하고 파일 서버 성능이 저하될 수 있으므로, 신중하게 적용해야 합니다.

Set-SmbClientConfiguration으로 SMB 클라이언트 세부 조정

레지스트리를 직접 수정하는 대신 Set-SmbClientConfiguration cmdlet으로 SMB 클라이언트를 세부적으로 조정할 수도 있습니다:

Set-SmbClientConfiguration -DirectoryCacheLifetime 0
Set-SmbClientConfiguration -FileInfoCacheLifetime 0
Set-SmbClientConfiguration -FileNotFoundCacheLifetime 0

현재 Windows SMB 클라이언트의 캐싱 설정은 다음 PowerShell 명령으로 확인할 수 있습니다:

Get-SmbClientConfiguration | select *cache*

DirectoryCacheEntriesMax : 16
DirectoryCacheEntrySizeMax : 65536
DirectoryCacheLifetime : 0
FileInfoCacheEntriesMax : 64
FileInfoCacheLifetime : 0
FileNotFoundCacheEntriesMax : 128
FileNotFoundCacheLifetime : 0
Windows 공유 폴더·네트워크 드라이브 접근이 느릴 때: SMB 캐시 문제 해결 가이드

설정 변경 후에는 공유 폴더의 모든 변경 사항이 클라이언트에 즉시 반영됩니다. 폴더 내용이 접근할 때마다 실시간으로 새로 고쳐지며 로컬 캐시는 더 이상 사용되지 않습니다.

공유 폴더 성능 저하의 그 밖의 원인들

  • 공유 폴더 설정에서 “액세스 기반 열거(Access-based Enumeration, ABE)” 옵션을 활성화하면 개체 수가 많은 공유 폴더에서 파일 목록 갱신이 느려질 수 있습니다.
  • Windows Server 2019에서 구동되는 Hyper-V 가상 머신은(Windows Server 2016/2012R2에 비해) 네트워크 속도가 느려지는 문제가 보고된 바 있습니다.
  • 도메인 가입 장치의 TCP/IPv4 연결 속성에서 레거시 NetBIOS 프로토콜을 비활성화해 보세요(ncpa.cpl 실행 → 네트워크 어댑터의 TCP/IPv4 설정 열기 → WINS 탭에서 “NetBIOS over TCPIP 사용 안 함” 선택).
  • Windows 클라이언트 장치에서 네트워크 및 TCP/IP 스택 설정을 초기화해 보세요. Windows 10 이상에서는 설정 앱의 네트워크 초기화 기능을 사용하거나 netsh int ip reset 명령을 실행하면 됩니다.