1. 개요
현대의 업무 환경은 점점 더 클라우드와 가상화 기술을 중심으로 발전하고 있습니다. 특히, VDI(Virtual Desktop Infrastructure) 환경에서는 사용자의 개인 데이터를 안전하게 관리하고, 필요 시 빠르게 복구하거나 동기화할 수 있는 방법이 필수적입니다.
특히 크롬(Chrome)과 같은 브라우저의 북마크는 사용자 경험에 중요한 요소이지만, VDI 환경에서는 로컬 저장소에 의존하기 때문에 데이터 손실이나 분실 위험이 존재합니다.
이번 포스트에서는 PowerShell 을 활용하여 크롬 북마크 파일을 실시간으로 모니터링하고, NFS(Network File System) 등 외부 스토리지로 자동 동기화하는 방법을 소개합니다. 이를 통해 VDI 환경에서도 안정적으로 북마크를 관리할 수 있습니다.
2. 필요한 이유
VDI 환경에서 크롬 북마크 관리가 중요한 이유는 다음과 같습니다:
- 데이터 보호 및 복구 가능성 :
- VDI 환경에서는 사용자의 개인 설정 및 데이터가 로컬 디스크에 저장되지 않도록 설계되는 경우가 많습니다. 따라서 북마크와 같은 중요 데이터가 분실될 위험이 큽니다.
- NFS나 SMB와 같은 네트워크 스토리지를 활용하면 데이터를 중앙 집중적으로 관리하고, 언제든지 복구할 수 있습니다.
- 사용자 편의성 향상 :
- 사용자는 여러 디바이스에서 동일한 북마크를 활용할 수 있어 업무 효율성이 크게 향상됩니다.
- 관리 효율성 증가 :
- IT 관리자는 사용자의 북마크를 중앙에서 백업하고, 필요 시 특정 사용자의 데이터를 신속히 복원할 수 있습니다.
- 시스템 리소스 최적화 :
- PowerShell 스크립트는 Windows 이벤트 기반으로 동작하므로 CPU 및 메모리 부하가 매우 낮습니다. 이는 VDI 환경에서 특히 중요합니다.
3. 코드
아래는 크롬 북마크 파일을 실시간으로 모니터링하고, 변경 시 지정된 경로로 자동 복사하는 PowerShell 스크립트입니다.
# PowerShell 콘솔의 출력 인코딩을 UTF-8로 설정
$OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# 모니터링할 파일 경로 설정 (환경 변수 사용)
$sourceFilePath = Join-Path -Path $([Environment]::GetFolderPath("LocalApplicationData")) -ChildPath "Google\Chrome\User Data\Default\Bookmarks"
$destinationPath = "\\NFS-Server\SharedFolder\Bookmarks\Bookmarks" # NFS 스토리지 경로
# 파일이 존재하지 않는 경우 예외 처리
if (-Not (Test-Path $sourceFilePath)) {
Write-Host "모니터링할 파일이 존재하지 않습니다: $sourceFilePath"
exit
}
# 대상 경로의 디렉토리 확인 및 생성
$destinationDirectory = Split-Path $destinationPath -Parent
if (-Not (Test-Path $destinationDirectory)) {
New-Item -ItemType Directory -Path $destinationDirectory | Out-Null
Write-Host "대상 디렉토리가 생성되었습니다: $destinationDirectory"
}
# FileSystemWatcher 객체 생성
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = Split-Path $sourceFilePath -Parent # 파일이 위치한 디렉토리
$watcher.Filter = Split-Path $sourceFilePath -Leaf # 모니터링할 파일 이름
$watcher.IncludeSubdirectories = $false # 하위 디렉토리 포함 여부
$watcher.EnableRaisingEvents = $true # 이벤트 감지 활성화
Write-Host "파일 모니터링 시작: $sourceFilePath"
# 파일 잠금 상태 확인 함수
function Is-FileLocked {
param (
[string]$filePath
)
try {
$fileStream = [System.IO.File]::Open($filePath, 'Open', 'Read', 'None')
if ($fileStream) {
$fileStream.Close()
}
return $false
} catch {
return $true
}
}
# 마지막 이벤트 시간 기록
$lastEventTime = Get-Date
# 이벤트 핸들러 정의
$action = {
$event = $EventArgs
$changeType = $event.ChangeType
$filePath = $event.FullPath
# 이벤트 간격 확인 (예: 1초 이내의 이벤트 무시)
$currentTime = Get-Date
if (($currentTime - $lastEventTime).TotalSeconds -lt 1) {
return
}
$lastEventTime = $currentTime
Write-Host "$(Get-Date): 파일 변경 감지됨 - 유형: $changeType, 경로: $filePath"
# 파일 잠금 상태 확인 후 복사
if (Is-FileLocked -filePath $sourceFilePath) {
Write-Host "파일이 잠겨 있어 복사할 수 없습니다."
} else {
try {
Copy-Item -Path $sourceFilePath -Destination $destinationPath -Force
Write-Host "파일이 성공적으로 복사되었습니다: $destinationPath"
} catch {
Write-Host "파일 복사 중 오류가 발생했습니다: $_"
}
}
}
# 이벤트 등록
Register-ObjectEvent -InputObject $watcher -EventName Changed -Action $action
Register-ObjectEvent -InputObject $watcher -EventName Created -Action $action
Register-ObjectEvent -InputObject $watcher -EventName Renamed -Action $action
# 프로그램 종료 방지 (무한 루프)
try {
while ($true) {
Start-Sleep -Seconds 1
}
} finally {
# 이벤트 해제 및 리소스 정리
Unregister-Event -SourceIdentifier Changed
Unregister-Event -SourceIdentifier Created
Unregister-Event -SourceIdentifier Renamed
$watcher.Dispose()
Write-Host "파일 모니터링 종료"
}
4. 결과
위 스크립트는 다음과 같은 장점을 제공합니다:
- Windows 이벤트 기반 동작 :
- FileSystemWatcher를 사용하여 파일 변경 이벤트를 실시간으로 감지하므로, CPU 및 메모리 사용량이 매우 적습니다.
- VDI 환경에서 리소스 부하를 최소화하면서도 효과적인 동기화를 구현할 수 있습니다.
- 중앙 집중식 관리 :
- NFS 또는 SMB 스토리지를 활용하여 북마크 데이터를 중앙에서 관리할 수 있습니다. 이는 데이터 손실을 방지하고, 필요 시 신속히 복구할 수 있게 합니다.
- 자동화 및 투명성 :
- 사용자가 별도의 조작 없이 북마크가 자동으로 동기화되므로, 사용자 경험을 저하시키지 않습니다.
- 확장성 :
- 스크립트는 크롬 북마크뿐만 아니라 다른 중요한 파일에도 적용할 수 있습니다. 예를 들어, Firefox 북마크나 기타 설정 파일 동기화에도 활용 가능합니다.
5. 결론
VDI 환경에서 크롬 북마크를 안정적으로 관리하기 위해 PowerShell 스크립트를 활용한 실시간 동기화 방법을 소개했습니다. 이 스크립트는 Windows 이벤트 기반으로 동작하므로 시스템 리소스를 효율적으로 사용하며, NFS와 같은 네트워크 스토리지를 활용해 데이터를 중앙에서 관리할 수 있습니다.
이러한 접근 방식은 사용자의 데이터 보호와 IT 관리자의 운영 효율성을 동시에 만족시키는 우수한 사례입니다. 앞으로도 다양한 IT 환경에서 활용 가능한 자동화 스크립트를 지속적으로 연구하고 공유하겠습니다.
감사합니다! 😊
'Programming > 업무 EXCEL' 카테고리의 다른 글
[엑셀][EXCEL] 조건부 서식 & IF 조건절 활용 (0) | 2021.11.06 |
---|