"데스크탑 앱은 잘 실행되는데, 저장된 DB 파일은 어디 있죠?"
Flutter로 데스크탑 앱을 만들고 SQLite를 사용하다 보면 꼭 궁금해지는 부분입니다.
특히 .exe로 빌드하고 다른 컴퓨터에 넘기려 할 때, DB 파일이 어디에 있는지 모르면 백업도, 데이터 확인도 막막하죠.
✅ 기본 구조: getDatabasesPath()
대부분의 예제에서는 아래와 같이 SQLite 경로를 지정합니다:
final dbPath = await getDatabasesPath();
final path = join(dbPath, 'workdesk.db');
하지만 이 getDatabasesPath()의 반환값은 플랫폼, 실행 환경, 빌드 여부에 따라 달라집니다.
📁 네가 생각한 그 위치가 아닐 수 있다
🧪 개발 중 (디버깅 상태)
<프로젝트 루트>/.dart_tool/sqflite_common_ffi/databases/workdesk.db
→ flutter run으로 앱을 실행할 경우 이 경로에 DB가 생성됩니다.
🛠️ 빌드 후 exe 실행 시
<.exe 파일 위치>/.dart_tool/sqflite_common_ffi/databases/workdesk.db
예를 들어, 빌드 후 build/windows/x64/runner/Release/YourApp.exe를 실행했다면
DB는 아래처럼 생깁니다:
C:\your_project\build\windows\x64\runner\Release\.dart_tool\sqflite_common_ffi\databases\workdesk.db
📌 즉, AppData나 Documents가 아니라, .exe가 있는 위치 기준으로 .dart_tool이 생긴다는 점에 주의하세요.
❗ 이걸 몰랐다면…
"왜 다른 PC에 복사했는데 데이터가 안 남아있지?"
"실행은 되는데 DB 파일을 못 찾겠어."
이런 상황이 벌어질 수 있습니다.
.exe만 복사해선 안 되고, 같은 폴더 내의 .dart_tool 전체를 함께 배포하거나
명시적으로 경로를 지정해주는 게 좋아요.
🔧 안정적인 DB 경로를 직접 지정하는 법
사용자의 Documents 폴더 안에 DB를 저장하는 예제입니다:
import 'package:path_provider/path_provider.dart';
Future<Database> _initDatabase() async {
final docsDir = await getApplicationDocumentsDirectory();
final workdeskDir = Directory('${docsDir.path}/WorkDesk');
if (!await workdeskDir.exists()) {
await workdeskDir.create(recursive: true);
}
final path = join(workdeskDir.path, 'workdesk.db');
debugPrint('📍 DB 경로: $path');
return await openDatabase(
path,
version: 1,
onCreate: _onCreate,
);
}
이렇게 하면 빌드 여부와 상관없이 항상 아래 경로에 저장됩니다:
C:\Users\사용자명\Documents\WorkDesk\workdesk.db
💾 DB 백업도 고려 중이라면?
이 구조를 기반으로 notes_backup_날짜.db 형태로 주기적 백업도 손쉽게 구현할 수 있습니다.
예를 들어 앱 실행 시 1일 1회 백업만 수행하도록 설정도 가능하죠.
✅ 정리 요약
개발 중 (flutter run) | .dart_tool/sqflite_common_ffi/databases/ |
빌드된 앱 실행 시 | .exe 경로/.dart_tool/... |
명시적 지정 시 | Documents/WorkDesk/workdesk.db 등 |
내 앱의 DB가 어디에 저장되고 있는지 직접 확인할 수 있어요.
'IT' 카테고리의 다른 글
Flutter Windows 앱에 아이콘 넣는 법 (아이콘 변경 안 될 때 해결 포함) (0) | 2025.04.18 |
---|---|
Flutter 데스크톱 앱을 exe로 배포할 때 꼭 알아야 할 것들 (0) | 2025.04.18 |