먼저 확인
원본 사진만 복사하면 darktable의 편집 정보와 설정까지 모두 보관되는 것은 아닙니다. 원본·관련 XMP·실제로 사용하는 설정/DB 폴더를 확인하고 앱을 종료한 뒤 새 위치로 복사하세요. 경로·크기·해시가 같은 사본인지 확인하며, 이 확인은 프로그램 복원 성공과 구분합니다.
목차
1. 보관 대상·사본 확인 순서
-
1. 보관 범위 적기
원본 파일, 관련 XMP와 실제 설정·DB 폴더의 경로를 각각 기록합니다. 여러 workspace나 사용자 지정 라이브러리가 있으면 그 위치도 확인하세요.
-
2. XMP와 설정 위치 확인
원본 옆의 XMP 존재와 생성 설정을 확인합니다. XMP가 없다고 빈 파일을 만들지 말고 현재 저장 설정과 편집 상태를 먼저 살펴보세요.
-
3. 종료 후 새 사본 만들기
darktable과 해당 프로세스가 끝난 뒤 새 빈 대상 폴더로 복사합니다. 원본을 이동·삭제하거나 기존 프로필을 덮어쓰지 않습니다.
-
4. 빠짐과 바이트 비교
원본/사본 폴더 구조·파일 개수·크기를 대조합니다. 필요하면 아래 읽기 전용 SHA256 예시로 선택한 폴더 전체의 상대 경로·크기·해시를 비교하세요.
-
5. 기록하고 원본 보관
앱 버전·확인한 경로·복사 시점·대조 범위를 남깁니다. 차이가 있으면 원본을 보존하고 누락이나 변경부터 확인하세요.
2. 보관 범위
이미 사용 중인 darktable 자료를 별도로 보관하는 가이드입니다. 제품 용도와 공식 배포 선택은 darktable 페이지에서 확인하세요. RAW 현상, 라이브러리 수동 편집, 다른 버전으로의 복원 절차는 다루지 않습니다.
| 대상 | 함께 확인할 것 |
|---|---|
| 원본 사진 | RAW·JPEG 등 실제 원본 파일과 하위 폴더 구조. 완성 JPEG 출력만 보관하면 RAW/편집 원본이 남는 것은 아닙니다. |
| 관련 XMP | 원본 옆의 파일명.확장자.xmp와 복제 버전 사이드카. 대부분의 편집/메타데이터를 담지만 모든 DB 정보를 대신하지 않습니다. |
| 실제 설정/DB 폴더 | library.db·data.db·darktablerc와 스타일·Lua·단축키 등 사용 중인 자료. 사용자 지정 library/workspace의 다른 위치도 확인합니다. |
원본이 여러 드라이브에 나뉘어 있다면 한 폴더만 복사하고 전체 사진을 보관했다고 판단하지 마세요. 확인한 경로와 포함 범위를 먼저 적고, 사용하는 workspace마다 라이브러리와 설정의 실제 위치를 확인합니다.
3. XMP 확인
기본 사이드카 이름은 원본 전체 파일명 뒤에 .xmp를 붙인 형태입니다. 예를 들어 사진.NEF 옆의 사진.NEF.xmp를 확인합니다. darktable에서 만든 복제 버전은 원본명_번호.확장자.xmp 형태도 있어 관련 파일을 함께 살펴보세요.
설정의 Storage(저장)에서 XMP 생성 조건을 확인합니다. never(생성 안 함), on import(가져올 때), after edit(편집 후)처럼 설정에 따라 파일 생성 시점이 다릅니다. 아직 생성하지 않는 설정이나 미편집 자료가 있으면 원본 옆에 항상 XMP가 있다고 가정하지 마세요.
없으면 먼저 확인
XMP가 없다고 빈 파일을 만들거나 DB를 수정하지 않습니다. 실제 생성 설정·편집 상태와 DB 보관 범위를 확인하세요. 사용자 지정 정렬 순서처럼 DB에만 있는 정보도 있어 XMP만으로 모든 상태를 보관할 수 있다고 판단하지 않습니다.
4. 설정 폴더
아래는 공식 문서의 기본 위치입니다. 사용자 지정 경로·설치 방식·workspace/library 선택이 다르면 현재 사용하는 위치를 기록하고 보관해야 합니다. 비슷한 이름의 오래된 폴더를 현재 프로필로 단정하지 마세요.
| 환경 | 공식 기본 위치 |
|---|---|
| Windows | %LOCALAPPDATA%\darktable |
| Mac · 일반 Linux | 홈 폴더의 .config/darktable |
| Linux Flatpak | 홈 폴더의 .var/app/org.darktable.Darktable/config/darktable |
| Linux Snap | 홈 폴더의 snap/darktable/current/ |
Windows 파일 탐색기 주소창에 %LOCALAPPDATA%\darktable을 입력해 폴더를 확인할 수 있습니다. 사용자 지정 위치를 쓰는 경우에는 그 실제 폴더를 확인하세요. 경로와 현재 사용 여부가 불명확하면 추측으로 다른 프로필을 복사하거나 덮어쓰지 않습니다.
앱 내부 데이터베이스 스냅샷도 같은 설정 폴더에 저장됩니다. 현재 앱의 생성 주기·보관 개수를 확인하고 해당 드라이브 고장에 대비한 별도 사본과 구분하세요. 공식 문서의 기본 주기/개수 설명에는 차이가 있어 한 숫자로 고정하지 않습니다.
5. 새 사본
- darktable에서 진행 중인 작업을 마치고 앱을 종료합니다. 작업 관리자에서도 해당 프로세스가 끝났는지 확인하세요.
- 원본과 다른 위치에 새 날짜 폴더를 만듭니다. 예: 별도 드라이브의 사진백업 아래 새 날짜 폴더에 원본과 설정 폴더를 나눠 둡니다.
- 확인한 원본 폴더와 관련 XMP를 함께 복사합니다. 여러 원본 위치를 쓰면 각 범위를 빠뜨리지 않도록 따로 복사합니다.
- 실제로 사용하는 설정/DB 폴더를 별도 하위 폴더로 복사합니다. 외부 library나 추가 workspace 위치가 있으면 해당 자료도 기록한 범위에 포함합니다.
- 원본 위치·앱 버전·복사 시점과 포함한 폴더를 기록합니다. 기존 사본이 있으면 덮어쓰기보다 새 폴더를 선택하고, 원본은 그대로 둡니다.
위치의 차이
같은 드라이브의 다른 폴더는 사본 구분에는 도움이 되지만 장치 고장에 대한 별도 보관은 아닙니다. 공간·민감도·보관 장소를 고려해 별도 저장장치를 선택하세요. 동기화 삭제나 이동 명령을 이 복사 절차에 섞지 않습니다.
6. 사본 비교
먼저 파일 탐색기에서 원본/사본의 하위 폴더와 파일명, 파일 개수와 크기를 대조합니다. 원본 폴더 각각과 설정/DB 폴더 각각을 확인하세요. 개수와 전체 크기만 같아도 같은 파일이라는 보장은 아니므로 바이트를 비교할 때는 SHA256을 사용합니다.
PowerShell 7을 이미 사용하는 경우 아래 읽기 전용 예시를 선택할 수 있습니다. 첫 두 줄을 확인할 원본 폴더와 그 폴더의 새 사본 경로로 바꿉니다. 서로 포함되지 않는 다른 폴더를 지정하고, 원본과 사본이 복사 후 변경되지 않은 상태에서 실행하세요. 원본 사진 범위와 설정/DB 범위에 각각 실행합니다. 드라이브 전체나 상대 경로 대신 실제 자료가 있는 절대 폴더 경로를 지정하세요.
$sourceFolder = 'D:\사진\원본'
$backupFolder = 'E:\사진백업\새 사본\원본'
if (-not [IO.Path]::IsPathFullyQualified($sourceFolder) -or
-not [IO.Path]::IsPathFullyQualified($backupFolder)) {
throw '원본과 사본의 절대 폴더 경로를 지정하세요.'
}
$sourceResolved = (Resolve-Path -LiteralPath $sourceFolder -ErrorAction Stop).ProviderPath
$backupResolved = (Resolve-Path -LiteralPath $backupFolder -ErrorAction Stop).ProviderPath
if ($sourceResolved.TrimEnd('\') -eq [IO.Path]::GetPathRoot($sourceResolved).TrimEnd('\') -or
$backupResolved.TrimEnd('\') -eq [IO.Path]::GetPathRoot($backupResolved).TrimEnd('\')) {
throw '드라이브 전체가 아니라 보관할 자료 폴더를 지정하세요.'
}
$sourceRoot = $sourceResolved.TrimEnd('\')
$backupRoot = $backupResolved.TrimEnd('\')
if ($sourceRoot -eq $backupRoot -or
$sourceRoot.StartsWith($backupRoot + '\', [StringComparison]::OrdinalIgnoreCase) -or
$backupRoot.StartsWith($sourceRoot + '\', [StringComparison]::OrdinalIgnoreCase)) {
throw '원본과 사본은 서로 다른, 포함 관계가 없는 폴더여야 합니다.'
}
function Read-Inventory([string]$root) {
$folder = Get-Item -LiteralPath $root -Force -ErrorAction Stop
if (-not $folder.PSIsContainer) { throw '폴더를 지정하세요.' }
if ($folder.Attributes -band [IO.FileAttributes]::ReparsePoint) {
throw '연결된 폴더는 이 비교 예시의 대상이 아닙니다.'
}
$items = @(Get-ChildItem -LiteralPath $root -Recurse -Force -ErrorAction Stop)
if (@($items | Where-Object { $_.Attributes -band [IO.FileAttributes]::ReparsePoint }).Count) {
throw '연결된 파일/폴더가 있습니다. 실제 위치와 보관 범위를 따로 확인하세요.'
}
$files = @($items | Where-Object { -not $_.PSIsContainer })
if (-not $files.Count) { throw '파일이 없는 폴더입니다. 경로와 보관 범위를 확인하세요.' }
foreach ($file in $files) {
[PSCustomObject]@{
Path = $file.FullName.Substring($root.Length).TrimStart('\')
Bytes = $file.Length
SHA256 = (Get-FileHash -LiteralPath $file.FullName -Algorithm SHA256 -ErrorAction Stop).Hash
}
}
}
$original = @(Read-Inventory $sourceRoot)
$copy = @(Read-Inventory $backupRoot)
$difference = @(Compare-Object -ReferenceObject $original -DifferenceObject $copy -Property Path, Bytes, SHA256)
'원본 파일 수: ' + $original.Count
'사본 파일 수: ' + $copy.Count
if ($difference.Count) {
$difference | Format-Table Path, Bytes, SHA256, SideIndicator -AutoSize
} else {
'대상 파일의 상대 경로·크기·SHA256이 같습니다.'
}
이 예시는 파일을 읽어 비교하며 복사·삭제·복원하지 않습니다. 큰 사진 모음에서는 모든 파일을 읽는 만큼 시간이 걸립니다. 연결된 파일/폴더나 빈 폴더는 멈추도록 했으며 실제 자료 경로와 보관 범위를 따로 확인해야 합니다.
| 표시 | 확인할 것 |
|---|---|
| 상대 경로·크기·SHA256이 같습니다 | 지정한 두 폴더의 파일 바이트/목록이 같은 결과입니다. 보관 대상 전체를 골랐는지와 앱 복원은 별도입니다. |
| SideIndicator가 있는 차이 목록 | 원본 쪽에만 있는 파일, 사본 쪽에만 있는 파일 또는 내용 차이를 확인합니다. 원본을 지우거나 덮어써서 맞추지 마세요. |
| 경로·읽기 오류 또는 중단 | 경로·권한·연결된 폴더와 포함 범위를 확인합니다. 중단을 비교 통과로 계산하지 않습니다. |
확인한 범위
해시 일치는 지정한 파일들의 바이트 일치입니다. darktable에서 RAW와 편집 상태를 복원했거나 다른 버전에서 DB가 호환된다는 결과가 아닙니다. 원본과 사본이 확인 도중 바뀌면 작업을 멈추고 안정된 상태에서 다시 비교하세요.
7. 멈출 조건
- darktable 프로세스가 실행 중이거나 현재 사용하는 프로필/원본 위치를 구분하지 못한 경우
- 필요한 XMP·외부 라이브러리·workspace 자료의 존재/보관 범위를 확인하지 못한 경우
- 대상 폴더에 기존 자료가 있거나 원본과 포함 관계여서 비교 범위를 구분하기 어려운 경우
- 복사 오류·누락·읽기 실패·예상하지 않은 파일 개수/해시 차이가 있는 경우
원본을 보존하고 누락·경로·변경 원인부터 확인하세요. DB 수동 편집, 기존 프로필 덮어쓰기, 구버전 복구, 여러 PC에서 같은 작업을 동시에 편집하는 절차는 이 가이드에 포함하지 않습니다.
프로그램 용도와 기기별 배포를 다시 확인하려면 darktable 용도·공식 다운로드 확인으로 돌아가세요.
8. 자주 묻는 질문
원본 사진만 복사하면 편집 정보도 보관되나요?
+
항상 그렇지는 않습니다. 원본과 관련 XMP, 실제 라이브러리/설정 폴더의 범위를 구분해 보관하세요. 원본 옆의 XMP가 모든 DB 정보를 대신하는 것도 아닙니다.
XMP가 없으면 새 파일을 만들면 되나요?
+
빈 XMP를 만들지 마세요. 생성 조건이 never이거나 편집 후 생성하도록 설정됐을 수 있습니다. 실제 설정·편집 상태와 DB 보관 범위를 확인한 뒤 필요한 범위를 정하세요.
완성 JPEG가 있으면 RAW와 DB는 없어도 되나요?
+
완성 JPEG와 다시 편집할 원본·편집 정보는 목적이 다릅니다. 작업을 이어갈 자료를 보관하려면 원본과 관련 편집/설정 자료의 범위를 함께 확인해야 합니다.
앱의 데이터베이스 스냅샷이면 별도 사본은 필요 없나요?
+
스냅샷은 앱이 같은 설정 위치에 보관하는 데이터베이스 자료입니다. 실제 생성 주기·보관 범위를 확인하고 원본 사진 및 장치 고장에 대비한 별도 보관과 구분하세요.
해시가 같으면 darktable 복원도 성공한 건가요?
+
파일 바이트가 같다는 확인입니다. 실제 사용하는 자료 전체를 골랐는지, 앱에서 사진/편집 상태를 열 수 있는지, 다른 버전과 DB가 호환되는지는 별도 확인입니다.
Mac이나 Flatpak도 Windows 설정 경로를 쓰나요?
+
환경과 설치 방식에 따라 기본 위치가 다릅니다. 본문의 경로 표와 공식 문서를 참고하고 사용자 지정 library/workspace의 실제 위치도 따로 확인하세요.
9. 참고 자료
함께 보면 좋은