윈도에서 텍스트나 파일을 복사하거나 붙여 넣을 때에는 클립보드라는 영역에 데이터가 저장된다. 이 클립보드에 저장할 수 있는 데이터 최대 크기나 복사‧붙여넣기 구조에 대해 윈도 주요 개발자인 레이몬트 첸(Raymond Chen)이 해설해 눈길을 끈다.
그가 클립보드에 대한 설명을 올린 이유는 사용자 질문 때문이다. 한 사용자가 30만행이 넘는 거대한 엑셀 파일 셀을 복사‧붙여넣기하려고 했지만 실패해 버렸다는 것. 윈도에선 클립보드 내용을 가져올 때 함수(GetClipboardData)가 사용되지만 사용자가 분석한 결과 30만행 이상 엑셀 파일 셀을 복사하려고 하면 이 함수 실행이 실패하고 있다는 게 밝혀졌다. 이를 통해 사용자는 엑셀 데이터가 너무 커서 클립보드에 데이터를 저장하지 못했닥 생각해 첸에게 클립보드에 저장할 수 있는 최대 크기를 물었다.
첸은 이 질문에 대해 윈도에선 클립보드에 저장할 수 있는 데이터 최대 용량을 설정하지 않았으며 저장 가능한 데이터 용량은 사용 가능한 메모리 용량에 따라 달라진다고 답했다. 또 위 엑셀 데이터 복사와 붙여넣기 실패는 클립보드에 저장할 수 있는 데이터 용량이 아니라 다른 원인이 관련되어 있다고 지적하고 있다.
윈도에서 실행되는 응용 프로그램이 클립보드에 데이터를 저장하는 방법에는 2가지가 있다. 하나는 클립보드에 직접 데이터를 저장하는 방법이고 다른 하나는 클립보드에 데이터를 저장하지 않고 클립보드가 호출될 때 애플리케이션에 데이터 출력을 요청한다는 명령을 제공하는 방법이다. 후자 방법은 지연 렌더링이라고 불리고 있어 엑셀에선 리치 텍스트를 복사할 때 지연 렌더링을 이용하고 있다고 한다.
윈도는 클립보드 내용을 취득하는 함수(GetClipboardData)가 실행됐을 때 데이터가 돌아올 때까지 최대 30초 대기하지만 대기시간 30초가 넘으면 이 함수로부터 실패를 의미하는 NULL이 돌아온다. 다시 말해 이 사용자의 경우 엑셀 데이터 크기가 너무 커서 지연 렌더링에 30초 이상 시간이 걸려 복사와 붙여넣기에 실패했다는 것이다. 첸은 30초라는 타임아웃 시간을 연장하는 방법에 대해서도 앞으로 해설할 예정이라고 한다. 관련 내용은 이곳에서 확인할 수 있다.