창 관리자

[thumb|그래픽 사용자 인터페이스의 계층:<br />X 윈도 시스템에서 '''창 관리자'''와 [표시 서버는 별개의 두 프로그램이다. 하지만 웨이랜드에서는 두 기능이 모두 웨이랜드 컴포지터에 의해 처리된다.]]
[thumb|전형적인 '''[창 (컴퓨팅)|창**의 요소들. [[창 장식]]은 창 관리자나 클라이언트에 의해 그려진다. 콘텐츠를 그리는 것은 클라이언트의 작업이다.]]
[[파일:Windowmanager ohne.png|thumb|X11에서 창 관리자가 실행 중이지 않을 때, 대부분의 창에서 창 장식이 사라진 모습.]]

**창 관리자'''(window manager)는 그래픽 사용자 인터페이스의 윈도 시스템 내에서 창의 배치와 외관을 제어하는 시스템 소프트웨어이다. 대부분의 창 관리자는 데스크톱 환경을 제공하도록 설계되어 있다. 이들은 그래픽 하드웨어, 포인팅 장치, 키보드 지원 등 필수적인 기능을 제공하는 하부 그래픽 시스템과 함께 작동하며, 종종 위젯 툴킷을 사용하여 작성되고 생성된다.

윈도 시스템과 창 관리자를 명확히 구분하여 설계된 창 관리자는 거의 없다. 데스크톱 메타포에 기반한 모든 그래픽 사용자 인터페이스는 어떤 형태의 창 관리 기능을 가지고 있다. 실제로 이 기능의 요소는 매우 다양하다. 일반적으로 창 관리자와 연관된 요소들을 통해 사용자는 창을 열고, 닫고, 최소화하고, 최대화하고, 이동하고, 크기를 조정하며, 창 장식을 포함하여 실행 중인 창을 추적할 수 있다. 많은 창 관리자에는 작업 표시줄, 프로그램 실행기, 화면을 2등분 또는 4등분하는 것을 돕는 도크(dock), 창을 그룹화하는 작업 공간, 데스크톱 아이콘, 배경화면, 특정 창을 최상단에 유지하는 기능, 창을 말아 올려 제목 표시줄만 보이게 하는 기능, 창을 계단식으로 배열하는 기능, 창을 격자 형태로 쌓는 기능, 공간 절약을 위해 작업 표시줄에서 동일한 프로그램의 창을 그룹화하는 기능, 선택적인 다중 행 작업 표시줄 등 다양한 유틸리티와 기능이 함께 제공된다.

## 역사

1973년, 제록스 알토는 작동하는 WIMP GUI를 탑재하여 출시된 최초의 컴퓨터가 되었다. 이는 창의 중첩을 허용하는 스태킹 창 관리자를 사용했다. 하지만 이는 시대를 너무 앞서 나갔기 때문에 그 디자인 패러다임은 10년이 더 지난 후에야 널리 채택되었다. 마이크로소프트 윈도우가 애플의 클래식 맥 OS에서 복사한 디자인을 포함하고 있는지는 불분명하지만, 두 회사 모두 중첩 창을 사용한 GUI를 처음 만든 것은 아니다. 1980년대 초, 알토의 후속작인 제록스 스타는 대부분의 주요 애플리케이션 창에 타일형 배치를 사용했고, 대화 상자에만 중첩 방식을 사용하여 창을 쌓을 필요성을 대부분 없앴다.

클래식 맥 OS는 QuickDraw를 통해 일종의 스태킹 창 관리 기능을 사용한 초기의 상업적으로 성공한 GUI 사례 중 하나였다. 그 후속인 MacOS는 좀 더 발전된 창 관리자를 사용하는데, 맥 OS X 10.0부터 컴포지팅(합성)을 지원했으며, 맥 OS X 10.2에서는 쿼츠 컴포지터를 통해 하드웨어 가속 컴포지팅을 지원하도록 업데이트되었다.

디지털 리서치의 GEM 1.1은 모든 창의 중첩을 허용하는 스태킹 창 관리자를 포함한 운영 환경이었다. 이는 1980년대 초에 출시되었다. GEM은 Atari TOS에서 실행되는 아타리 ST의 주요 GUI로 포함된 것으로 유명하며, 마이크로소프트 윈도우가 널리 사용되기 전 MS-DOS용 인기 GUI이기도 했다. 애플의 소송 결과로 디지털 리서치는 GEM 2.0에서 스태킹 기능을 제거해야 했으며, 이로 인해 창 관리자가 타일형 창 관리자로 바뀌었다.

1980년대 중반, Amiga OS는 Intuition이라 불리는 초기 형태의 컴포지팅 창 관리자를 포함하고 있었다. 이는 어떤 창이나 창의 일부가 가려졌는지, 어떤 창이 전면에 있고 완전히 보이는지 인식할 수 있어 화면의 갱신이 필요한 부분만 그릴 수 있었다. 또한 Intuition은 컴포지팅을 지원했다. 애플리케이션은 먼저 비트맵으로 사용할 현재 디스플레이 영역 밖의 메모리 영역을 요청할 수 있었다. 그러면 아미가 윈도 시스템은 시스템의 하드웨어 블리터를 이용한 일련의 비트 블릿을 사용하여, 애플리케이션이 비트맵을 다시 그릴 필요 없이 디스플레이 메모리에 버튼, 슬라이더와 함께 이러한 애플리케이션 비트맵의 합성물을 구축했다.

1988년, Presentation Manager는 OS/2의 기본 셸이 되었는데, 첫 번째 버전에서는 명령줄 인터페이스(CLI)만 사용했다. IBM과 마이크로소프트는 DOS와 윈도우용 DOS의 후속으로 OS/2를 설계했다. 그러나 윈도우 3.10의 성공 이후 마이크로소프트는 윈도우를 위해 프로젝트를 포기했다. 그 후 미래의 OS/2 버전 3을 위한 마이크로소프트의 프로젝트는 윈도우 NT가 되었고, IBM은 OS/2 셸을 완전히 재설계하여 OS/2 1.x의 Presentation Manager를 OS/2 2.0에서 데뷔한 객체 지향 사용자 인터페이스 기반의 Workplace Shell로 교체했다.

## 예시

### X 윈도 매니저

X 윈도 시스템을 사용하는 시스템에서는 창 관리자와 윈도 시스템 사이에 명확한 구분이 존재한다. 엄격히 말해서 X 윈도 매니저는 비디오 하드웨어, 마우스, 키보드와 직접 상호작용하지 않으며, 이는 표시 서버의 책임이다.

데스크톱 환경은 일반적으로 기본 창 관리자를 통합한다. 예를 들어 그놈 2는 메타시티를 사용하고, KDE 플라스마 작업 공간은 KWin을 사용한다. 하지만 X 윈도 시스템의 모듈식 설계 덕분에 사용자는 다른 창 관리자로 교체할 수 있다. 예를 들어 3D 효과를 원한다면 컴피즈(3D 컴포지팅 매니저)를 사용할 수 있고, 정밀한 창 제어를 원한다면 Sawfish나 awesome을 대신 사용할 수 있다. 서로 다른 창 관리자의 일부 구성 요소를 혼합해서 사용할 수도 있다. 예를 들어 KWin의 창 장식을 그놈의 데스크톱 및 도크 구성 요소와 함께 사용할 수 있다.

X 윈도 매니저는 또한 애플리케이션의 부모를 다시 지정하는 기능이 있다. 즉, 처음에는 모든 애플리케이션이 루트 창(본질적으로 전체 화면)에 입양되지만, 루트 창 내에서 시작된 애플리케이션이 다른 창에 입양(즉, 그 안에 배치)될 수 있다. X 윈도 시스템 하의 창 관리자는 루트 창으로부터 애플리케이션을 입양하고 창 장식(예: 제목 표시줄 추가)을 적용하기 위해 부모를 다시 지정한다. 부모 재지정은 한 창의 내용을 다른 창에 추가하는 데에도 사용될 수 있다. 예를 들어, 플래시 플레이어 애플리케이션을 브라우저 창의 자식으로 재지정하여 사용자에게는 해당 프로그램의 일부인 것처럼 보이게 할 수 있다. 따라서 부모 재지정 창 관리자는 동일한 창 내에 하나 이상의 프로그램을 배열할 수 있으며, 타일형과 스태킹 방식을 다양하게 쉽게 조합할 수 있다.

### 마이크로소프트 윈도우

마이크로소프트 윈도우는 윈도우 2.0부터 통합된 스태킹 창 관리자를 제공해 왔다. 윈도우 비스타에서는 선택적인 하드웨어 가속 대안으로 컴포지팅 방식의 데스크톱 창 관리자(dwm.exe)를 도입했다. 윈도우에서는 GDI가 커널의 일부이므로, 창 관리자의 역할은 커널의 그래픽 서브시스템과 밀접하게 결합되어 있으며 대체로 교체가 불가능하다. 다만 이러한 시스템 위에서 타일형 창 관리자를 흉내 내기 위해 서드파티 유틸리티를 사용할 수는 있다. 윈도우의 창 관리는 WindowBlinds, 리소스 해커, SmartWindows와 같은 서드파티 도구로도 강화될 수 있다. 윈도우 8 이후로는 Direct3D 기반의 데스크톱 창 관리자를 더 이상 비활성화할 수 없다. 단축키 조합인 Ctrl+Shift+Win+B를 통해서만 재시작할 수 있다.

윈도우 탐색기(explorer.exe)는 현대 윈도우 시스템에서 셸로 기본 사용되며, 창 관리자의 많은 기능과 함께 작업 표시줄 및 파일 관리자를 제공한다. 윈도우의 외형은 제공된 설정 유틸리티를 통하거나, 윈도우 레지스트리를 수정하거나, WindowBlinds 또는 리소스 해커와 같은 서드파티 도구를 통해 수정할 수 있다.

Cygwin/X를 통해 마이크로소프트 윈도우에서도 유닉스 계열에서 포팅된 창 관리자를 사용할 수 있는 완전한 X 윈도 서버가 다중 창 모드로 제공될 수 있다. 이를 통해 동일한 머신의 Cygwin 환경이나 네트워크를 통한 리눅스, BSD 유닉스 시스템 등에서 실행되는 X 윈도 시스템 클라이언트 프로그램을 마이크로소프트 윈도우 환경 위에서 해당 GUI만 표시하고 사용하는 것이 쉽게 가능하다.

마이크로소프트와 X 윈도 시스템은 유사한 개념을 설명하는 데 서로 다른 용어를 사용한다. 예를 들어 마이크로소프트에서는 창 관리자가 통합되어 있고 교체 불가능하며 셸과 구별되기 때문에 창 관리자라는 용어를 언급하는 경우가 거의 없다. 윈도우 셸은 다른 그래픽 사용자 인터페이스 시스템의 데스크톱 환경 개념과 유사하다.

### 크롬OS
2021년부터 크롬OS는 Ash라는 자체 창 관리자를 탑재하여 출시된다. 크로미움과 ash는 공통 코드베이스를 공유한다. 과거에는 호환되는 모든 시스템에서 를 사용하여 실행할 수 있었다.

## 유형
창 관리자는 종종 창이 그려지고 업데이트되는 방식에 따라 세 가지 이상의 클래스로 나뉜다.

### 컴포지팅 창 관리자

컴포지팅 창 관리자는 모든 창을 별도로 생성하고 그린 다음, 이를 다양한 2D 및 3D 환경으로 합쳐서 표시한다. 가장 진보된 컴포지팅 창 관리자는 인터페이스의 외관과 느낌에서 매우 다양한 변화를 줄 수 있으며, 고급 2D 및 3D 시각 효과를 제공한다.

### 스태킹 창 관리자

창이 겹칠 수 있으면서 컴포지팅 창 관리자가 아닌 모든 창 관리자는 스태킹 창 관리자이다. 다만 모든 스태킹 창 관리자가 동일한 방식을 사용하는 것은 아니다. 스태킹 창 관리자는 배경에 있는 창을 먼저 그리는 화가 알고리즘 방식을 통해 창이 겹치는 것을 허용한다. 변경 사항이 발생하면 때때로 모든 창을 다시 쌓거나 다시 그려야 하며, 이는 보통 모든 창을 다시 그리는 과정을 포함한다. 그러나 배경 창을 앞으로 가져올 때는 보통 해당 창 하나만 다시 그리면 된다. 배경 창은 다른 창의 일부가 그 위에 그려져 가려진 영역이 실질적으로 지워진 상태일 수 있기 때문이다.

### 타일형 창 관리자

타일형 창 관리자는 화면의 모든 창을 서로 옆에 배치하거나 위아래로 배치하여 어떤 창도 다른 창을 가리지 않도록 그린다. 마이크로소프트 윈도우 1.0이 타일형 방식을 사용했으며, X용으로는 i3, awesome, Dwm 등 다양한 타일형 창 관리자를 사용할 수 있다.

### 동적 창 관리자

동적 창 관리자는 타일형 레이아웃과 플로팅(floating) 창 레이아웃 사이를 동적으로 전환할 수 있다. X 윈도 시스템용으로 다양한 동적 창 관리자가 제공된다.

## 창 관리자의 기능 및 시설

;자동 숨기기(Autohide)
: 자동 숨기기 기능은 포인터가 화면 가장자리에서 멀어지면 메뉴 바가 사라지게 한다.

;테두리(Borders)
: 테두리는 일부 창 관리자가 제공하는 창 장식 구성 요소로, 활성 창 주변에 나타난다. 일부 창 관리자는 배경 창 주변에도 테두리를 표시할 수 있다.

;콘텍스트 메뉴
: 일부 창 관리자는 데스크톱 구성 요소에 대체 클릭(우클릭 등) 이벤트가 발생할 때 나타나는 콘텍스트 메뉴를 제공한다.

thumb|right|400px|alt=콘텍스트 메뉴의 예시|콘텍스트 메뉴의 예시

;데스크톱 배경화면
: 일부 창 관리자는 루트 창에 배경 그림을 표시하는 데스크톱 배경화면 기능을 제공한다.

;포커스 스틸링(Focus stealing)
: 포커스 스틸링은 일부 창 관리자가 제공하는 기능이다. 포커스가 없는 애플리케이션이 갑자기 포커스를 얻어, 이전의 활성 애플리케이션으로 전달될 예정이었던 사용자 입력을 가로채는 것을 허용한다.

;아이콘화(Iconification)
: 아이콘화 기능은 사용자가 실행 중인 애플리케이션을 데스크톱 아이콘이나 작업 패널 아이콘으로 최소화할 수 있게 한다.

;창 결합(Joined windows)
: 일부 창 관리자는 사용자가 애플리케이션 창 프레임을 서로 결합할 수 있는 기능을 제공한다.

;키보드 단축키(Keyboard equivalents)
: 일부 창 관리자는 키보드가 마우스 기능을 대신할 수 있도록 하는 키보드 단축키를 제공한다.

;메뉴 바
: 메뉴 바는 메뉴를 통해 프로그램을 실행하는 기능을 제공하며, 시작 버튼, 작업 표시줄, 시스템 트레이를 포함한 추가 시설을 담고 있을 수 있다.

;메뉴 패널
: 메뉴 패널은 일부 창 관리자의 구성 요소로, 메뉴를 사용하여 프로그램을 실행하는 기능을 제공한다. 메뉴 패널은 메뉴 바와 유사하지만 가로 또는 세로 막대가 아닌 떠 있는 패널 형태로 나타난다.
: 메뉴 패널에는 시작 버튼, 작업 패널, 시스템 트레이 등 추가 시설이 포함될 수 있다.

;마우스 포커스
: 마우스 포커스 모델은 포인팅 장치가 창 관리자 내의 입력 포커스에 어떻게 영향을 미치는지 결정한다. 이 모델은 포인터가 화면을 가로질러 이동함에 따라 그래픽 사용자 인터페이스의 어떤 구성 요소가 입력을 받도록 선택될지 결정한다.

;마우스 워핑(Mouse warping)
: 마우스 워핑은 애플리케이션이 활성화될 때 포인터를 해당 애플리케이션의 중앙으로 이동시키는 기능이다.

;다중 데스크톱
: 창 관리자는 다중 데스크톱 기능을 제공할 수 있다. 이를 통해 여러 개의 루트 창 데스크톱 사이를 전환할 수 있다. 애플리케이션이 서로 다른 데스크톱에서 실행될 수 있으므로 루트 창이 복잡해지는 것을 방지한다.

;페이지(Pager)
: 일부 창 관리자는 다중 데스크톱 사이를 전환하는 기능을 제공하는 페이지 도구를 제공한다. 페이지는 화면상의 창이나 작업 표시줄, 작업 패널의 가젯으로 나타날 수 있다.

;플러그인
: 일부 창 관리자는 필요에 따라 기능을 제공하는 플러그인 모듈을 가능하게 하는 모듈식 구조를 가지고 있다.

;롤업(Rollup)
: 롤업 기능은 창이 바탕 화면에서 제목 표시줄만 보이도록 말아 올릴 수 있게 한다.

;루트 메뉴(Root Menu)
: 일부 창 관리자는 루트 창이나 데스크톱 배경을 터치(클릭)할 때 나타나는 루트 메뉴를 제공한다.

;바로가기(Shortcuts)
: 일부 창 관리자는 사용자가 특정 프로그램이나 시설에 접근할 수 있도록 바로가기 아이콘을 루트 창에 배치할 수 있는 기능을 제공한다.

;탭 창(Tabbed windows)
: 일부 창 관리자는 애플리케이션을 공통 프레임 안에 그룹화하는 탭 창 기능을 제공한다.

;작업 전환
: 창 관리자는 사용자가 현재 포커스된 애플리케이션을 변경할 수 있도록 다음과 같은 다양한 작업 전환 기능을 제공할 수 있다.

:* 포인팅 장치를 사용하여 마우스 포커스 변경
:* 키보드 작업 전환 기능 (예: Alt-Tab 누르기)
:* 작업 표시줄이나 작업 패널의 작업을 클릭

;작업 표시줄
: 일부 창 관리자는 실행 중인 애플리케이션을 보여주는 작업 표시줄을 제공한다. 작업 표시줄은 최소화된 프로그램을 포함하여 실행 중인 모든 애플리케이션을 표시할 수 있으며, 이들 사이의 포커스를 전환하는 기능을 제공할 수 있다. 일부 창 관리자에서 작업 표시줄은 메뉴 바에 통합되어 있을 수 있다.

;작업 패널
: 작업 패널은 작업 표시줄과 유사하지만 가로 또는 세로 막대가 아닌 떠 있는 패널 형태로 나타난다.

;시작 버튼
: 시작 버튼은 실행할 수 있는 프로그램 메뉴를 제공하는 데스크톱 위젯이다. 시작 버튼은 일반적으로 화면 하단의 메뉴 바에 배치된다.

;알림 영역(Notification area)
: 알림 영역은 데스크톱 창이 없는 시스템 및 프로그램 기능의 아이콘을 표시하는 데 사용된다. 주로 상태 정보와 새 메일 도착과 같은 알림을 나타내는 아이콘들을 포함한다. 일부 시스템에서는 알림 영역에 시계를 표시하기도 한다.

;제목 표시줄
: 제목 표시줄은 일부 창 관리자가 각 창의 상단에 제공하는 창 장식 구성 요소이다. 제목 표시줄은 일반적으로 애플리케이션의 이름이나 열린 문서의 이름을 표시하는 데 사용되며, 창의 최소화, 최대화, 닫기 또는 롤업을 위한 제목 표시줄 버튼을 제공할 수 있다.

;제목 표시줄 버튼
: 제목 표시줄 버튼은 일부 창 관리자의 제목 표시줄에 포함되어 있으며, 애플리케이션 창을 최소화, 최대화, 롤업 또는 닫는 기능을 제공한다. 일부 창 관리자는 제목 표시줄 대신 작업 표시줄이나 작업 패널에 이 버튼들을 표시할 수도 있다.

;가상 데스크톱
: 가상 데스크톱(스크롤 데스크톱이라고도 함)은 일부 창 관리자가 제공하는 기능으로, 데스크톱을 실제 화면보다 더 크게 설정할 수 있게 한다.

### 창 탐색
활성 창(Active window)은 현재 창 관리자에서 현재 포커스가 맞춰진 창이다. 창 관리자마다 현재 활성 창을 표시하는 방식이 다르며, 사용자가 창 사이를 전환하는 방식도 다양하게 허용한다. 예를 들어, 마이크로소프트 윈도우에서 그림판과 메모장이 모두 열려 있을 때, 메모장 창을 클릭하면 해당 창이 활성화된다. 윈도우에서 활성 창은 다른 색상의 제목 표시줄을 가짐으로써 표시된다. 하지만 클릭만이 활성 창을 선택하는 유일한 방법은 아니다. 일부 창 관리자(예: FVWM)는 마우스 포인터 아래에 있는 창을 활성화한다. 단순히 마우스를 움직이는 것만으로 창 전환이 충분하며, 클릭이 필요하지 않다.

창 관리자는 종종 마우스의 대안으로 키보드를 사용하여 활성 창을 선택하는 방법을 제공한다. 전형적인 키 조합 중 하나는 윈도우와 KDE(기본값이지만 사용자 설정 가능)에서 사용되는 Alt+Tab이다. 또 다른 하나는 매킨토시에서 사용되는 Command-Tilde(~)이다. 적절한 키 조합을 누르면 일반적으로 표시되는 모든 창을 특정 순서대로 순환하지만, 다른 동작도 가능하다.

전부는 아니지만 많은 창 관리자가 화면의 각 창에 대해 일종의 시각적 컨트롤(종종 버튼 형태)을 포함하는 화면 영역을 제공한다. 각 버튼에는 일반적으로 창의 제목이 포함되며 아이콘도 포함될 수 있다. 이 영역은 일반적으로 어떤 창이 활성 상태인지에 대한 시각적 표시를 제공한다. 예를 들어, 활성 창의 버튼은 "눌린" 것처럼 보일 수 있다. 또한 해당 버튼을 클릭하여 활성 창을 전환하는 것도 가능하다. 마이크로소프트 윈도우에서 이 영역은 작업 표시줄이라 불리며, 애플 매킨토시 시스템에서는 도크(dock)라고 불린다.

활성 창이 항상 화면의 다른 모든 창 앞에 놓여 있는 것은 아니다. 활성 창은 단순히 키보드에서 입력한 키가 전달되는 창일 뿐이며, 다른 창에 의해 시각적으로 가려질 수 있다. 이는 활성 창을 바꾸기 위해 클릭이 필요하지 않은 창 관리자에서 특히 그렇다. 예를 들어 FVWM은 마우스 커서 아래의 창을 활성 상태로 만들지만, 해당 창의 Z-order(배경에서 전경까지의 창 표시 순서)를 변경하지는 않는다. 대신 창을 전경으로 가져오려면 창의 테두리를 클릭해야 한다. 마이크로소프트 윈도우와 같이 클릭하여 포커스를 맞추는 창 관리자에서도 활성 창이 가려지는 상황이 발생할 수 있지만, 이는 훨씬 덜 일반적이다.

## 같이 보기
* 운영 환경
* X 윈도 매니저 비교

## 각주

분류:창 관리자
분류:그래픽 사용자 인터페이스