Database Inspector로 데이터베이스 디버그하기

Android 스튜디오 4.1 이상에서는 Database Inspector를 사용하여 앱 실행 중에 앱의 데이터베이스를 검사하고 쿼리 및 수정할 수 있습니다. 이 방법은 데이터베이스 디버깅에 특히 유용합니다. Database Inspector는 SQLite를 기반으로 빌드된 라이브러리(예: Room) 및 일반 SQLite를 사용한 작업을 지원합니다.

Database Inspector 열기

Database Inspector에서 데이터베이스를 열려면 다음 단계를 따르세요.

  1. API 수준 26 이상을 실행하는 에뮬레이터 또는 연결된 기기에서 앱을 실행합니다.

  2. 메뉴 바에서 View > Tool Windows > App Inspection을 선택합니다.

  3. Database Inspector 탭을 선택합니다.

  4. 실행 중인 앱 프로세스를 드롭다운 메뉴에서 선택합니다.

  5. 현재 실행 중인 앱의 데이터베이스가 Databases 창에 나타납니다. 검사하려는 데이터베이스의 노드를 확장합니다.

데이터 보기 및 수정

Databases 창에 앱의 데이터베이스 목록과 각 데이터베이스에 포함된 테이블이 표시됩니다. 테이블 이름을 더블클릭하면 검사기 창의 오른쪽에 데이터가 표시됩니다. 열 헤더를 클릭하여 열을 기준으로 검사기 창의 데이터를 정렬할 수 있습니다.

Database Inspector 창 스크린샷
그림 1. Database Inspector 창

셀을 더블클릭하고 새 값을 입력한 다음 Enter 키를 누르면 테이블의 데이터를 수정할 수 있습니다. 앱에서 Room을 사용하고 UI가 데이터베이스를 관찰(예: LiveData 또는 Flow 사용)하는 경우 데이터의 변경사항이 실행 중인 앱에 즉시 표시됩니다. 그러지 않으면 앱이 다음에 데이터베이스에서 수정된 데이터를 읽을 때만 변경사항이 표시됩니다.

실시간 데이터베이스 변경사항 확인

실행 중인 앱과 상호작용할 때 Database Inspector에서 제공하는 데이터가 자동으로 업데이트되도록 하려면 검사기 창 상단의 Live updates 체크박스를 선택하세요. 실시간 업데이트를 사용하는 동안 검사기 창의 테이블은 읽기 전용이 되어 값을 수정할 수 없습니다.

또는 검사기 창 상단에 있는 Refresh table 버튼을 클릭하여 수동으로 데이터를 업데이트할 수도 있습니다.

데이터베이스 쿼리

Database Inspector는 앱이 실행되는 동안 앱의 데이터베이스에서 쿼리를 실행할 수 있습니다. 이 도구는 앱이 Room을 사용하는 경우 DAO 쿼리를 사용할 수 있지만 맞춤 SQL 쿼리도 지원합니다.

DAO 쿼리 실행하기

앱이 Room을 사용하는 경우 Android 스튜디오는 DAO 클래스에 이미 정의된 쿼리 메서드를 빠르게 실행할 수 있는 거터 작업을 제공합니다. 이 작업은 앱이 실행되는 동안 사용할 수 있으며 Database Inspector는 IDE에서 열립니다. @Query 주석 옆에 있는 Run SQLite statement in Database Inspector 버튼을 클릭하여 DAO에서 쿼리 메서드를 실행할 수 있습니다.

DAO 거터 작업 스크린샷
그림 2. DAO 쿼리 거터 작업

앱에 데이터베이스가 두 개 이상 있는 경우 Android 스튜디오에서는 쿼리할 데이터베이스를 드롭다운 목록에서 선택하라는 메시지가 표시됩니다. 쿼리 메서드에 명명된 결합 매개변수가 포함된 경우 Android 스튜디오는 쿼리를 실행하기 전에 각 매개변수의 값을 요청합니다. 쿼리 결과가 검사기 창에 표시됩니다.

맞춤 SQL 쿼리 실행

Database Inspector를 사용하여 앱이 실행되는 동안 앱의 데이터베이스에서 맞춤 SQL 쿼리를 실행할 수도 있습니다. 데이터베이스를 쿼리하려면 다음 단계를 따르세요.

  1. Databases 창 상단에 있는 Open New Query Tab 을 클릭하여 검사기 창에 새 탭을 엽니다.

    새 쿼리 탭 버튼을 보여 주는 스크린샷
    그림 3. New Query 탭 열기
  2. 앱에 데이터베이스가 두 개 이상 있는 경우 New Query 탭의 드롭다운 목록에서 쿼리할 데이터베이스를 선택합니다.

  3. New Query 탭 상단의 텍스트 입력란에 맞춤 SQL 쿼리를 입력하고 Run을 클릭합니다.

또는 쿼리 기록 기능을 사용하여 이전에 사용한 쿼리를 실행할 수 있습니다.

  1. Show query history Show query history 버튼 버튼을 클릭하면 선택한 데이터베이스에 관해 이전에 실행한 쿼리 목록이 표시됩니다.

    쿼리 기록 드롭다운을 보여주는 스크린샷
    그림 4. 쿼리 기록 메뉴
  2. 목록에서 쿼리를 클릭하여 편집기에서 전체 쿼리 미리보기를 확인하고 Enter 키를 눌러 편집기에 복사합니다.

  3. Run을 클릭하여 문을 실행합니다.

New Query 탭에 표시되는 쿼리 결과는 읽기 전용이며 수정할 수 없습니다. 하지만 맞춤 SQL 쿼리 필드를 사용하여 UPDATE, INSERT, DELETE 같은 한정자 문을 실행할 수 있습니다. 앱에서 Room을 사용하고 UI가 데이터베이스를 관찰(예: LiveData 또는 Flow 사용)하는 경우 데이터의 변경사항이 실행 중인 앱에 즉시 표시됩니다. 그러지 않으면 앱이 다음에 데이터베이스에서 수정된 데이터를 읽을 때만 변경사항이 표시됩니다.

오프라인 모드

Android 스튜디오 4.2 이상에서는 프로세스 연결이 해제된 후에도 앱의 데이터베이스를 계속 검사할 수 있습니다. 이를 통해 비정상 종료 후 앱을 디버그하기가 더 쉬워집니다.

연결이 해제되면 Database Inspector가 데이터베이스를 다운로드하여 오프라인 모드로 데이터베이스를 사용할 수 있게 만듭니다. 오프라인 상태에서 테이블을 열고 쿼리를 실행할 수 있습니다.

실시간 앱 프로세스에 다시 연결되면 Database Inspector는 오프라인 모드를 종료하고 기기에 있는 데이터만 표시합니다. 즉, 오프라인 모드에서 표시된 데이터는 앱 프로세스에 다시 연결될 때 유지되지 않습니다. 이러한 제한으로 인해 Database Inspector에서는 오프라인 모드에서 데이터를 수정하거나 수정 SQL 문을 실행할 수 없습니다.

데이터베이스 연결 열어 두기

Database Inspector는 앱이 데이터베이스와 실시간 연결을 유지하는 동안에만 데이터베이스를 수정할 수 있습니다. 따라서 앱이 데이터베이스에 자주 연결되거나 연결이 해제되는 경우 데이터베이스를 검사하기 어려울 수 있습니다. Databases 창에서는 아이콘을 통해 열린 데이터베이스()와 닫힌 데이터베이스()가 식별됩니다.

또한, Databases 창 상단에 있는 Keep database connections open을 사용 중지()에서 사용()으로 전환하면 데이터베이스 연결이 종료되는 것을 방지할 수 있습니다.

추가 리소스

Database Inspector에 관해 자세히 알아보려면 다음 추가 리소스를 참고하세요.

블로그 게시물

동영상