BITS를 사용하는 경우 모범 사례

이 섹션에는 BITS를 사용하는 애플리케이션을 디자인할 때 고려해야 할 정보가 포함되어 있습니다.

사용자 컨텍스트 또는 서비스 컨텍스트

BITS는 작업 소유자가 컴퓨터에 로그온한 경우에만 파일을 전송합니다(사용자가 대화형으로 로그온해야 함). BITS는 RunAs 명령을 지원하지 않습니다. 자세한 내용은 사용자 및 네트워크 연결을 참조하세요.

애플리케이션에 대한 사용자의 컨텍스트가 필요하지 않은 경우 LocalSystem, LocalService 또는 NetworkService로 실행되는 서비스를 대신 작성하는 것이 좋습니다. 이러한 시스템 계정은 항상 로그온되므로 전송에는 사용자 로그오프가 적용되지 않습니다. 그러나 작업을 만들 때 사용자를 가장하는 경우 대화형 로그온 규칙이 적용됩니다. 자세한 내용은 서비스 계정 및 BITS를 참조하세요.

작업은 영구적입니다.

작업은 IBackgroundCopyJob::Complete 또는 IBackgroundCopyJob::Cancel 메서드를 호출할 때까지 큐에 남아 있습니다. Complete를 호출할 때까지 작업에서 파일을 사용할 수 없습니다. 일반적으로 작업 상태가 BG_JOB_STATE_TRANSFERREDComplete를 호출하고 작업이 BG_JOB_STATE_TRANSIENT_ERROR 또는BG_JOB_STATE_ERROR 상태이고 더 이상 진행할 수 없을 때 Cancel을 호출합니다.

Complete 메서드 또는 Cancel 메서드를 90일 이내에 호출하지 않으면(기본 JobInactivityTimeout 그룹 정책) 서비스가 작업을 취소합니다. 항상 Complete 또는 Cancel 메서드를 호출해야 하며 JobInactivityTimeout 정책을 사용하여 작업을 정리하지 않아야 합니다. MaxJobsPerUser 또는 MaxJobsPerMachine 정책 제한에 도달하면 큐에 남아 있는 작업으로 인해 사용자가 다른 작업을 만들지 못할 수 있습니다.

포그라운드 또는 백그라운드 우선 순위를 사용하는 경우

작업이 시간이 중요하거나 사용자가 적극적으로 대기하지 않는 한 항상 백그라운드 우선 순위를 사용해야 합니다. 그러나 프록시 또는 서버가 Content-Range 헤더를 지원하지 않거나 클라이언트의 바이러스 백신 소프트웨어가 범위 헤더 요청을 제거하는 경우와 같이 백그라운드 우선 순위에서 포그라운드 우선 순위로 전환하려는 경우가 있습니다. 포그라운드 우선 순위로 전환은 파일 크기가 2GB 미만인 파일에 대해서만 작동합니다. 예제는 IBackgroundCopyCallback::JobError 메서드에 대한 구현을 참조하세요. 또한 네트워크 연결 끊기 또는 사용자 로그오프로 인해 포그라운드 작업이 중단되면 BITS가 중단된 위치에서 전송을 다시 시작하려고 하는 범위 요청을 보내므로 작업이 실패합니다.

Windows 8 시작해서 BITS 다운로드에 대한 HTTP 요구 사항을 충족하지 않는 서버를 대상으로 지정할 때 BITS_JOB_PROPERTY_DYNAMIC_CONTENTBG_JOB_PRIORITY_FOREGROUND 사용하여 다운로드 작업을 구성해야 합니다. 이로 인해 BITS가 중단된 경우(예: 연결 문제 또는 시스템 재부팅으로 인해) 처음부터 다운로드를 다시 시작해야 합니다.

사용 가능한 우선 순위 및 BITS가 우선 순위 수준을 사용하여 작업을 예약하는 방법에 대한 자세한 내용은 BG_JOB_PRIORITY.

일시적 오류 및 심각한 오류

일부 오류는 복구할 수 있으며 일부는 복구할 수 없습니다. 예를 들어 "서버를 사용할 수 없음" 오류는 복구 가능한 오류이며 "액세스 거부됨" 오류는 심각한 오류입니다. BITS는 복구 가능한 오류를 일시적인 오류 상태로 두고 지정된 간격 후에 작업을 다시 시도합니다. 작업을 진행할 수 없는 경우 BITS는 작업을 심각한 오류 상태로 이동합니다. IBackgroundCopyJob::SetMinimumRetryDelayIBackgroundCopyJob::SetNoProgressTimeout 메서드를 사용하여 BITS가 일시적인 오류를 처리하는 방법을 제어합니다.

포그라운드 작업의 경우 작업을 일시적 오류 상태로 유지하고 복구를 시도하는 시간을 제한해야 합니다. SetNoProgressTimeout 메서드를 사용하여 작업이 일시적인 오류 상태로 유지되는 시간을 제한하거나 작업을 심각한 오류 상태로 강제 적용합니다. 작업이 복구되도록 하면 SetMinimumRetryDelay 메서드를 사용하여 최소 재시도 지연 시간을 60초로 설정하거나 IBackgroundCopyJob::Resume 메서드를 호출하여 작업을 다시 활성화해야 합니다.

자세한 내용은 BG_JOB_STATE, BITS 작업의 수명 주기오류 처리를 참조하세요.

네트워크 대역폭 사용량 측정

BITS는 클라이언트의 네트워크 어댑터를 사용하여 사용 가능한 네트워크 대역폭을 예측할 수 있습니다. BITS는 클라이언트 이외의 대역폭을 측정할 수 없으므로 BITS는 WAN 링크를 구성할 수 있습니다. WAN 링크의 정체를 줄이려면 MaxInternetBandwidth 그룹 정책을 사용하여 클라이언트에서 사용하는 대역폭의 양을 제한할 수 있습니다. 자세한 내용은 네트워크 대역폭그룹 정책을 참조하세요.

많은 클라이언트가 지정된 서버에서 파일을 다운로드하는 데 사용할 애플리케이션을 작성하는 경우 요청을 사용하여 서버에 오버로드하지 않도록 다운로드 요청을 엇갈리게 하는 체계를 고려해야 합니다.

프록시 및 서버 인증을 위한 자격 증명 설정

프록시 또는 서버에 사용자 자격 증명이 필요한 경우 BITS에 자격 증명을 제공해야 합니다. 자격 증명을 지정하려면 IBackgroundCopyJob2::SetCredentials 메서드를 호출합니다 . BITS는 기본, 다이제스트, 협상, NTLM 및 Passport 인증 체계를 지원합니다.

인증에 대한 자세한 내용은 인증을 참조 하세요.

사용자 계정 및 서비스 계정에 대한 프록시 설정 지정

기본적으로 BITS는 사용자의 인터넷 Explorer 프록시 설정을 사용합니다. 사용자의 인터넷 Explorer 프록시 설정을 재정의하려면 IBackgroundCopyJob::SetProxySettings 메서드를 호출합니다.

인터넷 Explorer 프록시 설정은 시스템 계정에 적용되지 않으므로 추가 구성 단계를 수행하지 않는 한 기본 프록시 동작(BG_JOB_PROXY_USAGE_PRECONFIG)은 WPAD(웹 프록시 자동 검색 프로토콜) 배포에서만 올바르게 작동합니다. 애플리케이션이 LocalSystem, LocalService 또는 NetworkService로 실행되는 서비스인 경우 BITS 작업에서 도우미 토큰을 구성하거나 BG_JOB_PROXY_USAGE_OVERRIDEIBackgroundCopyJob::SetProxySettings를 호출하여 올바른 프록시 설정을 명시적으로 설정하는 것이 좋습니다. 또는 BitsAdmin.exe /Util /SetIEProxy 스위치를 사용하여 LocalSystem, LocalService 또는 NetworkService 시스템 계정에 대한 인터넷 Explorer 프록시 설정을 지정할 수 있습니다. 자세한 내용은 BitsAdmin 도구를 참조하세요.

BITS는 Proxycfg.exe 파일을 사용하여 설정된 프록시 설정을 인식하지 못합니다.

Windows 10 2018년 10월 업데이트(10.0; 빌드 17763), BITS는 WinHttp가 AUTOMATIC_PROXY 사용하는 것과 동일한 프록시 순서를 사용합니다. BITS는 BG_JOB_PROXY_USAGE_PRECONFIG 지정될 때 보다 호환되는 순서를 사용합니다. BG_JOB_PROXY_USAGE_PRECONFIG HTTP 프록시를 지정하기 위한 기본값입니다.

프록시 인증을 위한 사용자별 설정 지정

컴퓨터의 네트워크 도메인에서 사용 가능한 NTLM 또는 Kerberos 자격 증명 없이 계정으로 실행하는 동안 프록시 인증이 필요한 환경에서 BITS를 사용하는 경우 도메인에 자격 증명이 있는 다른 사용자 계정의 자격 증명을 사용하여 제대로 인증하는 추가 단계를 수행해야 합니다. BITS 코드가 LocalService, NetworkService 또는 LocalSystem과 같은 시스템 서비스로 실행되는 일반적인 시나리오입니다. 이러한 계정에는 사용 가능한 NTLM 또는 Kerberos 자격 증명이 없기 때문에 이 시나리오가 있습니다.

이 시나리오에서 인증이 작동하는 방식에 대한 자세한 내용은 인증을 참조 하세요.

확장성

100개 이상의 작업이 큐에 있는 경우 작업 구성에 따라 성능이 저하되기 시작할 수 있습니다. BITS는 MaxJobsPerMachine 정책 설정을 사용하여 큐의 작업 수에 하드 제한을 적용합니다. 애플리케이션은 작업 수를 약 10개로 제한해야 하므로 여러 애플리케이션이 100개 작업 지침을 초과할 가능성이 적습니다. 일반적으로 제출할 작업이 많은 애플리케이션은 먼저 10개의 작업을 제출한 다음, 각 작업이 완료될 때 한 번에 하나씩 제출합니다.

작업의 파일 수도 최대 10개로 제한해야 합니다. 작업에 대해 많은 수의 파일을 전송하려면 대신 모든 파일이 포함된 CAB 파일을 만드는 것이 좋습니다.

HTTP 헤더는 어떤 경우에도 가능합니다.

HTTP 표준은 항상 HTTP 헤더를 대/소문자를 구분하지 않는 것으로 처리해야 한다고 말했습니다(RFC 7230 섹션 3.2). 최신 HTTP 표준인 RFC 7540은 더 나아가 HTTP/2 트래픽이 헤더를 대/소문자를 구분하지 않는 것으로 비교해야 하며 헤더를 소문자로 표시해야 한다고 말합니다(RFC 6540, 섹션 8.1.2). 트래픽이 소문자 이외의 헤더와 함께 전송되는 경우에도 프록시는 헤더를 소문자로 강제 적용하도록 선택할 수 있습니다.

PII(개인 식별 정보) 방지

작업 표시 이름 및 설명 및 파일 이름을 포함한 BITS 작업은 관리자 권한이 있는 모든 사용자에게 표시됩니다. Windows 원격 분석에 추가할 수도 있습니다. 작업 세부 정보에 중요한 데이터(예: 사용자 이름)를 배치하지 않아야 합니다.