iOS/공통
[iOS 경고 메시지] nw_connection_add_timestamp_locked_on_nw_queue [C3] Hit maximum timestamp count, will start dropping events
건우(gunoo)
2024. 4. 28. 19:49
1. 경고 메시지 뜻
네트워크 연결에서 최대 타임스탬프 수에 도달하여 이벤트를 삭제하기 시작한다는 의미
서비스의 네트워크 통신이 많은 이벤트를 생성하고 있어서 모든 로그 이벤트를 작성할 수 없다는 경고로 이해하자.
"네트워크 연결에서 최대 타임스탬프 수에 도달" 했다는 것은 무엇일까?
일반적으로 시스템(OS)은 네트워크 연결에 대한 세부 정보를 기록하고 추적한다.
이러한 로그들을 통해 우리는 네트워크 연결의 동작을 모니터링하고 분석할 수 있다.
그러나 필요에 의해서 또는 알 수 없는 상황에서 네트워크 활동이 매우 빈번하게 발생하여 로그 데이터가 매우 많이 생길 수가 있는데,
이때 시스템은 최대 타임스탬프를 기록할 수 있는 수를 설정하여, 최대 수를 넘길 경우 더 이상 정보를 처리하지 않게 되어있다.
더 이상의 타임스탬프 이벤트를 무시하고 삭제처리를 함으로 리소스를 절약하는 것이다.
주로 디버깅 상태인 [개발]을 진행하면서 만날 수 있는 경고인데, 필요해 의해 네트워크 활동을 빈번하게 발생시키는 경우는 거의 없으니...
해당 경고 메시지를 만났다면 네트워크 통신이 너무 빈번하게 이뤄지고 있는 것이기 때문에, 시스템 자원을 효율적으로 사용하기 위해 최적화할 필요가 있다.
2. 해결 방법
- 네트워크 이벤트 감소:
- 불필요한 네트워크 요청을 최소화하자
- 빈번한 자동 업데이트나 반복적인 요청을 하고 있는지 체크하자
- 요청이 필요한 경우, 적절한 캐싱을 사용하여 이전에 받은 데이터를 재사용하자.
- 서버로의 요청을 줄여줄 뿐만 아니라 네트워크 대역폭을 절약 할 수 있다.
- 요청 및 응답 데이터의 크기를 최소화할 필요가 있다.
- 필요한 최소한의 데이터만 전송하여 네트워크 부하를 감소시키자.
- 해당 내용은 서버와도 소통이 필요할 것이다.
- 불필요한 네트워크 요청을 최소화하자
- 비동기 프로그래밍 적용:
- 네트워크 작업을 비동기적으로 처리하여 메인 스레드의 블로킹을 방지하자.
- 앱의 응답성을 향상시키고 네트워크 작업의 병렬 처리를 하도록 하자.
- Combine, DispatchQueue, OperationQueue 등의 비동기적 작업을 관리해 주는 방법이 있다.
- 네트워크 작업을 비동기적으로 처리하여 메인 스레드의 블로킹을 방지하자.
- 네트워크 연결 최적화:
- 연결을 여는 횟수를 최소화하기 위해 연결을 재사용하거나 연결 풀링을 구현하자.
- HTTP/2 또는 WebSocket과 같은 프로토콜을 사용하여 네트워크 연결의 효율성을 높이는 것도 방법이다.
- 네트워크 프로토콜 및 페이로드 최적화:
- 바이너리 형식의 데이터를 사용하여 데이터 크기를 줄일 수도 있다.
- JSON 대신 Protocol Buffers 또는 MessagePack과 같은 바이너리 형식의 데이터를 사용하여 데이터 크기를 줄일 수 있다.
- 이러한 방법도 있다는 것을 알아두자.
- 여러 방법을 알아두는 것은 문제를 해결하는데 다양한 아이디어를 가져다 준다.
- 필요한 경우 데이터 압축을 사용하여 네트워크 트래픽을 감소시킬 수도 있다.
- 이미지나 비디오 등의 미디어 해상도를 조절하여 전송되는 데이터의 양을 줄일 수 있다.
- 바이너리 형식의 데이터를 사용하여 데이터 크기를 줄일 수도 있다.