자동 완성

섬네일|일부분이 입력된 검색어 <code>baby st</code>가 다양한 옵션으로 자동 완성되는 예시
**자동 완성**(), **단어 완성**()은 사용자가 입력한 낱말의 나머지 부분을 응용 프로그램이 예측하는 기능이다. 안드로이드와 iOS 스마트폰에서는 **예측 문자**(predictive text)로 부른다. 그래픽 사용자 인터페이스에서 사용자들은 일반적으로 탭 키를 사용하여 제안을 수락하거나 아래 방향키를 사용하여 그 중 하나를 수락할 수 있다.

자동 완성은 텍스트 입력 필드에 몇 개의 문자만 입력한 다음 사용자가 입력을 의도한 낱말을 올바르게 예측할 경우 인간-컴퓨터 상호작용의 속도를 제고시킨다.
일부 단어들이 훨씬 더 일반적이거나(예: 이메일 주소 입력 시), 구조화되고 예측 가능한 텍스트를 쓸 때(예: 소스 코드 편집기) 가능한 단어 수의 제약이 있는 분야(예: 명령 줄 인터프리터)에서 최적으로 동작한다.

수많은 자동 완성 알고리즘들은 사용자가 용어를 몇 번 입력한 뒤 새로운 단어를 익히며 개별 사용자의 학습된 습관에 근거하여 다른 용어를 제안할 수 있다.

## 정의
### 원래 목적
단어 예측 소프트웨어의 원래 목적은 지체 장애가 있는 사람들이 타이핑 속도를 높이도록 돕고, 단어나 문장을 완성하는 데 필요한 키 입력 횟수를 줄이는 것이었다. 속도 향상의 필요성은 음성 출력 장치를 사용하는 사람들이 일반적으로 구사하는 음성 속도가 구어체를 사용하는 사람들에 비해 10% 미만이라는 사실에서 두드러진다. 그러나 이 기능은 텍스트를 작성하는 모든 사람, 특히 기술적이거나 의학적인 성격의 길고 철자가 어려운 용어를 자주 사용하는 의사와 같은 사람들에게도 매우 유용하다.

### 설명
자동 완성 또는 단어 완성은 작성자가 단어의 첫 글자나 몇 글자를 쓰면 프로그램이 하나 이상의 가능한 단어를 선택지로 예측하여 작동한다. 의도한 단어가 목록에 포함되어 있으면 작성자는 예를 들어 숫자 키를 사용하여 해당 단어를 선택할 수 있다. 사용자가 원하는 단어가 예측되지 않으면 작성자는 단어의 다음 글자를 입력해야 한다. 이때 단어 선택지는 선택된 글자와 동일한 글자로 시작하는 단어들로 변경된다. 사용자가 원하는 단어가 나타나면 이를 선택하고 해당 단어가 텍스트에 삽입된다. 단어 예측의 또 다른 형태로는 최근에 사용된 단어 쌍을 기반으로 방금 작성된 단어 뒤에 올 가능성이 가장 높은 단어를 예측하는 것이 있다. 단어 예측은 정해진 어휘 내에서 발생할 가능성이 가장 높은 단어를 계산하는 언어 모델링을 사용한다. AAC 기기에서의 기본적인 단어 예측은 언어 모델링과 더불어 사용자가 최근에 자주 사용한 단어가 예측될 가능성을 높이는 프리퀀시(frecency) 모델과 결합되는 경우가 많다. 단어 예측 소프트웨어는 또한 사용자가 직접 단어 예측 사전에 자신의 단어를 입력하거나, 작성된 단어를 "학습"하는 기능을 제공하기도 한다. 성기나 기타 저속한 용어와 관련된 일부 검색 결과는 자동 완성 기술에서 제외되는 경우가 많으며, 끔찍한 용어들도 마찬가지이다.

## 역사
자동 완성 및 예측 문자 기술은 1950년대 중국 과학자와 언어학자들이 중국어 타자기의 입력 비효율성을 해결하기 위해 발명했다. 당시 타자 과정은 트레이에 있는 수천 개의 표의 문자를 찾아 선택해야 했으므로, 문서 처리 속도가 극도로 느려졌기 때문이다.

1950년대에 타자수들은 문자 배열을 표준 사전식 배열에서 자주 사용하는 단어와 구문 그룹으로 재배치하게 되었다. 중국어 타자기 엔지니어들은 오늘날 컴퓨터용 중국어 입력 방식과 여러 언어의 문자 메시지에서 사용되는 기술인 단어 예측을 통해 일반적인 문자에 최대한 빠르게 접근할 수 있는 메커니즘을 혁신했다. 스탠퍼드 대학교 역사학자 토머스 멀레이니에 따르면, 1960년대에서 1970년대에 걸친 현대적 중국어 타자기의 발전은 현대 컴퓨터 워드 프로세서의 발전에 영향을 미쳤으며 컴퓨터 자체의 발전에도 영향을 주었다.

## 자동 완성 도구의 종류
기존 응용 프로그램에 자동 완성 기능을 추가하는 독립형 도구가 있다. 이 프로그램들은 사용자의 키 입력을 모니터링하고 처음 입력된 글자를 기반으로 단어 목록을 제안한다. 예로는 Typingaid와 Letmetype이 있다. 프리웨어인 LetMeType은 더 이상 개발되지 않지만 저자가 소스 코드를 공개하여 누구나 개발을 계속할 수 있도록 했다. 역시 프리웨어인 Typingaid는 활발히 개발 중이다. Intellicomplete는 프리웨어 및 유료 버전이 있으며, intellicomplete 서버 프로그램에 연결되는 특정 프로그램에서만 작동한다. 많은 자동 완성 프로그램은 속기 목록을 만드는 데에도 사용될 수 있다. 최초의 자동 완성 소프트웨어는 1980년대 후반으로 거슬러 올라가는 Smartype으로, 현재도 사용 가능하다. 처음에는 MS/DOS용 워드퍼펙트에서 작업하는 의료 전사자를 위해 개발되었으나, 현재는 윈도우 기반 또는 웹 기반의 모든 응용 프로그램에서 작동한다.

### 속기
자동 교체라고도 불리는 속기는 특정 문자열을 보통 더 길고 입력하기 어려운 다른 문자열로 자동 교체하는 관련 기능이다. 예를 들어 "myname"을 "Lee John Nikolai François Al Rahman"으로 바꾸는 식이다. 이는 또한 "teh"를 "the"로 바꾸는 것과 같이 단순한 타이핑 오류를 조용히 수정할 수도 있다. 단어 목록을 기반으로 하는 독립형 또는 문서 편집기 내장 자동 완성 프로그램 중 상당수는 자주 사용되는 구문을 위한 속기 기능을 포함하고 있다.

### 문맥 완성
**문맥 완성**은 동일한 문서 내의 다른 유사한 단어의 문맥이나 일부 학습 데이터 세트를 기반으로 단어(또는 전체 구문)를 완성하는 문서 편집기 기능으로, 단어 완성(word completion)과 유사하다. 문맥 완성의 주요 장점은 초기 글자 없이도 예상 단어를 더 정확하게 예측할 수 있다는 것이다. 주요 단점은 학습 데이터 세트가 필요하며, 이는 일반적으로 단순한 단어 완성보다 문맥 완성에서 더 방대하다는 점이다. 문맥 완성의 가장 흔한 용례는 고급 프로그래밍 언어 편집기와 IDE에서 볼 수 있는데, 이곳에서는 학습 데이터 세트가 본질적으로 제공되며 문맥 완성이 광범위한 단어 완성보다 사용자에게 더 유용하기 때문이다.

**행 완성**은 문맥 완성의 한 유형으로, 2006년 7월 TED Notepad에서 유라이 심로비치가 처음 도입했다. 행 완성의 문맥은 현재 행이며, 현재 문서가 학습 데이터 세트 역할을 한다. 사용자가 자주 사용되는 구문으로 행을 시작하면 편집기가 유사한 행들이 달라지는 지점까지 자동으로 완성하거나 일반적인 연속어 목록을 제안한다.

**작업 완성**은 현재 문맥을 기반으로 기존 응용 프로그램이나 운영 체제의 모든 응용 프로그램에 자동 완성 기능을 추가하는 독립형 도구이다. 작업 완성의 주요 장점은 예상되는 작업을 예측할 수 있다는 것이며, 주요 단점은 데이터 세트가 필요하다는 점이다. 작업 완성의 가장 일반적인 용례는 고급 프로그래밍 언어 편집기나 IDE에서 볼 수 있다. 하지만 각 응용 프로그램의 작업 완성을 (크게) 방해하지 않으면서 PC 전체의 모든 응용 프로그램에 걸쳐 전역적으로 병렬 작동하는 작업 완성 도구도 존재한다.

## 소프트웨어 통합

### 웹 브라우저에서
[섬네일|[파이어폭스 검색창에서의 자동 완성]]
웹 브라우저에서 자동 완성은 (브라우저 방문 기록의 항목을 사용하는) 주소창과 검색 엔진 검색창과 같이 자주 사용하는 페이지의 텍스트 상자에서 이루어진다. 웹 주소 자동 완성은 전체 주소가 길고 정확하게 입력하기 어려운 경우가 많기 때문에 특히 편리하다.

#### 웹 양식에서
웹 브라우저에서 웹 양식을 자동으로 채우기 위해 자동 완성 또는 "자동 채우기"가 자주 사용된다. 사용자가 양식에 데이터를 입력하고 제출하면 웹 브라우저는 기본적으로 양식 내용을 저장한다.

이 기능은 로그인 자격 증명을 채우는 데 흔히 사용된다. 하지만 비밀번호 필드가 감지되면 웹 브라우저는 보통 비밀번호 저장소에 비밀번호를 저장하기 전에 사용자에게 명시적인 확인을 요청한다. 자격 증명을 자동 채우기 전에 "마스터 비밀번호"를 사용할 수 있도록 내장된 비밀번호 관리자로 보안을 유지하는 경우가 많다.

인터넷 익스플로러나 구글 툴바와 같은 경우, 성(last name) 필드에 거리 이름을 입력하거나 그 반대의 경우가 발생하지 않도록 양식 필드 이름에 따라 항목이 달라진다.

오페라와 같은 일부 웹 브라우저는 신용카드 정보와 주소를 자동으로 채워준다.

개별 웹페이지는 기본적으로 브라우저 자동 채우기 기능을 활성화하거나 비활성화할 수 있다. 이는 HTML에서 `&lt;form&gt;` 요소나 해당 양식 요소 내의 `autocomplete` 속성을 통해 수행된다.


```html
<form autocomplete="on">

  
  <input name="username" autocomplete="on">

  
  <input name="password" type="password">
</form>
```


최신 브라우저의 자동 채우기 기능은 숨겨진 양식 필드를 사용하는 피싱 공격에 악용될 수 있으며, 이를 통해 사용자의 전화번호와 같은 개인 정보를 수집할 수 있음이 밝혀졌다.

HTML에는 입력 요소에 자동 완성 데이터를 공급하는 데 사용할 수 있는  요소가 있다.

```html
<label for="ice-cream-choice">맛을 선택하세요:</label>
<input list="ice-cream-flavors" id="ice-cream-choice" name="ice-cream-choice" />

<datalist id="ice-cream-flavors">
  <option value="Chocolate"></option>
  <option value="Coconut"></option>
  <option value="Mint"></option>
  <option value="Strawberry"></option>
  <option value="Vanilla"></option>
</datalist>
```


### 이메일 프로그램에서
이메일 프로그램에서 자동 완성은 일반적으로 수신자의 이메일 주소를 채우는 데 사용된다. 일반적으로 자주 사용되는 이메일 주소는 소수이므로 자동 완성을 통해 선택하기가 비교적 쉽다. 웹 주소와 마찬가지로 이메일 주소도 긴 경우가 많아 완전히 타이핑하기가 불편하다.

예를 들어, 마이크로소프트 아웃룩 익스프레스는 주소록에 사용된 이름을 기반으로 주소를 찾는다. 구글의 Gmail은 주소나 저장된 이름에 나타나는 모든 문자열로 주소를 찾는다.

### 소매 및 전자상거래 웹사이트에서
예측 검색이라고도 불리는 자동 완성은 쇼핑객이 검색창에 입력할 때 관련 제품, 카테고리 또는 쿼리를 제안하는 데 사용된다. 이 기능은 타이핑 노력을 줄이고 사용자를 인기 있거나 전환율이 높은 검색어로 안내한다. 많은 전자상거래 시스템은 속도와 발견 가능성을 모두 개선하기 위해 최근 검색 데이터나 트렌드 제품을 기반으로 이러한 제안을 동적으로 생성한다.

### 검색 엔진에서
검색 엔진에서 자동 완성 사용자 인터페이스 기능은 사용자가 검색창에 쿼리를 입력할 때 제안 쿼리나 결과를 제공한다. 이는 자동 제안 또는 증분 검색이라고도 불린다. 이러한 유형의 검색은 음성적 사운덱스 알고리즘이나 언어 독립적인 레벤슈타인 알고리즘과 같이 입력 오류를 허용하는 매칭 알고리즘에 의존하는 경우가 많다. 과제는 사용자가 타이핑하는 동안 결과가 나타날 수 있도록 수 밀리초 이내에 방대한 인덱스나 인기 쿼리 목록을 검색하는 것이다.

자동 완성은 검색 시 부정적인 검색어가 제안될 경우 개인이나 기업에 악영향을 미칠 수 있다. 자동 완성은 이제 사기, 불만, 부정직과 같은 부정적인 검색어와 연결된 회사들이 결과를 변경하려고 시도함에 따라 평판 관리의 일부가 되었다. 특히 구글은 알고리즘 작동 방식에 영향을 미치는 몇 가지 측면을 나열했지만, 이는 조작의 여지가 있는 영역이다.

### 소스 코드 편집기에서

[섬네일|[Qt 크리에이터 5.0에서의 코드 완성: 프로그래머가 코드를 입력하고, 소프트웨어가 변수 식별자나 클래스 이름과 같이 인식 가능한 문자열을 감지하면 식별된 변수의 전체 이름이나 해당 클래스에 적용 가능한 메서드가 포함된 메뉴를 프로그래머에게 보여준다. 프로그래머는 마우스나 키보드 화살표 키로 선택할 수 있다. 선택하지 않고 타이핑을 계속하면 메뉴는 사라진다.]]
소스 코드의 자동 완성은 **코드 완성**으로도 알려져 있다. 소스 코드 편집기에서 자동 완성은 프로그래밍 언어의 규칙적인 구조 덕분에 크게 단순화된다. 일반적으로 변수나 함수 이름과 같이 현재 문맥이나 이름공간에서 의미 있는 단어의 수는 제한되어 있다. 코드 완성의 예로는 마이크로소프트의 IntelliSense 설계가 있다. 이는 현재 입력 접두사에 대해 가능한 완성 목록을 팝업으로 보여주어 사용자가 올바른 것을 선택할 수 있게 한다. 프로그래머가 특정 클래스에 어떤 멤버가 있는지 정확히 모르는 경우가 많기 때문에 이는 객체 지향 프로그래밍에서 특히 유용하다. 따라서 자동 완성은 입력 방식뿐만 아니라 편리한 기술 문서의 형태로서도 역할을 한다.

소스 코드 자동 완성의 또 다른 유익한 기능은 프로그래머가 더 길고 설명적인 변수 이름을 사용하도록 장려하여 소스 코드의 가독성을 높인다는 점이다. `numberOfWordsPerParagraph`와 같이 카멜 표기법이 포함된 긴 단어를 입력하는 것은 어려울 수 있지만, 자동 완성을 사용하면 프로그래머는 키 입력의 일부만 사용하여 단어를 완성할 수 있다.

### 데이터베이스 쿼리 도구에서
데이터베이스 쿼리 도구에서의 자동 완성은 사용자가 SQL 문에서 테이블 이름과 참조된 테이블의 열 이름을 자동으로 완성할 수 있게 한다. 편집기에 텍스트를 입력할 때 SQL 문 내 커서의 문맥을 통해 사용자가 테이블 완성이 필요한지 열 완성이 필요한지를 판단한다. 테이블 완성은 사용자가 연결된 데이터베이스 서버에서 사용 가능한 테이블 목록을 제공한다. 열 완성은 SQL 문에서 참조된 테이블에 대한 열 목록만 제공한다. SQL Server Management Studio는 쿼리 도구에서 자동 완성을 제공한다.

### 워드 프로세서에서
많은 문서 작성 프로그램에서 자동 완성은 반복적인 단어와 구문을 입력하는 데 드는 시간을 줄여준다. 자동 완성의 소스 자료는 현재 문서의 나머지 부분에서 수집하거나 사용자가 정의한 일반적인 단어 목록에서 가져온다. 현재 아파치 오픈오피스, Calligra Suite, KOffice, 리브레오피스, 마이크로소프트 오피스가 이러한 종류의 자동 완성을 지원하며, 이맥스나 Vim과 같은 고급 텍스트 편집기도 마찬가지이다.
* 아파치 오픈오피스 라이터와 리브레오피스 라이터에는 전체 사전보다는 텍스트에 이전에 입력된 단어를 제안하는 단어 완성 프로그램이 있다.
* 마이크로소프트 엑셀 스프레드시트 응용 프로그램에는 위쪽 셀에 이전에 입력된 단어를 제안하는 단어 완성 프로그램이 있다.

### 명령줄 인터프리터에서

[right|섬네일|514px|[파워셸에서의 명령줄 완성.]]
유닉스의 sh이나 bash, 마이크로소프트 윈도우의 Cmd.exe나 파워셸, 또는 이와 유사한 명령줄 인터페이스에서 명령 이름과 파일 이름의 자동 완성은 사용자가 액세스할 수 있는 모든 가능한 이름을 추적하여 이루어질 수 있다. 여기서 자동 완성은 일반적으로 단어의 처음 몇 글자를 입력한 후  키를 눌러 수행된다. 예를 들어, 현재 디렉토리에서 x로 시작하는 유일한 파일이 xLongFileName인 경우, 사용자는 x를 입력하고 Tab을 눌러 전체 이름으로 자동 완성하는 것을 선호할 수 있다. 동일한 범위에 x로 시작하는 다른 파일 이름이나 명령이 있다면, 사용자는 더 많은 글자를 입력하거나 Tab 키를 반복해서 눌러 적절한 텍스트를 선택하게 된다.

## 효율성

### 연구
연구에 따르면 단어 예측 소프트웨어가 필요한 키 입력 횟수를 줄이고 장애 아동의 쓰기 생산성을 향상시키는 것으로 나타났으나, 단어 예측이 실제로 출력 속도를 높이는지에 대해서는 엇갈린 결과가 있다. 단어 예측이 항상 텍스트 입력 속도를 높이지 못하는 이유는 증가된 인지 부하와 키보드에서 모니터로 시선을 옮겨야 하는 요구 사항 때문으로 생각된다.

이러한 인지 부하를 줄이기 위해 목록을 가능성 있는 5개의 단어로 줄이거나, 해당 단어들을 수직으로 배열하는 등의 파라미터가 사용될 수 있다. 수직 배열은 머리와 눈의 움직임을 최소화하기 위한 것이며, 단어의 길이가 분명해지기 때문에 추가적인 시각적 단서를 제공한다. 많은 소프트웨어 개발자들은 자동 완성 목록이 커서를 따라다니면 눈의 움직임이 줄어들 것이라고 믿지만, 탐, 리드, 오키프 및 나우먼(2002)의 척추갈림증 아동 대상 연구에 따르면 타이핑이 더 정확해졌고 아이들은 목록이 화면의 아래쪽 중앙에 나타날 때를 더 선호하는 것으로 나타났다. 여러 연구에 따르면 단어 목록이 키보드에 더 가까울수록 필요한 눈의 움직임이 줄어들어 단어 예측 성능과 만족도가 높아지는 것으로 나타났다.

단어 예측 기능이 있는 소프트웨어는 여러 제조업체에서 생산된다. 이 소프트웨어는 마이크로소프트 워드와 같은 일반적인 프로그램의 애드온(예: WordQ+SpeakQ, Typing Assistant, Co:Writer, Wivik, Ghotit Dyslexia)으로 구매하거나, AAC 기기의 여러 기능 중 하나로 구매할 수 있다. 잘 알려진 프로그램으로는 프리웨어와 유료 버전이 모두 있지만 호환되는 프로그램에서만 작동하는 Intellicomplete가 있다. Letmetype과 Typingaid는 모든 텍스트 편집기에서 작동하는 프리웨어 프로그램이다.

자동 완성의 초기 버전은 1967년 H. 크리스토퍼 롱게-히긴스가 그의 컴퓨터 보조 타자기(CAT)에서 기술한 바 있다. "프로그래머가 기호 한두 개만 입력하면 'BEGIN'이나 'PROCEDURE' 같은 단어 또는 프로그래머가 도입한 식별자가 CAT에 의해 자동으로 완성될 것이다."

## 같이 보기
* 예측 문자
* 증분 검색

## 각주

## 외부 링크

* Live Search Explained—Examples and explanations of working web examples plus a discussion of the usability benefits compared to traditional search
* Google Feud—The first and most popular of many games built using autocomplete data, which won a Webby Award for "Best Game" in 2016.

분류:보조과학기술