IT

Flutter 데스크탑 앱의 SQLite DB 파일은 어디에 저장될까?

woo333 2025. 4. 18. 23:39

"데스크탑 앱은 잘 실행되는데, 저장된 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회 백업만 수행하도록 설정도 가능하죠.

 

✅ 정리 요약

실행 환경DB 저장 위치
개발 중 (flutter run) .dart_tool/sqflite_common_ffi/databases/
빌드된 앱 실행 시 .exe 경로/.dart_tool/...
명시적 지정 시 Documents/WorkDesk/workdesk.db 등
💡 실행 로그에 debugPrint('데이터베이스 경로: $path'); 같은 로그를 넣으면

내 앱의 DB가 어디에 저장되고 있는지 직접 확인할 수 있어요.