Computer >> 컴퓨터 >  >> 시스템 >> Mac

마이크로소프트 윈도우 BITS 완벽 가이드: 백그라운드 지능형 전송 서비스의 모든 것

마이크로소프트 윈도우 BITS(Background Intelligent Transfer Service, 백그라운드 지능형 전송 서비스)는 윈도우 운영체제(OS)에 기본 탑재된 서비스로, HTTP 웹 서버와 SMB 파일 서버 간에 파일을 다운로드하거나 업로드할 수 있도록 지원합니다.

BITS는 유휴 상태의 네트워크 대역폭을 활용해 파일을 백그라운드 또는 포어그라운드에서 전송하기 때문에 사용자가 느끼는 성능 저하를 최소화할 수 있습니다. 반대로 이 서비스를 비활성화하면 BITS에 의존하는 모든 애플리케이션이 프로그램과 중요한 정보를 자동으로 다운로드하지 못하게 됩니다.

BITS의 작동 원리

BITS는 사용되지 않거나 유휴 상태인 네트워크 대역폭을 활용하여 HTTP 웹 서버 및 SMB 파일 서버와 파일을 주고받습니다. 클라이언트와 서버 간의 파일 전송은 비동기 방식으로 처리되며, 포어그라운드 또는 백그라운드에서 실행될 수 있습니다. 즉, 애플리케이션이 BITS에 파일 전송을 요청한 후에도 다른 작업을 자유롭게 수행할 수 있습니다.

또한 BITS는 전송 작업을 생성하고 관리할 수 있는 PowerShell cmdlet과, 다운로드·업로드 작업을 만들고 진행 상황을 모니터링할 수 있는 BITSAdmin 명령줄 유틸리티를 함께 제공합니다. 아울러 애플리케이션의 파일 전송 요청에 우선순위를 부여하는 큐 관리 기능도 갖추고 있습니다.

네트워크에 장애나 끊김이 발생하면 BITS가 자동으로 재연결하여 네트워크나 시스템이 복구되는 즉시 파일 전송을 재개합니다. 재부팅 후에도 전송을 자동으로 일시 중지했다가 이어서 진행할 수 있으며, 시스템이 전원에 연결되어 있고 최신 대기(Modern Standby) 모드일 때도 파일을 전송해 전력 사용량까지 세심하게 고려합니다.

BITS 작업(Job)의 생명주기

BITS 작업(job)은 HTTP 웹 서버 및 SMB 파일 서버와 주고받을 하나 이상의 파일을 담는 컨테이너입니다. 각 작업은 BITS가 파일을 어떻게 전송하고 애플리케이션과 상호작용할지를 결정하는 속성들을 가집니다.

작업의 생명주기는 생성 단계에서 시작됩니다. 이 단계에서 사용자는 작업의 우선순위, 업로드 여부 또는 다운로드 여부, 그리고 알림을 받을 이벤트를 지정합니다. 작업이 생성되면 파일을 추가할 수 있으며, 업로드 작업에는 최대 한 개의 파일만 추가할 수 있습니다. 애플리케이션에 따라 작업 속성을 변경하는 것도 가능합니다. 파일을 추가할 때는 해당 파일의 로컬(클라이언트) 이름과 원격(서버) 이름을 반드시 지정해야 합니다.

작업이 생성되면 BITS는 자동으로 이를 일시 중단(suspended) 상태로 둡니다. 사용자가 작업을 재개해야 전송 큐에서 활성화되며, 이때 일시 중단 상태에서 대기(queued) 상태로 전환됩니다. 작업은 BITS 스케줄러가 전송 순서를 판단할 때까지 대기 상태를 유지하고, 순서가 되면 연결(connecting) 상태로 이동해 원격 서버에 접속한 뒤 전송(transferring) 상태에 들어갑니다. 이 상태는 다음 네 가지 조건 중 하나가 발생할 때까지 유지됩니다.

  1. 할당된 시간 슬라이스(time slice)가 종료될 때
  2. 전송이 완료될 때
  3. 오류가 발생할 때
  4. 애플리케이션이 작업을 일시 중단할 때

BITS가 작업의 모든 파일을 전송하면 작업은 전송 완료(transferred) 상태로 이동합니다. 전송된 파일은 애플리케이션이 IBackgroundCopyJob::Complete 메서드를 호출하여 파일 소유권이 BITS에서 사용자에게 이전된 후에야 클라이언트에서 실제로 사용할 수 있습니다.

BITS가 사용자 경험을 보호하는 방식

BITS는 가용한 유휴 네트워크 대역폭에 따라 파일 전송 속도를 유연하게 조절합니다. 어떤 애플리케이션이 더 많은 대역폭을 사용하기 시작하면 BITS는 자동으로 파일 전송 속도를 낮춰 사용자의 전반적인 경험을 유지하고 백그라운드 전송이 최적 상태를 유지하도록 합니다.

파일 전송을 시작한 사용자가 네트워크에 로그온한 상태를 유지하고 네트워크 연결이 유지되는 한, 애플리케이션 자체가 종료되더라도 BITS는 계속해서 파일을 전송합니다. 다만 네트워크 연결이 끊기거나 사용자가 로그오프하면 연결을 강제로 유지하지 않고, 먼저 전송 작업을 일시 중단한 뒤 연결이 복구되거나 사용자가 다시 로그인하면 전송을 재개합니다.

BITS는 항상 파일 전송 비용과 네트워크 사용량, 네트워크 혼잡도를 고려합니다. 또한 애플리케이션이 지정한 전송 정책을 활용해 과금되는 네트워크 연결에서는 파일 전송이 이루어지지 않도록 차단합니다. 이러한 고려 사항은 비용이 빠르게 증가할 수 있는 로밍 네트워크 환경에서 특히 중요합니다. 궁극적으로 BITS는 사용자의 포어그라운드 작업에 미치는 영향과 간섭을 최소화하여 쾌적한 시스템 사용 경험을 지켜줍니다.

BITS의 주요 활용 분야

BITS는 HTTP 웹 서버나 SMB 파일 공유에서 파일을 다운로드하거나 업로드해야 하는 시스템 관리자에게 특히 유용합니다. 또한 C, C++, .NET 프로그래머가 활용할 수 있는 COM(Component Object Model) 인터페이스를 제공합니다. 다만 마이크로소프트는 UWP(Universal Windows Platform) 프로그래머에게 BITS API 사용을 권장하지 않으며, 대신 Windows.Networking.BackgroundTransfer API를 사용하도록 안내합니다.

윈도우는 BITS를 활용해 업데이트를 사용자의 로컬 시스템에 다운로드합니다. 이 외에도 많은 애플리케이션이 BITS를 사용하는데, 대표적으로 HTTP 또는 REST 웹 서버, SMB 파일 서버에서 파일을 주고받아야 하는 애플리케이션, 네트워크 연결 끊김이나 시스템 재시작 후 파일 전송을 자동으로 재개해야 하는 애플리케이션 등이 있습니다. 나아가 일부 윈도우 및 윈도우 서버 에디션에 포함된 WAN 최적화 기술인 BranchCache와 함께 사용하면 광역 네트워크(WAN) 트래픽을 효율적으로 최적화할 수 있습니다.

BITS의 전송 작업 유형과 작업 상태

BITS는 세 가지 유형의 전송 작업을 지원합니다.

  1. 다운로드 작업: 클라이언트로 파일을 다운로드합니다. 모든 파일은 포어그라운드 또는 백그라운드에서 비동기 방식으로 전송됩니다.
  2. 업로드 작업: 클라이언트에서 서버로 파일을 업로드합니다.
  3. 업로드-응답(upload-reply) 작업: 먼저 서버로 파일을 업로드한 후, 업로드가 완료되었음을 알리는 응답 파일을 서버 애플리케이션으로부터 받습니다.

BITS 작업은 네 가지 상태 중 하나에 놓일 수 있습니다.

  1. 시작(Starting): 기본값은 SUSPENDED(일시 중단) 상태입니다. 이 상태에서 사용자는 작업에 파일을 추가하고 작업 및 파일 속성을 설정할 수 있습니다.
  2. 동작(Action): QUEUED(대기), CONNECTING(연결 중), TRANSFERRING(전송 중)처럼 작업의 현재 내부 활동을 나타내는 여러 동작 상태가 존재합니다. 이 외에 파일 전송에 실패했음을 의미하는 TRANSIENT ERROR(일시 오류) 상태도 있습니다.
  3. 전송 완료(Transferred): 전송이 성공적으로 끝나 더 이상 전송할 것이 없을 때의 상태입니다.
  4. 최종(Final): 작업이 ACKNOWLEDGED(승인)되고 완료된 다운로드 파일을 모두 사용할 수 있는 상태입니다.

BITS 작업은 실행되는 동안 서로 다른 상태 클래스 사이를 전환합니다. 하지만 한 번 최종(final) 상태에 도달하면 그 상태에서 벗어날 수 없으므로, 상태를 변경하는 메서드를 호출하는 것은 불가능하며 작업 열거 목록에도 더 이상 나타나지 않습니다. 오류가 발생하면 작업은 치명적 오류(fatal error) 상태(BITS가 복구 불가) 또는 일시적 오류(transient error) 상태(오류가 스스로 해소될 수 있으며, BITS는 전송이 성공하거나 애플리케이션이 지정한 기간 내에 작업이 시간 초과될 때까지 재시도)로 이동합니다. 일시적 오류 상태에서 시간이 초과되면 BITS는 해당 작업을 치명적 오류 상태로 전환합니다.

BITS의 우선순위 수준

BITS는 어떤 전송 작업을 언제 실행할지 지능적으로 선택할 수 있습니다. 그 이유는 애플리케이션이 서로 다른 우선순위 수준, 즉 포어그라운드용 1개와 백그라운드용 3개를 지정할 수 있기 때문입니다. 우선순위 수준은 전송 큐에서 해당 작업이 다른 작업들과 비교해 언제 처리될지를 결정합니다.

  • 높은 우선순위의 작업이 낮은 우선순위의 작업보다 먼저 처리됩니다.
  • 낮은 우선순위의 작업은 모든 높은 우선순위 작업이 전송을 마치거나 오류 상태에 빠질 때까지 전송 시간을 배정받지 못합니다.
  • 동일한 우선순위 수준의 작업들은 전송 시간을 공유하므로, 하나의 대용량 작업이 전송 큐를 독점해 지연을 일으키는 상황을 방지할 수 있습니다.

동일한 우선순위 수준의 작업을 스케줄링할 때 BITS는 라운드 로빈(round-robin) 방식을 사용합니다. 각 작업에 파일을 처리할 시간 슬라이스가 할당되며, 할당된 시간 안에 작업을 완료하지 못하면 자동으로 대기 상태로 돌아가고 큐의 다음 작업이 선입선출(FIFO) 방식으로 활성화됩니다. 다만 BITS는 FIFO 처리를 보장하지는 않으며 최선을 다할 뿐이라는 점에 유의해야 합니다.

BITS 1.5 이하 버전에서는 포어그라운드 작업이 백그라운드 작업보다 우선했고, 실제로 포어그라운드 작업이 최상위 우선순위를 가지며 BITS는 한 번에 하나의 작업만 처리했습니다. 이후 버전에서는 여러 포어그라운드 전송이 동시에 가능해졌지만, 동일한 작업 내의 여러 파일은 항상 순차적으로 전송됩니다.

백그라운드 지능형 전송 서비스의 발전 역사

마이크로소프트는 BITS를 여러 차례에 걸쳐 업데이트해 왔습니다.

  • BITS 1.0: 2001년 윈도우 XP와 함께 처음 도입되었습니다.
  • BITS 1.2: 2002년 중반 출시되어 윈도우 2000에 자동 업데이트(Automatic Updates) 서비스를 추가했습니다.
  • BITS 1.5: 2003년 말 윈도우 서버 2003과 함께 출시되었으며, 명령줄 지원, 확장된 업로드 기능, 보안 개선 사항이 포함되었습니다.
  • BITS 2.0: 2004년 중반 여러 OS 배포용 업데이트로 출시되었고, 추가적인 다운로드 기능, 대역폭 제한(throttling), SMB 지원이 도입되었습니다.
  • BITS 2.5: 2007년 중반 출시되어 IPv6 및 사용자 지정 HTTP 헤더 지원과 향상된 HTTP 보안을 제공했습니다.
  • BITS 3.0: 윈도우 비스타와 윈도우 서버 2008에 포함되었으며, 피어 캐싱, 알림, 임시 파일 접근, HTTP 리디렉션 처리, 추가 그룹 정책 제어, 이벤트 로깅 기능이 추가되었습니다.
  • BITS 4.0: 2009년 중반 윈도우 7 및 윈도우 서버 2008 R2와 함께 출시되어 토큰 기반 보안, 독립형 파일 서버 기능, 개선된 대역폭 제한, 개편된 피어 캐싱을 도입했습니다.
  • BITS 5.0: 2016년 중반 윈도우 10에 포함되었으며, 백그라운드 복사 작업 개선, 구형 백그라운드 복사 작업 지원, API 및 PowerShell cmdlet을 통한 BITS 사용 기능이 추가되었습니다.
  • BITS 10.1: 윈도우 10 버전 1703(크리에이터스 업데이트)의 일부로, 다운로드 및 알림 기능이 개선되었습니다.
  • BITS 10.2: 윈도우 10 2018년 10월 업데이트의 일부로, 기본 프록시 순서 지정과 최신 대기(Modern Standby), MDM(모바일 디바이스 관리) 정책 및 그룹 정책 지원이 추가되었습니다.
  • BITS 10.3: 윈도우 10 2019년 5월 업데이트의 일부로, HTTP 헤더를 쓰기 전용(write-only)으로 표시하는 기능과 서버 인증서 검증 콜백이 도입되었습니다.

참고: PowerShell FTP 스크립트로 파일을 업로드·다운로드하는 방법과 기업용 보안 파일 전송 서비스 8선에 대한 자료도 함께 확인해 보세요.