LogStatusNotification 개요
LogStatusNotification은 충전소에서 중앙 시스템(CSMS)으로 보내는 로그 업로드 상태 알림 메시지입니다. 이 메시지는 GetLog 요청에 대한 응답으로 로그 수집, 압축, 업로드의 전체 과정에서 발생하는 상태 변화를 실시간으로 CSMS에 알려 로그 관리의 투명성과 추적성을 제공합니다.
메시지 구조
Request (충전소 → CSMS)
{
"status": "Uploading",
"requestId": 12345,
"statusInfo": {
"reasonCode": "NoError",
"additionalInfo": "업로드 진행률: 45% (2.1MB / 4.7MB)"
}
}
Response (CSMS → 충전소)
{
"customData": {
"vendorId": "LogManager",
"data": "Status acknowledged"
}
}
주요 필드 설명
Request 필드들
status 필드 (필수)
값 |
설명 |
BadMessage |
잘못된 로그 요청 메시지 |
Idle |
유휴 상태 - 로그 작업 없음 |
NotSupportedOperation |
지원되지 않는 작업 |
PermissionDenied |
권한 거부됨 |
Uploaded |
업로드 완료됨 |
UploadFailure |
업로드 실패 |
Uploading |
업로드 진행 중 |
AcceptedCanceled |
승인되었으나 취소됨 |
requestId 필드 (필수)
필드명 |
필수여부 |
타입 |
설명 |
requestId |
필수 |
Integer |
GetLog 요청의 requestId (요청-응답 매칭용) |
statusInfo 필드 (선택사항)
필드명 |
필수여부 |
타입 |
설명 |
reasonCode |
선택사항 |
String |
상태 이유 코드 |
additionalInfo |
선택사항 |
String |
추가 상세 정보 (진행률, 오류 메시지 등) |
Response 필드들
필드명 |
필수여부 |
타입 |
설명 |
customData |
선택사항 |
Object |
벤더별 사용자 정의 데이터 |
실제 사용 예제
예제 1: 로그 수집 시작
// Request
{
"status": "Uploading",
"requestId": 12345,
"statusInfo": {
"reasonCode": "LogCollectionStarted",
"additionalInfo": "보안 로그 수집 시작. 예상 시간: 3분, 파일 크기: 4.7MB"
}
}
// Response
{
"customData": {
"vendorId": "LogTracker",
"data": "Collection started notification received"
}
}
예제 2: 업로드 진행률 업데이트
// Request
{
"status": "Uploading",
"requestId": 12345,
"statusInfo": {
"reasonCode": "UploadInProgress",
"additionalInfo": "업로드 진행률: 65% (3.1MB / 4.7MB), 남은 시간: 약 2분"
}
}
// Response
{
"customData": {
"vendorId": "ProgressMonitor",
"data": "Progress update acknowledged"
}
}
예제 3: 업로드 성공 완료
// Request
{
"status": "Uploaded",
"requestId": 12345,
"statusInfo": {
"reasonCode": "UploadSuccessful",
"additionalInfo": "파일 업로드 완료"
}
}
// Response
{
"customData": {
"vendorId": "LogManager",
"action": "verify_upload",
"data": "Upload verification scheduled"
}
}
예제 4: 업로드 실패
// Request
{
"status": "UploadFailure",
"requestId": 12346,
"statusInfo": {
"reasonCode": "NetworkTimeout",
"additionalInfo": "업로드 실패. 시도: 2/3, 다음 재시도: 30초 후"
}
}
// Response
{
"customData": {
"vendorId": "RetryManager",
"action": "schedule_retry",
"data": "Retry scheduled with extended timeout"
}
}
예제 5: 권한 거부
// Request
{
"status": "PermissionDenied",
"requestId": 12347,
"statusInfo": {
"reasonCode": "InsufficientPrivileges",
"additionalInfo": "보안 로그 접근 권한 없음"
}
}
// Response
{
"customData": {
"vendorId": "AccessControl",
"action": "permission_review",
"data": "Permission escalation request logged"
}
}
예제 6: 지원되지 않는 작업
// Request
{
"status": "NotSupportedOperation",
"requestId": 12348,
"statusInfo": {
"reasonCode": "UnsupportedLogType",
"additionalInfo": "지원 타입: SecurityLog, DiagnosticsLog"
}
}
// Response
{
"customData": {
"vendorId": "CapabilityManager",
"data": "Unsupported operation logged for future enhancement"
}
}
예제 7: 요청 취소
// Request
{
"status": "AcceptedCanceled",
"requestId": 12349,
"statusInfo": {
"reasonCode": "HigherPriorityRequest",
"additionalInfo": "긴급 보안 로그 요청(ID: 12350)으로 인해 현재 작업 취소됨"
}
}
// Response
{
"customData": {
"vendorId": "PriorityManager",
"action": "reschedule_canceled",
"data": "Canceled request rescheduled for later execution"
}
}
예제 8: 잘못된 요청
// Request
{
"status": "BadMessage",
"requestId": 12350,
"statusInfo": {
"reasonCode": "InvalidTimeRange",
"additionalInfo": "잘못된 시간 범위. oldestTimestamp가 latestTimestamp보다 늦음"
}
}
// Response
{
"customData": {
"vendorId": "ValidationEngine",
"data": "Message validation error logged"
}
}
상태 변화 시나리오
성공적인 로그 업로드 흐름
- Uploading (수집 시작): "로그 수집을 시작합니다"
- Uploading (압축 중): "로그 파일을 압축하고 있습니다"
- Uploading (업로드 시작): "업로드를 시작합니다"
- Uploading (진행률): "업로드 진행률: 25%, 50%, 75%..."
- Uploaded (완료): "업로드가 성공적으로 완료되었습니다"
실패 후 재시도 흐름
- Uploading (시작): "첫 번째 업로드 시도"
- UploadFailure (실패): "네트워크 오류로 실패, 재시도 예정"
- Uploading (재시도): "두 번째 업로드 시도"
- Uploaded (성공): "재시도 후 성공적으로 완료"
취소 시나리오
- Uploading (진행 중): "업로드 진행 중: 30%"
- AcceptedCanceled (취소): "더 높은 우선순위 요청으로 취소"
- Idle (대기): "새로운 요청 대기 중"
모니터링 및 알림
진행률 추적
- 수집 단계: 파일 크기, 예상 시간
- 압축 단계: 압축률, 최종 파일 크기
- 업로드 단계: 전송 속도, 완료 예상 시간
오류 처리
- 네트워크 오류: 재시도 횟수, 다음 시도 시간
- 권한 오류: 필요 권한, 현재 권한 레벨
- 시스템 오류: 리소스 부족, 디스크 공간
성능 지표
- 업로드 속도: MB/초
- 압축률: 원본 대비 압축 파일 비율
- 성공률: 전체 요청 대비 성공 비율
중요 포인트
- LogStatusNotification은 GetLog 요청의 전체 생명주기를 추적하는 핵심 메시지입니다
- 실시간 진행률 업데이트를 통해 사용자와 시스템 관리자에게 투명성을 제공합니다
requestId
를 통해 여러 동시 로그 요청을 구별하고 추적할 수 있습니다
- 상세한
additionalInfo
는 문제 해결과 성능 최적화에 중요한 정보를 제공합니다
- 네트워크 불안정 상황에서의 재시도 로직을 투명하게 보고합니다
- 권한 관련 오류는 보안 감사 추적에 중요한 정보입니다
- 대용량 파일 업로드 시 정기적인 진행률 업데이트가 사용자 경험을 개선합니다
- CSMS는 상태 정보를 바탕으로 자동화된 대응 조치를 수행할 수 있습니다
이 메시지를 통해 로그 수집과 업로드 과정의 완전한 가시성을 확보하고, 문제 발생 시 신속한 대응과 해결이 가능하며, 전체 로그 관리 시스템의 신뢰성과 효율성을 크게 향상시킬 수 있습니다.