현재 계약
플러그인의 최소 계약은 core:plugin-api에 있습니다.
interface Plugin {
val id: String
val types: Set<String>
suspend fun pull(type: String, sinceMs: Long, untilMs: Long): List<Event>
}
인터페이스의 시간 범위 의도는 [sinceMs, untilMs)입니다. 실제 제공자 구현이 해당 인자를 어떻게 적용하는지는 별도로 확인해야 합니다. 이 계약은 배포된 외부 DTRAC SDK의 초기화 API가 아닙니다.
활성화 필터
일반 앱 초기 조회는 registry의 활성 설정과 allowlist, 빌드 기능 설정, 그리고 Plugin.types를 함께 고려합니다. registry의 types와 플러그인이 실제 광고하는 타입의 교집합을 조회합니다.
센서 시작기는 선택된 유형을 configure()로 전달받습니다. 설정 없이 호출하는 호환 경로는 전체 허용 동작을 포함하므로, 외부 앱에 이식할 때 초기화·시작·중지 계약이 필요합니다.
확장 순서
- 제공자 ID, 데이터 의미·단위·시간 범위와 필요한 권한을 정의합니다.
Plugin과 해당 제공자 adapter를 구현하고 기존 Hilt 연결 패턴으로 등록합니다.- registry·allowlist·기능 토글과 실제
types를 일치시킵니다. - 기존 repository/ingestion으로 Room 저장을 연결합니다. 새 데이터 형태가 필요하면 엔티티·DAO·migration을 검토합니다.
- 원격 전송과 JSON binding이 필요한 데이터인지 확인합니다.
- 권한 없음, 정상 빈 결과, 조회 실패, 재시도와 중복 기록을 구분해 검증합니다.
반환값과 저장의 차이
일부 구현은 pull 중에 저장하지만 센서 플러그인은 Room 배치의 요약을 읽습니다. 따라서 List<Event>를 반환한다고 자동으로 저장되지는 않습니다. 설문 응답은 별도 제출 경로를 사용하므로 기존 메모리 EventStore를 영속 응답 조회 API처럼 공개하지 않습니다.
현재 내부 모듈을 외부 앱에 배포하는 작업은 Android SDK 계획에서 별도로 다룹니다.