텍스트 사용자 인터페이스

[섬네일|300px|일부 [파일 관리자는 TUI를 구현한다. (사진: 미드나이트 커맨더)]]
[섬네일|300px|[Vim은 매우 널리 사용되는 TUI 문서 편집기이다.]]

컴퓨팅에서 **텍스트 사용자 인터페이스**(**TUI**, text-based user interface, 또는 텍스트뿐만 아니라 단말기의 특성에 의존함을 반영하여 **터미널 사용자 인터페이스**, terminal user interface)는 비트맵 디스플레이와 현대적인 관습적 그래픽 사용자 인터페이스(GUI)가 출현하기 전, 초기 형태의 인간-컴퓨터 상호 작용으로 흔했던 사용자 인터페이스(UI) 유형을 설명하는 레트로님이다. 현대의 GUI와 마찬가지로 TUI는 전체 화면 영역을 사용할 수 있으며 마우스 및 기타 입력을 허용할 수 있다. 또한 색상을 사용할 수 있으며 ┌ 및 ╣와 같은 상자 그리기 문자를 사용하여 디스플레이를 구조화하는 경우가 많다. 현대적인 사용 맥락은 대개 단말 에뮬레이터이다.

## 텍스트 터미널의 유형
컴퓨팅 초기에는 텍스트 터미널이 보통 키보드/프린터 장치였다. 그러나 현재는 키보드/디스플레이 장치가 주를 이룬다.

텍스트 화면(및 그와의 통신)은 세 가지 유형 중 하나에 속할 수 있다(접근성 감소 순으로 나열).

# 비디오 어댑터 또는 중앙 처리 장치 자체에 의해 제어되는 로컬 텍스트 모드 디스플레이. 이는 다양한 유형의 개인용 컴퓨터 및 모바일 장치에서 로컬로 실행되는 애플리케이션의 일반적인 상태이다. 운영체제에 의해 저지되지 않는다면, 스마트한 프로그램은 하드웨어 텍스트 모드의 모든 기능을 활용할 수 있다.
# 텍스트 모드 에뮬레이터. 예로는 TN3270, X 윈도 시스템을 위한 Xterm, 마이크로소프트 윈도우를 위한 윈도우 콘솔(창 모드)이 있다. 이는 보통 실제 텍스트 모드 디스플레이를 기대하는 프로그램을 지원하지만, 상당히 느리게 실행될 수 있다. 고유한 래스터 글꼴 업로드와 같은 고급 텍스트 모드의 특정 기능은 거의 확실히 사용할 수 없게 된다.
# 원격 단말기. 통신 기능은 보통 시리얼 라인 또는 그 에뮬레이션으로 축소되며, 텔넷 및 시큐어 셸과 같은 경우 대역 외 채널로서 몇 가지 ioctl()이 포함될 수 있다. 소프트웨어 제한으로 인해 원격 디스플레이 장치의 기능을 사용하기 어렵기 때문에 이는 최악의 경우이다.

텍스트 애플리케이션의 관점에서 디스플레이 유형은 Curses, TPUT와 같은 API에 의해 결정된다.

리눅스 및 기타 유닉스 계열 시스템에서 프로그램은 동일한 인터페이스(즉, 표준 스트림)가 디스플레이와 키보드를 제어하기 때문에 위의 세 가지 사례 중 어느 것에도 쉽게 적응한다. 윈도우와의 비교는 아래를 참조하라.

개발자가 TUI 애플리케이션을 구축하는 데 도움이 되는 많은 TUI 프로그래밍 라이브러리를 사용할 수 있다.

## ANSI 호환 터미널
미국 국가표준 협회(ANSI) 표준 ANSI X3.64는 TUI를 만들기 위해 터미널을 구동하는 데 사용할 수 있는 표준 이스케이프 시퀀스 세트를 정의한다(ANSI 이스케이프 코드 참조). 이스케이프 시퀀스는 위 섹션에서 언급한 세 가지 사례 모두에서 지원될 수 있으며, 임의의 커서 이동 및 색상 변경을 허용한다.
그러나 모든 터미널이 이 표준을 따르는 것은 아니며, 호환되지는 않지만 기능적으로 동등한 많은 시퀀스가 존재한다.

## MS-DOS 및 Windows
[섬네일|300px|[프리도스 Edit 사용자 인터페이스]]

IBM PC 호환기종에서 바이오스(BIOS) 및 MS-DOS 시스템 호출은 화면에 텍스트를 쓰는 방법을 제공하며, ANSI.SYS 드라이버는 표준 ANSI 이스케이프 시퀀스를 처리할 수 있었다. 그러나 프로그래머들은 곧 화면 버퍼에 데이터를 직접 쓰는 것이 훨씬 빠르고 프로그래밍하기 간단하며 오류가 적다는 것을 알게 되었다. 자세한 내용은 VGA 호환 텍스트 모드를 참조하라. 이러한 프로그래밍 방식의 변화는 많은 DOS TUI 프로그램을 낳았다. 윈도우 콘솔 환경은 애플리케이션이 창 모드에서 실행되더라도 텍스트 버퍼에 대한 임의 접근과 같은 특정 EGA/VGA 텍스트 모드 기능을 에뮬레이션하는 것으로 유명하다. 반면, 윈도우에서 실행되는 프로그램(네이티브 및 DOS 애플리케이션 모두)은 앞서 언급한 윈도우 콘솔 계층 때문에 리눅스나 DOS 프로그램보다 디스플레이와 키보드에 대한 제어권이 훨씬 적다.

이러한 프로그램들은 대개 메인 화면에 파란색 배경과 흰색 또는 노란색 문자를 사용했지만, 일반적으로 사용자 색상 사용자 지정 기능도 있었다. 이들은 종종 IBM의 코드 페이지 437에 있는 상자 그리기 문자를 사용했다. 나중에 인터페이스는 그래픽 사용자 인터페이스(GUI)의 영향을 깊게 받아 풀다운 메뉴, 겹치는 창, 대화 상자 및 단축키로 조작되는 GUI 위젯을 추가했다. 곧 마우스 입력이 추가되었는데, 단순한 색상 상자 형태의 텍스트 해상도이거나 강화 그래픽 어댑터(EGA) 및 비디오 그래픽스 어레이(VGA) 디스플레이 어댑터의 소프트웨어를 통한 텍스트 문자 모양 재정의 기능을 이용한 그래픽 해상도로 추가 기능을 제공했다.

이러한 종류의 주목할 만한 프로그램으로는 마이크로소프트 워드, 도스 셸, 워드퍼펙트, 노턴 커맨더, 볼랜드의 터보 파스칼 및 터보 C(후자는 conio.h 라이브러리 포함) 기반의 터보 비전, 로터스 1-2-3 등이 있다. 이러한 인터페이스 중 일부는 1990년대 초 마이크로소프트 윈도우 3.1x 시대에도 살아남았다. 예를 들어, 16비트 윈도우용 실제 GUI 프로그램을 작성하는 데 사용된 마이크로소프트 C 6.0 컴파일러는 여전히 자체 TUI를 가지고 있다.

시작부터 마이크로소프트 윈도우는 DOS 소프트웨어를 표시하기 위한 콘솔을 포함했다. 이후 버전에서는 명령줄 인터페이스 및 TUI 프로그램을 위한 네이티브 인터페이스로 윈도우 콘솔을 추가했다. 콘솔은 보통 창 모드로 열리지만, Alt와 Enter 키를 함께 눌러 전체 화면의 실제 텍스트 모드 화면으로 전환할 수 있다(반대의 경우도 가능). 전체 화면 모드는 윈도우 비스타 이후 버전에서는 사용할 수 없지만, 몇 가지 우회 방법을 통해 사용될 수 있다.

윈도우 터미널은 마이크로소프트가 윈도우 콘솔을 대체하기 위해 윈도우 10 및 이후 버전을 위해 개발한 다중 탭 단말 에뮬레이터이다.

2019년 마이크로소프트가 윈도우에 추가한 리눅스용 윈도우 하위 시스템은 윈도우 콘솔, 윈도우 터미널 및 기타 윈도우 기반 터미널 내에서 윈도우 상의 리눅스 텍스트 기반 앱 실행을 지원한다.

## 유닉스 계열 시스템
[섬네일|300px|그래픽 시스템을 구성하기 위해 [맨드리바 리눅스에서 사용되는 TUI인 'XFdrake'의 스냅샷]]
섬네일|300px|btop - 리눅스 및 기타 유닉스 계열 OS용 작업 관리자 유틸리티
유닉스 계열 운영체제에서 TUI는 종종 터미널 제어 라이브러리인 Curses 또는 Ncurses(대부분 호환되는 라이브러리), 또는 대안적인 S-Lang 라이브러리를 사용하여 구축된다. 버클리 유닉스와 함께 curses 라이브러리가 등장하면서 TUI를 작성할 수 있는 이식성 있고 안정적인 API가 만들어졌다. 동일한 API를 사용하여 다양한 단말기 유형과 통신할 수 있는 능력은 단순한 라인 인터페이스 대신 전체 터미널 화면을 점유하는 "시각적" 유닉스 프로그램의 광범위한 사용으로 이어졌다. 이는 vi와 같은 문서 편집기, pine 또는 Mutt와 같은 이메일 클라이언트, SMIT, SAM, FreeBSD의 Sysinstall과 같은 시스템 관리 도구, 링크스와 같은 웹 브라우저에서 볼 수 있다. W3m이나 이전 버전의 pine 및 vi와 같은 일부 애플리케이션은 기능이 적은 Termcap 라이브러리를 사용하여 애플리케이션 내에서 Curses와 관련된 많은 기능을 수행한다. 위젯 기반의 사용자 정의 TUI 애플리케이션은 Ncurses 기반의 dialog 프로그램이나 S-Lang 기반의 Whiptail 프로그램을 사용하여 쉽게 개발할 수 있다.

또한 리눅스의 인기가 높아지면서 많은 이전 DOS 사용자들이 유닉스 계열 플랫폼으로 유입되었고, 이는 많은 TUI에 DOS의 영향을 미치게 했다. 예를 들어 Minicom 프로그램은 인기 있는 DOS 프로그램인 Telix를 모델로 삼았다. Twin 데스크톱과 같은 일부 다른 TUI 프로그램도 포팅되었다.

대부분의 유닉스 계열 운영체제(리눅스, FreeBSD 등)는 일반적으로 Ctrl-Alt-F 키 조합을 통해 접근하는 가상 콘솔을 지원한다. 예를 들어 리눅스에서는 최대 64개의 콘솔에 접근할 수 있으며(12개는 기능 키를 통해), 각각 전체 화면 텍스트 모드로 표시된다.

자유 소프트웨어 프로그램인 GNU Screen은 단일 TUI 내에서 여러 세션을 관리할 수 있도록 하며, 따라서 텍스트 모드 및 명령줄 인터페이스를 위한 창 관리자와 같다고 생각할 수 있다. Tmux 또한 이 기능을 수행할 수 있다.

독점 소프트웨어인 MacOS 문서 편집기 BBEdit에는 전체 화면 셸 창으로 작동하는 셸 워크시트 기능이 포함되어 있다. 자유 이맥스 문서 편집기는 버퍼 중 하나 내부에서 셸을 실행하여 유사한 기능을 제공할 수 있다. 이맥스에는 여러 셸 구현이 있지만 `ansi-term`만이 TUI 프로그램을 실행하기에 적합하다. 다른 일반적인 셸 모드인 `shell`과 `eshell`은 명령줄만 에뮬레이션하며 TUI 프로그램은 "터미널이 완전히 작동하지 않음"이라고 불평하거나 깨진 인터페이스를 표시한다. 자유 Vim 및 Neovim 문서 편집기에는 터미널 창(Xterm 시뮬레이션)이 있다. 이 기능은 작업, 병렬 빌드 또는 테스트를 실행하기 위한 것이지만 창 분할 및 탭 페이지와 함께 가벼운 터미널 멀티플렉서로도 사용할 수 있다.

## OpenVMS
VAX/VMS(나중에 OpenVMS로 알려짐)에는 Screen Management facility 또는 SMG라고 하는 curses와 유사한 기능이 있었다. 이는 명령줄에서 호출하거나 SMG$ 라이브러리를 사용하여 프로그램에서 호출할 수 있었다.

## Oberon
섬네일|300px|이미지와 여러 텍스트 뷰어를 보여주는 오베론 시스템 데스크톱의 스크린샷
또 다른 종류의 TUI는 1988년에 처음 출시되어 현재까지 유지 관리되고 있는 오베론 운영체제의 기본 인터페이스이다. 대부분의 다른 텍스트 기반 사용자 인터페이스와 달리 오베론은 텍스트 모드 콘솔이나 터미널을 사용하지 않지만, 텍스트가 마우스 클릭의 주요 대상인 대형 비트맵 디스플레이가 필요하다. 하이퍼텍스트의 링크와 유사하게 명령은 `Module.Procedure parameters&nbsp;~` 형식을 가지며 마우스 가운데 클릭으로 활성화된다. 화면 어디에나 표시되는 텍스트를 편집할 수 있으며, 필요한 명령 구문으로 형식이 지정된 경우 가운데 클릭으로 실행할 수 있다. 적절한 형식의 명령이 포함된 모든 텍스트 파일은 소위 **도구 텍스트**(tool text)로 사용될 수 있으며, 따라서 사용자가 구성 가능한 메뉴 역할을 한다. 이전 명령의 출력조차도 편집하여 새 명령으로 사용할 수 있다. 이 접근 방식은 기존의 대화 중심 콘솔 메뉴나 명령줄 인터페이스와는 근본적으로 다르지만 Macintosh Programmer's Workshop의 워크시트 인터페이스와 몇 가지 유사점이 있다.

그래픽 위젯을 사용하지 않고 일반 텍스트만 사용하지만, 타일링 창 관리자가 있는 GUI와 대등한 기능을 제공하기 때문에 텍스트 사용자 인터페이스 또는 TUI라고 불린다. 짧은 소개는 오베론 시스템에 대해 처음 발표된 보고서의 4페이지 두 번째 단락을 참조하라.

오베론의 UI는 플랜 9 운영체제를 위한 Acme 문서 편집기 및 이메일 클라이언트의 설계에 영향을 주었다.

## 임베디드 시스템
섬네일|LCD 화면에 메뉴를 표시하는 임베디드 시스템

현대의 임베디드 시스템은 개인용 컴퓨터처럼 모니터에 TUI를 표시할 수 있다. 이 기능은 일반적으로 전용 집적 회로, 모듈 또는 FPGA를 사용하여 구현된다.

비디오 회로 또는 모듈은 대개 UART를 통해 VT100 호환 명령 세트를 사용하여 제어되며, FPGA 설계는 대개 직접적인 비디오 메모리 액세스를 허용한다.

## 기타 용도
* 코모도어 64 8비트 컴퓨터의 전체 화면 편집기는 당시 해당 시장 세그먼트에서 앞선 것이었다. 사용자는 화면 전체 영역에서 커서를 이동하여 베이직 프로그램 라인과 직접 모드 명령을 입력하고 편집할 수 있었다. 모든 코모도어 8비트 컴퓨터는 TUI 제작에 적합한 문자 글리프를 포함하는 PETSCII 문자 세트를 사용했다.
* 애플의 Macintosh Programmer's Workshop 프로그래밍 환경에는 TUI 셸인 Commando가 포함되어 있었다. 이는 BBEdit의 셸 워크시트에 영감을 주었다.
* 이후의 애플 II 모델에는 TUI 제작에 사용되는 그래픽 글리프 세트인 MouseText가 포함되었다.
* 1982년의 코버스 컨셉(Corvus Concept) 컴퓨터는 전체 페이지 회전 디스플레이에서 기능 키 기반의 텍스트 인터페이스를 사용했다.

## 같이 보기
* 텍스트 모드
* 명령 줄 인터페이스
* 로그라이크

## 각주


분류:사용자 인터페이스