[android] 안드로이드 Room Database의 데이터베이스 알림 설정

안드로이드 앱에서 데이터베이스 변경 사항을 실시간으로 감지하고자 할 때 Room 라이브러리의 데이터베이스 알림을 설정할 수 있습니다. 이 기능을 사용하면 데이터베이스에 삽입, 갱신 또는 삭제 작업이 발생할 때마다 해당 변경 사항을 즉시 수신할 수 있습니다. 이 기능은 앱에서 사용자 인터페이스를 업데이트하거나 추가 동작을 수행하는 데 유용합니다.

1. 데이터베이스 알림 설정

먼저, 데이터베이스에서 변경 사항을 수신할 리스너를 구현해야 합니다. Room 라이브러리는 LiveData 또는 Flowable을 통해 데이터베이스 변경 사항을 알림으로 제공합니다.

예를 들어, 다음과 같이 데이터베이스 엔티티에 해당하는 POJO(Plain Old Java Object) 클래스를 만들고, 그 클래스를 LiveData나 Flowable로 감싸면 됩니다.

@Dao
public interface UserDao {
    
    @Query("SELECT * FROM users")
    LiveData<List<User>> getUsers();
    
    @Insert
    void insertUser(User user);
    
    @Update
    void updateUser(User user);
    
    @Delete
    void deleteUser(User user);
}

위의 예시에서 LiveData<List<User>>는 데이터베이스에서 사용자 목록을 가져오는 데 사용됩니다. 이렇게 되면 데이터베이스에 변경 사항이 발생했을 때 앱이 이를 감지하고, UI를 업데이트할 수 있습니다.

2. 변경 사항 처리

이제 데이터베이스 변경 사항을 처리하기 위해 관찰자(Observer)를 추가할 차례입니다. LiveData를 활용하여 데이터베이스 알림을 설정하면, 해당하는 데이터가 변경될 때 앱이 자동으로 업데이트됩니다.

다음은 데이터베이스 변경 사항을 감지하여 UI를 업데이트하는 간단한 예시입니다.

public class MainActivity extends AppCompatActivity {
    
    private UserViewModel userViewModel;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        userViewModel = new ViewModelProvider(this).get(UserViewModel.class);
        userViewModel.getUsers().observe(this, users -> {
            // 데이터베이스를 통해 사용자 목록이 변경될 때마다 해당 동작 수행
            // 예) RecyclerView 갱신, 푸시 알림 표시 등
        });
    }
}

이제 데이터베이스의 변경 사항을 실시간으로 감지해 데이터를 업데이트하는 기능을 추가했습니다.

이렇게 안드로이드 Room Database의 데이터베이스 알림 설정을 통해 데이터베이스 변경 사항을 실시간으로 감지하고 이에 대응하는 액션을 수행할 수 있습니다.

참고 자료