NetQuickCheck 기술 문서

무선 분석, 앱 트래픽, 네트워크 프로브 및 보고서를 다루는 NetQuickCheck에서 사용되는 데이터 소스, 계산 및 모니터링 방법입니다.

업데이트됨

데이터 소스 및 인터페이스 선택

NetQuickCheck는 시스템 샘플링, 활성 네트워크 프로브 및 파생 통계를 결합합니다. 시스템 샘플링은 인터페이스, 무선 및 프로세스 연결 정보를 제공합니다. 활성 프로브는 요청에 대한 대상의 응답을 캡처합니다. 파생 통계는 관찰 내용을 전송 속도, 백분위수 및 차트로 변환합니다.

주요 데이터 소스
데이터수집방법용도
네트워크 인터페이스macOS 인터페이스와 네트워크 구성, 라우팅 카운터인터페이스 상태, 주소, 경로, DNS, 전송된 바이트 및 오류 수
무선 네트워크CoreWLAN 연결 판독 및 스캔 결과RSSI, 잡음, 채널, 채널 폭, 액세스 포인트 세부 정보 및 주파수 적용 범위
프로세스 연결nettop 통계 및 프로세스 정보연결의 소속 앱, 원격 주소, 연결 상태, 바이트 카운터와 증가량
대상 응답ICMP, TCP, DNS, HTTP 및 테스트 데이터 전송지연 시간, DNS 결과, 서비스 상태, 경로 및 처리량

선택된 인터페이스가 있는 작업은 해당 인터페이스에 요청을 바인딩합니다. TCP, UDP 및 직접 HTTP 요청은 Network.framework 인터페이스 바인딩을 사용합니다. ICMP 프로브는 시스템 명령의 인터페이스 인수를 사용합니다. 자동 라우팅을 통해 macOS는 경로를 선택하고 자동 HTTP 요청은 시스템 세션 및 프록시 정책을 따릅니다. 선택한 인터페이스는 Wi-Fi, 이더넷 및 기타 사용 가능한 인터페이스 간의 비교를 지원하기 위해 결과와 함께 저장됩니다.

현재 네트워크 및 빠른 확인

인터페이스 판독값 및 전송 속도

현재 네트워크는 연결된 Wi-Fi 네트워크에 대한 무선 판독값과 함께 인터페이스 상태, 주소, 게이트웨이 및 DNS를 읽습니다. 전송된 바이트는 64비트 시스템 라우팅 인터페이스 카운터에서 나옵니다. 수신 오류, 전송 오류 및 수신 대기열 삭제는 별도로 유지됩니다.

수신 속도(B/s) = 샘플 간 수신 바이트 증가량 ÷ 샘플 간격(초)
전송 속도(B/s) = 샘플 간 전송 바이트 증가 ÷ 샘플 간격(초)
비트 전송률(Mbps) = 바이트 전송률 × 8 ÷ 1,000,000

속도는 샘플 간격 동안의 평균 전송량을 나타냅니다. MiB/s는 단위당 1,048,576바이트를 사용합니다. Mbps는 초당 100만 비트를 사용합니다. 인터페이스 카운터와 앱별로 집계된 카운터는 다양한 트래픽 집합을 처리합니다.

빠른 점검 순서

빠른 확인은 로컬 연결을 확인하고, 게이트웨이를 조사하고, DNS를 쿼리하고, 인터넷 연결을 확인하고, HTTPS를 요청한 다음 송신 정보를 확인합니다. 현재 구현에서는 전체 확인에 8초가 허용됩니다. 각 활성 단계는 남은 예산의 최대 2초를 사용할 수 있으며 각 단계가 완료되면 결과가 업데이트됩니다.

게이트웨이 단계에서는 게이트웨이 포트 443에 대한 TCP 연결을 시도합니다. 성공적인 연결과 명시적인 연결 거부 모두 게이트웨이의 응답을 확인합니다. 원래 연결 결과도 유지됩니다. DNS, 인터넷 및 HTTPS 단계는 연결 경로의 각 부분을 검사하는 데 도움이 되도록 자체 응답을 기록합니다.

Wi-Fi 스캐닝 및 무선 측정항목

무선 스캐닝은 CoreWLAN을 사용하여 근처 액세스 포인트의 SSID, BSSID, 기본 채널, 대역, 채널 폭 및 수신 신호 강도를 얻습니다. 사용 가능한 채널 카탈로그는 현재 무선 인터페이스에서 제공됩니다. 방송 정보 요소에는 보안 기능, Wi-Fi 표준, 국가 코드 및 기타 세부 정보가 추가됩니다. SSID 및 BSSID와 같은 식별자에 대한 액세스는 macOS 위치 권한 규칙을 따릅니다.

RSSI, 잡음 및 신호 대 잡음비

RSSI 및 잡음은 1밀리와트에 대한 로그 전력 측정값인 dBm을 사용합니다. RSSI 값이 0에 가까울수록 수신된 신호가 더 강하다는 의미입니다. 두 판독값이 모두 유효하면 앱은 신호 대 잡음비를 계산합니다.

SNR(dB) = RSSI(dBm) − 잡음(dBm)

예를 들어 RSSI가 −55dBm이고 잡음이 −92dBm이면 SNR은 37dB입니다. 현재 계산에서는 −127 ~ −1 dBm의 판독값을 허용합니다. 판독값 중 하나라도 누락되면 SNR은 비어 있는 상태로 유지됩니다.

무선 신호 모니터링에는 두 개의 샘플링 소스가 있습니다. 로컬 모드는 연결된 Wi-Fi 네트워크를 주기적으로 읽습니다. 근처 모드는 선택한 액세스 포인트를 반복적으로 검색합니다. 차트는 각 판독 시간을 유지하며 액세스 포인트 ID는 다양한 무선 신호를 구별합니다.

브로드캐스트된 채널 사용률

액세스 포인트가 유효한 BSS Load 정보 요소를 브로드캐스트하면 앱은 채널 사용률 필드를 0~255에서 백분율(필드 값 × 100 ÷ 255)로 변환합니다. 이는 브로드캐스트 값의 의미를 유지합니다. 채널 오버랩 차트는 아래에 설명된 주파수 적용 범위와 전력 모델을 사용합니다.

채널 범위 및 평가

채널을 주파수 범위로 변환

채널 평가는 대역, 기본 채널 및 채널 폭을 통해 주파수 범위를 구축합니다. 2.4GHz 채널 1~13의 경우 MHz 단위의 중심 주파수는 2407 + 5 × 채널 번호입니다. 채널 14는 별도로 2484MHz로 매핑됩니다. 5GHz의 경우 5000 + 5 × 채널 번호입니다. 20MHz 범위는 중앙의 양쪽으로 10MHz를 확장합니다. 더 넓은 채널은 카탈로그에서 지원하는 하위 채널 블록을 결합합니다.

후보는 대역 및 채널 폭에 따라 생성되며 후보의 모든 하위 채널은 현재 카탈로그에 존재해야 합니다. 이 앱은 2.4GHz에서 20MHz 및 40MHz 조합을 평가하고 5GHz 및 6GHz에서 20, 40, 80 및 160MHz 조합을 평가합니다. 스캔 기록은 밴드별, BSSID별로 병합됩니다. BSSID가 누락된 경우 스캔 레코드 식별자는 동일한 액세스 포인트를 두 번 계산하는 것을 방지하기 위한 대체 ID 역할을 합니다.

채널 폭이나 방향 정보가 불완전하면 확인된 범위와 가능한 범위를 따로 보관합니다. 가능한 모든 배치가 공통으로 차지하는 부분은 확인된 범위이고, 나머지는 가능한 범위입니다. 각 액세스 포인트는 한 번만 계산합니다.

로그 신호 판독값에서 중첩 전력 계산

신호 강도는 dBm에서 상대 선형 전력으로 변환된 다음 주파수 중첩 비율에 따라 가중치가 부여됩니다. 액세스 포인트 i와 후보 c의 경우:

Pᵢ = 10 ^ ((RSSIᵢ + 100) ÷ 10)
wᵢ,c = 총 중복 대역폭 ÷ 모델링된 총 액세스 포인트 대역폭
Poverlap,c = Σ (Pᵢ × wᵢ,c)

+100 항는 공유된 상대 전력 기준을 제공합니다. 채널 폭이 불확실하고 후보 범위와 겹치는 경우 가중치는 보수적으로 1로 설정됩니다. 따라서 신호 강도와 적용 범위 폭이 모두 영향을 미칩니다. 10dB RSSI 차이는 10배의 선형 전력 차이에 해당합니다.

후보 순위

현재 액세스 포인트를 식별할 수 있는 경우 순위가 주변 신호를 평가할 수 있도록 제외됩니다. 현재 순위에서는 DFS 후보를 필터링합니다. 20MHz의 2.4GHz에서는 1, 6, 11 채널 그룹이 선호되며 RSSI가 누락된 액세스 포인트, 예상 간섭 전력, 총 액세스 포인트 수 및 채널 시퀀스를 비교합니다.

모든 후보에 비교 가능한 잡음 측정값이 있으면 잡음도 선형 전력으로 변환해 계산에 포함합니다. 그렇지 않으면 겹치는 신호 전력만 비교합니다. 각 후보의 하위 채널에서는 유효한 잡음 값을 정렬한 뒤 중앙의 값을 사용하고, 전체 후보에는 그중 가장 높은 값을 적용합니다.

동일한 대역 및 채널 폭 내에서 RSSI가 누락된 최상의 후보의 우선순위 그룹 및 액세스 포인트 수를 공유하고 추정 전력이 최고 후보의 두 배를 넘지 않는 경우 현재 구성이 선호됩니다. 2배의 선형 전력 차이는 약 3dB입니다. 이는 작은 차이로 인한 순위 변동을 줄입니다.

중첩 곡선 표시

중첩 곡선은 각 채널 중심 주위의 20MHz 창에서 가중 전력을 계산한 다음 로그 압축을 사용하여 이를 0~1의 상대 표시 범위에 매핑합니다.

표시 강도 = min(1, max(0, log₁₀(1 + Poverlap) ÷ 7))

세로축은 스캔 측정값으로 계산한 상대적인 겹침 강도입니다. 겹치는 액세스 포인트의 RSSI가 유효하지 않으면 해당 위치를 비우고 곡선을 나눕니다. 확인된 범위와 가능한 범위는 따로 표시합니다.

로컬 네트워크 장치 검색

장치 검색은 Bonjour, WS-Discovery, SSDP 및 TCP 서비스 프로브를 결합합니다. Bonjour는 광고된 서비스 인스턴스를 제공합니다. WS-Discovery 및 SSDP는 호환 장치의 응답을 추가합니다. TCP 프로브는 현재 스캔 범위 내의 주소에서 서비스 응답을 확인합니다.

현재 TCP 프로브 포트는 80, 443, 445, 22, 631 및 9100이며 일반적인 웹, 파일 공유, 원격 액세스 및 인쇄 서비스를 담당합니다. 요청은 선택한 인터페이스를 사용합니다. 관찰은 소스, 주소 및 실제 응답을 유지합니다.

장치 검색은 각 소스의 관측 결과를 일괄 병합하고 장치 주소와 서비스 정보를 바탕으로 이름, 유형, 서비스를 정리합니다. 사용할 수 없는 인터페이스, 접근 거부, 시간 초과와 서비스 응답은 별도로 기록합니다. 스캔을 취소하거나 다시 시작하면 이전 스캔의 지연된 콜백을 격리하여 새 결과에 섞이지 않도록 합니다.

앱 트래픽 및 연결의 앱 식별

시스템 연결 테이블에서 앱 찾기

앱 트래픽은 nettop에서 프로세스, 프로토콜, 로컬 및 원격 엔드포인트, 인터페이스, 연결 상태 및 바이트 수를 읽습니다. 앱은 실행 중인 애플리케이션 정보, 프로세스 상위 관계 및 실행 경로를 결합하여 도우미 프로세스를 소유 앱과 연결합니다.

소유권 일치는 먼저 프로세스 자체를 확인한 다음 최대 16개의 상위 프로세스를 따릅니다. 일치하는 항목이 없으면 실행 파일이 포함된 앱 번들 경로를 사용합니다. 프로세스 ID에는 재사용된 PID를 구별하기 위한 시작 시간도 포함됩니다.

각 연결의 변화를 계산한 후 앱별로 집계

연속 샘플의 연결을 프로세스, 프로토콜, 로컬·원격 주소와 포트, 인터페이스로 대응시킵니다. 두 바이트 카운터가 비교 가능한 동일 연결의 값일 때만 전송 속도를 계산한 뒤 앱별로 합산합니다.

연결 다운로드 속도 = (현재 수신 바이트 − 이전 수신 바이트) ÷ 샘플 간 시간 차
연결 업로드 속도 = (현재 전송 바이트 − 이전 전송 바이트) ÷ 샘플 간 시간 차
앱 속도 = 앱과 관련 프로세스의 유효한 연결 속도 합계

새로운 연결은 먼저 기준선을 설정합니다. 카운터 재설정, 인터페이스 변경 또는 15초를 초과하는 샘플 간격에는 새로운 비교 샘플이 필요합니다. 시스템이 고유하게 일치할 수 없는 여러 개의 동일한 행을 반환하는 경우 앱은 해당 행을 유지하고 전송 속도를 비워 두므로 일치 모호성이 트래픽 급증으로 나타나지 않습니다.

원격 연결 및 ICMP 관찰

앱 연결 모니터링은 처음 및 마지막으로 본 시간, 상태 변경 및 트래픽 델타를 유지하고 ICMP를 사용하여 검색된 원격 IP를 독립적으로 프로브합니다. 트래픽, 연결 활동 및 ICMP 결과는 시간별로 정렬됩니다. 대기 시간 읽기는 대상 IP의 ICMP 응답에서 발생합니다.

핑 및 TCP 프로브

ICMP Echo 및 무응답 비율

Ping은 프로브의 대상 주소를 확인해 고정한 다음 IPv4 ICMP Echo 또는 IPv6 ICMPv6 Echo 요청을 보냅니다. 구성에 따라 지속적인 모니터링이 반복되어 실제 전송, 응답, 누락된 응답 및 반환된 왕복 시간을 기록합니다.

무응답 비율 = 응답이 없는 프로브 ÷ 실제로 전송된 프로브 × 100%

카운트는 시스템 출력으로 확인된 전송 수를 사용합니다. 해결 실패, 권한 거부 및 전송할 수 없는 요청은 특정 상태를 유지하며 전송된 프로브 분모에 입력되지 않습니다. 지연 시간 통계는 유효한 응답 RTT를 사용합니다.

TCP 포트 연결

TCP 포트 모니터링은 대상을 해결한 후 선택한 포트에 연결을 시도하고 단조 시계를 사용하여 성공 또는 오류까지의 시간을 측정합니다. DNS 확인이 먼저 완료되고 TCP 연결 타이밍이 별도로 측정됩니다. 성공, 연결 거부, 시간 초과 및 기타 시스템 오류는 별도로 보관되어 시간이 지남에 따라 동일한 서비스 포트가 어떻게 작동하는지 보여줍니다.

DNS 쿼리 및 응답 검증

DNS 모니터링은 선택한 서버에 A, AAAA, CNAME, MX, TXT, NS, SOA, PTR 등의 레코드를 질의합니다. 시스템 이름 확인과 지정 서버 질의는 별도 경로를 사용합니다. 자동 라우팅은 요청에 따라 시스템 이름 확인 또는 dig를 사용하며, 지정 인터페이스의 질의는 UDP 포트 53으로 패킷을 교환합니다.

직접 쿼리는 트랜잭션 ID를 생성하고 질문 이름, 유형 및 IN 클래스를 작성합니다. 응답 코드, 리소스 레코드 및 TTL을 구문 분석하기 전에 패킷 길이, 트랜잭션 ID, 응답 플래그, 질문 수, 이름, 유형 및 클래스에 대한 응답을 확인합니다. 패킷 파서는 압축된 도메인 이름 포인터를 확장합니다.

선택한 유형의 레코드가 있는 NOERROR, 해당 레코드가 없는 NOERROR, NXDOMAIN, 잘린 패킷 및 전송 실패가 별도로 기록됩니다. PTR 쿼리는 먼저 IPv4 또는 IPv6 주소를 역방향 조회 이름으로 변환합니다. 타이밍에는 쿼리 및 응답 구문 분석이 포함되며 결과는 실제 서버 및 레코드 내용을 유지합니다.

HTTP 응답 및 단계 타이밍

웹사이트 모니터링은 HTTP 또는 HTTPS HEAD 요청을 보내고 반환된 상태 코드, 최종 URL 및 기간을 기록합니다. 자동 라우팅은 URLSession 트랜잭션 측정항목을 사용합니다. 명시적인 인터페이스 또는 확인 경로를 통해 직접 HTTP 구현에서는 Network.framework 연결 보고서 및 요청 타임스탬프를 사용합니다.

요청 단계별 소요 시간
단계시작끝
DNS대상 이름 확인이 시작됩니다.이름 확인 완료
TCP연결 시도가 시작됩니다TCP 연결이 설정되었습니다. TLS 시간은 별도로 측정됨
TLS보안 핸드셰이크가 시작됩니다.보안 핸드셰이크 완료
요청 전송요청 전송이 시작됩니다요청 전송 완료
첫 번째 바이트까지의 시간요청 전송 완료첫 번째 응답 바이트가 수신됨
응답 수신첫 번째 응답 바이트가 수신됨HEAD 응답 수신 완료

단계 기간은 종료 타임스탬프와 시작 타임스탬프의 차이입니다. 재사용된 연결에는 새로운 DNS, TCP 또는 TLS 단계가 없을 수 있습니다. 유효한 타임스탬프가 없는 단계는 비어 있습니다. 리디렉션은 각 요청에 대한 타이밍을 유지합니다. 총 확인 기간은 해결, 리디렉션, 예약 및 기타 실제 오버헤드도 포함하므로 별도로 측정됩니다.

HTTPS는 시스템 인증서 신뢰 검증을 사용하고 유효한 인증서에서 주체, 발급자, 유효 기간 및 SHA-256 지문을 추출합니다. HTTP 상태 코드는 서버의 응답을 설명합니다. 전송 오류는 연결 프로세스를 설명합니다. 둘 다 별도로 저장됩니다.

네트워크 경로 및 홉별 프로브

네트워크 경로 모니터링은 대상 주소를 확인해 고정한 다음 1부터 증가하는 IPv4 TTL 또는 IPv6 홉 제한을 사용하여 ICMP 프로브를 보냅니다. 중간 라우터는 시간 초과 응답을 반환할 수 있지만 대상은 에코 응답을 반환할 수 있습니다. 앱은 이러한 응답을 사용하여 홉 주소와 사용 가능한 타이밍을 구성합니다.

각 회차는 최대 16개 홉을 검사합니다. 중간 홉이 응답하지 않아도 이후 홉을 계속 확인하며, 대상의 응답을 받으면 회차를 종료합니다. 도달 불가나 정책 거부 응답은 원래 결과를 유지합니다. 노드 주소는 있지만 유효한 소요 시간이 없으면 주소를 보관하고 시간은 비워 둡니다.

부하 시 처리량 및 응답성

현재 네트워크: Apple networkQuality

현재 네트워크 화면은 macOS networkQuality를 실행해 다운로드·업로드 속도, 유휴 상태의 지연 시간, 부하 상태의 응답성(RPM)을 읽습니다. RPM은 Apple 도구가 측정한 분당 왕복 횟수이며, 앱은 반환된 값을 유지합니다. 원시 전송률을 1,000,000으로 나누어 Mbps로 표시합니다.

인터페이스를 선택하면 속도 테스트 명령에 인터페이스 인수가 포함되고 결과에 반환된 인터페이스 이름을 확인합니다. 시스템이 일부 지표만 제공하는 경우 해당 필드는 유지되고 나머지 필드는 비어 있습니다.

모니터: 서버 및 시스템 속도 테스트

각 모니터 속도 테스트 라운드는 선택한 Cloudflare 또는 LibreSpeed 엔드포인트에 대해 다운로드 및 업로드 테스트를 실행한 다음 Apple networkQuality를 실행합니다. 두 가지 방법은 자체 소스, 시간 및 실제 결과를 유지합니다. 엔드포인트 다운로드는 테스트 페이로드를 읽습니다. 업로드는 앱에서 생성된 임시 데이터를 사용합니다. 평균 처리량은 실제로 전송된 바이트와 해당 단계의 경과 시간을 기준으로 계산됩니다.

처리량(Mbps) = 실제로 전송된 바이트 수 × 8 ÷ 경과 시간(초) ÷ 1,000,000

요청은 명시적인 테스트 페이로드, 시간 초과 및 캐시 정책을 사용하여 전송 진행률, 대상 바이트 수 및 실제 전송된 바이트를 별도로 유지합니다. 단계 결과는 완료된 전송, 부분 전송, 실패한 전송을 구분합니다. 기록은 동일한 조건에서 비교를 지원하기 위해 서버와 인터페이스를 유지합니다.

지속적인 모니터링, 차트 및 통계

공유 타임라인의 독립적 샘플링

모니터에는 Ping, TCP, DNS, 웹사이트, 네트워크 경로, 속도 테스트, 무선 신호, 인터페이스 트래픽, 앱 트래픽, 앱 연결 등 10가지 도구 유형이 포함되어 있습니다. 각 작업은 자체 목표, 매개변수 및 샘플 시간을 유지합니다. 공유 시간 창은 관찰을 정렬하여 시간 경과에 따른 대기 시간, 무선 판독값, 트래픽 및 서비스 응답을 비교합니다.

활성 프로브 및 대역폭 전송은 별도의 리소스 할당량을 요청합니다. 현재 기본 예산은 8개의 동시 프로브 작업과 2개의 동시 전송을 허용합니다. 예산을 초과하는 작업은 할당량이 해제될 때까지 기다립니다. 취소는 할당량을 해제하기 전에 실제 작업이 종료될 때까지 기다립니다. 할당량은 각 개별 프로브 또는 전송에 적용됩니다. 반복되는 작업은 다음 라운드에 다시 요청합니다.

차트 세그먼트 및 상대적 변경 사항

차트는 샘플 시간과 세그먼트 ID를 기준으로 포인트를 연결하여 중단을 별도로 유지하고 오류를 개별적으로 표시합니다. 뷰포트 경계에서의 보간은 그리기에만 사용됩니다. 통계는 실제 관찰을 사용합니다.

상대 지연 시간 스파이크 마커가 활성화되면 앱은 동일한 세그먼트에 있는 이전 5개 샘플의 중앙값 m을 사용합니다. max(3 × m, m + 5 ms)보다 큰 지연 시간이 표시됩니다. 무선 신호 변경 마커는 판독값을 최근 중앙값과 비교하고 최소 8dB의 차이를 표시합니다. 이러한 규칙은 최근 기준을 기준으로 변경 사항을 찾습니다.

중앙값, P95 및 변동량

시간 범위 내의 유효한 유한값을 골라 오름차순으로 정렬합니다. 값의 개수가 홀수이면 중앙의 값, 짝수이면 중앙에 있는 두 값의 평균을 중앙값으로 사용합니다. 유효한 값이 없으면 통계는 비어 있습니다. P95는 최근접 순위법을 사용합니다:

P95 = 오름차순 샘플에서 위치 ceil(0.95 × n)의 값
ICMP 무응답 비율 = 응답하지 않은 프로브 수 ÷ 실제로 전송된 프로브 수
ICMP 지연 시간 변화 = 유효한 인접 응답 간 절대 RTT 차이의 합 ÷ 유효한 인접 쌍 수

앱 연결의 ICMP 세션은 원시 기록 보존 범위와 별도로 0.1 ms 간격의 히스토그램을 사용해 백분위수를 집계합니다. 0~2000 ms의 유효한 응답은 각 구간에 포함합니다. 그보다 큰 값은 오버플로 횟수에 포함하고 최댓값 계산에도 반영합니다. 백분위수가 오버플로 범위에 속하면 비워 둡니다. 지연 시간 변화는 동일한 구간에서 간격이 2.5초 이하인 유효한 인접 응답만 사용합니다.

모니터링 기록 및 보고서 내보내기

모니터링 기록에는 작업 매개변수, 목표, 샘플 시간, 실제 결과 및 뒷받침하는 증거가 저장됩니다. 차트는 시간에 따른 변화를 보여주고, 보고서는 읽기나 추가 처리를 위해 관찰 내용을 정리합니다.

HTML
작업 요약, 결과 및 세부 정보가 포함된 읽기 가능한 보고서입니다.
CSV
스프레드시트 분석을 위한 시간, 범주, 개체, 대상, 방법, 상태, 값, 단위 및 세부 정보 등의 열로 정리된 증거입니다.
JSON
추가 처리를 위한 구조화된 기록, 구성 및 결과입니다.

장시간의 앱 연결 세션은 분할 아카이브를 사용합니다. 내보내기를 시작할 때 읽기 범위를 고정한 뒤 아카이브와 메모리에 남은 데이터를 차례로 읽어 일관된 데이터 경계를 유지합니다. 누락된 값, 실패와 취소는 각각의 상태를 유지합니다.