인스톨레이션

**인스톨레이션**(installation), **설치** 또는 **셋업**(setup)은 컴퓨터 프로그램(장치 드라이버 및 플러그인 포함)을 실행할 수 있는 상태로 만드는 행위이다. 설치는 컴퓨터에서 사용할 수 있도록 소프트웨어나 하드웨어의 특정 구성을 설정하는 것을 의미한다. 소프트웨어(프로그램)를 설치하려면 해당 프로그램의 소프트 또는 디지털 복사본이 필요하다. 소프트웨어(프로그램)를 설치하는 과정은 다양하다. 과정이 프로그램마다, 그리고 컴퓨터마다 다르기 때문에, 프로그램(운영체제 포함)은 설치에 필요한 모든 작업(아래 참조)을 담당하는 전문 프로그램인 인스톨러와 함께 제공되는 경우가 많다. 설치는 더 큰 소프트웨어 전개 과정의 일부일 수 있다.

설치에는 일반적으로 운영체제가 더 쉽게 접근할 수 있도록 설치 본으로부터 로컬 컴퓨터의 새 파일로 프로그램 코드와 데이터를 포함하는 파일을 복사하거나 생성하고, 필요한 디렉토리를 만들고, 환경 변수를 등록하며, 별도의 제거 프로그램을 제공하는 등의 작업이 포함된다. 프로그램 파일은 일반적으로 여러 위치에 복사되거나 생성되기 때문에, 제거 작업은 보통 프로그램 폴더를 지우는 것 이상의 작업을 수반한다. 예를 들어, 완전한 제거를 위해 레지스트리 파일 및 기타 시스템 코드를 수정하거나 삭제해야 할 수도 있다.

## 개요
일부 컴퓨터 프로그램은 컴퓨터에 저장된 폴더에 복사하고 실행하는 것만으로 실행될 수 있다. 다른 프로그램들은 즉각적인 실행에 부적합한 형태로 제공되므로 설치 절차가 필요하다. 일단 설치되면 프로그램은 매번 실행하기 전에 다시 설치할 필요 없이 반복해서 실행할 수 있다.

소프트웨어 설치 중에 수행되는 일반적인 작업은 다음과 같다:
* 필요한 시스템 요구사항이 충족되었는지 확인
* 소프트웨어의 기존 버전 확인
* 프로그램 파일 및 폴더 생성 또는 업데이트
* 구성 파일, 윈도우 레지스트리 항목 또는 환경 변수와 같은 구성 데이터 추가
* 링크, 바로가기 또는 즐겨찾기를 생성하여 사용자가 소프트웨어에 접근할 수 있도록 함
* 데몬이나 윈도우 서비스와 같이 자동으로 실행되는 구성 요소 설정
* 제품 활성화 수행
* 소프트웨어 버전 업데이트

일부 인스톨러는 다양한 형태의 애드웨어, 도구 모음, 체험판 소프트웨어 또는 파트너 회사의 소프트웨어와 같은 정크웨어를 설치하도록 사용자를 속이려 할 수도 있다. 이를 방지하려면 정확히 무엇을 설치하라고 요청하는지 세심한 주의가 필요하다. 추가 소프트웨어 설치는 단순히 건너뛰거나 체크를 해제할 수 있다(이를 위해 사용자가 설치 절차의 "사용자 정의", "상세" 또는 "전문가" 버전을 사용해야 할 수도 있다).

이러한 악의적인 행위가 반드시 소프트웨어 개발자나 그 회사의 결정은 아니며, CNET의 Download.com 인스톨러와 같은 외부 인스톨러의 문제일 수도 있다.

## 제로 인스톨 및 휴대용 응용 프로그램
일부 컴퓨터 프로그램은 설치가 필요 없다. 이는 플로피 디스크에서 소프트웨어를 실행하고 한 번에 하나의 응용 프로그램만 로드할 수 있었던 8비트 및 16비트 시스템(애플 II, PET, MS-DOS, 매킨토시 128K 등)에서는 한때 표준이었다. 컴퓨팅 환경이 더 복잡해지고 고정된 하드 드라이브가 플로피 디스크를 대체하면서 실질적인 설치의 필요성이 나타났다. 예를 들어 코모도어는 아미가용 Installer를 출시했다.

공식적인 설치 과정을 거치지 않고 실행할 수 있으며, 특히 운영체제의 수정을 요구하지 않는 현대의 응용 프로그램들을 때때로 **제로 인스톨**(zero-install)이라고 부른다. 제로 인스톨은 여러 수단을 통해 달성될 수 있다:
* 표준적인 해결책은 응용 프로그램과 그 구성 요소를 함께 모아 고정된 디렉토리에 복사한 다음 그곳에서 실행하는 것이다.
* 브라우저 기반 접근 방식.

리눅스 배포판인 고보리눅스는 이와 유사한 방식(각 응용 프로그램이 고유한 디렉토리 구조를 가짐)을 취하지만, 표준 리눅스 디렉토리 레이아웃과의 하위 호환성을 유지하기 위해 전통적인 리눅스 설치의 부수 효과를 여전히 도입한다. 응용 프로그램이 요구하는 변경 사항으로부터 운영체제를 격리하는 것은 VMware ThinApp, 마이크로소프트 App-V, InstallFree Bridge와 같은 응용 프로그램 가상화 도구를 통해서도 달성할 수 있다.

설치가 필요 없고 탈착식 저장 장치에 위치하는 현대 응용 프로그램 부류는 휴대용 소프트웨어로 알려져 있는데, 이는 다른 컴퓨터로 이동하여 실행할 수 있기 때문이다. 이와 유사하게 설치가 필요 없고 부팅 가능한 CD, DVD, USB 플래시 드라이브에서 직접 실행하거나 신 클라이언트처럼 네트워크를 통해 로드할 수 있는 라이브 운영체제가 있다. 그 예로 아미가OS 4.0, 다양한 리눅스 배포판, 모르프OS 또는 맥 OS 버전 1.0~9.0이 있다. (라이브 CD 및 라이브 USB 참조.) 마지막으로 웹 브라우저 내부에서 실행되는 웹 애플리케이션은 설치가 필요 없다.

## 유형
### 사용자 정의 설치
사용자 정의 설치(Custom installation)는 사용자가 소프트웨어 패키지의 어떤 구성 요소를 설치할지 선택할 수 있도록 한다. 이는 저장 공간이 제한되어 있거나 소프트웨어의 특정 기능만 필요한 경우 전체 설치보다 선호된다.

### 대화형 설치
윈도우 시스템에서 이는 가장 일반적인 설치 형태이다. 설치 과정은 보통 소프트웨어 사용권 동의(EULA) 수락 또는 거부, 설치 위치와 같은 기본 설정 지정, 비밀번호 제공 또는 제품 활성화 지원과 같은 선택을 할 사용자를 필요로 한다. 그래픽 환경에서는 마법사 기반 인터페이스를 제공하는 인스톨러가 일반적이다. 대화형 인스톨러는 사용자에게 오류 완화를 도와달라고 요청할 수 있다. 예를 들어, 컴퓨터 프로그램이 설치되는 디스크가 가득 찼을 경우, 인스톨러는 사용자에게 다른 대상 경로를 지정하거나 디스크 공간을 충분히 확보해 달라고 요청할 수 있다. 흔한 오해 중 하나는 압축 해제를 설치로 보는 것인데, 이는 EULA 수락 또는 거부와 같은 사용자 선택을 포함하지 않으므로 설치 행위로 간주되지 않는다.

### 사일런트 설치
"사일런트 설치"(Silent installation)는 진행 중에 메시지나 창을 표시하지 않는 설치이다. "사일런트 설치"는 "무인 설치"(아래 참조)와 동일하지 않다. 모든 사일런트 설치는 무인 설치이지만, 모든 무인 설치가 사일런트인 것은 아니다. 사일런트 설치의 목적은 편의성일 수도 있고 속임수일 수도 있다. 악성 소프트웨어와 바이러스는 사용자가 실제라고 생각하지만 실제로는 해커의 프로그램 다운로드인 링크를 클릭할 때 조용히 설치될 수 있다. 일반 사용자에게 사일런트 설치는 큰 쓸모가 없으나, 수천 명의 사용자가 근무하는 대규모 조직에서는 응용 프로그램 전개가 전형적인 작업이 되며, 사용자의 업무에 영향을 주지 않고 백그라운드에서 설치되도록 사일런트 설치를 수행한다. 사일런트 매개변수는 소프트웨어마다 다를 수 있다. 소프트웨어/응용 프로그램에 사일런트 매개변수가 있는지 확인하려면 "  /? " 또는 "  /help " 또는 "  -help "를 입력해 볼 수 있다.

소프트웨어 프로그램을 조용히 설치하는 기능은 기업, 정부, 법인 네트워크뿐만 아니라 초등교육, 중등교육 및 대학교를 포함한 교육 기관의 네트워크에 프로그램을 전개하는 데 사용될 수 있다. 사일런트 설치를 관리하는 사람은 바탕 화면 바로가기를 추가하도록 선택할 수 있다. 예를 들어, 바탕 화면 바로가기와 함께 구글 드라이브를 조용히 설치하려면 다음과 같이 한다:
```powershell
GoogleDrive.exe --silent --desktop_shortcut=true
```


### 무인 설치
무인 설치(Unattended installation)는 진행 중에 사용자 상호작용 없이 또는 사용자가 전혀 없는 상태에서 수행되는 설치이다. 이 방식을 사용하는 이유 중 하나는 다수의 시스템에 대한 설치를 자동화하기 위해서이다. 무인 설치는 사용자가 아무것도 제공할 필요가 없거나, 설치 시작 전에 필요한 모든 입력을 미리 받은 상태이다. 이러한 입력은 명령 줄 스위치나 응답 파일(필요한 모든 매개변수를 포함하는 파일)의 형태일 수 있다. 윈도우 XP와 대부분의 리눅스 배포판은 응답 파일로 설치할 수 있는 운영체제의 예이다. 무인 설치에서는 오류 완화를 도와줄 사용자가 없다고 가정한다. 예를 들어, 설치 매체가 결함이 있는 경우 오류를 수정하거나 매체를 교체할 사용자가 없으므로 인스톨러는 설치를 실패 처리해야 한다. 무인 인스톨러는 나중에 검토할 수 있도록 컴퓨터 로그에 오류를 기록할 수 있다.

### 헤드리스 설치
헤드리스 설치(Headless installation)는 컴퓨터 모니터를 연결하지 않고 수행되는 설치이다. 대화형 방식의 헤드리스 설치에서는 다른 기기가 대상 기기에 접속하여(예: 근거리 통신망을 통해) 디스플레이 출력을 대신 맡는다. 헤드리스 설치는 대상 컴퓨터가 있는 위치에 사용자가 있을 필요가 없으므로, 무인 헤드리스 인스톨러를 사용하여 여러 기기에 동시에 프로그램을 설치할 수 있다.

### 예약 또는 자동 설치
예약 또는 자동 설치는 사용자의 명령에 의해 명시적으로 시작되는 설치 프로세스와 달리, 미리 설정된 시간에 또는 사전 정의된 조건이 발생할 때 실행되는 설치 프로세스이다. 예를 들어, 사용 중인 컴퓨터 프로그램의 최신 버전을 설치하려는 시스템 관리자는 해당 프로그램이 실행되지 않을 때 설치가 수행되도록 예약할 수 있다. 운영체제는 사용자가 연결한 장치에 대한 장치 드라이버를 자동으로 설치할 수 있다. (플러그 앤 플레이 참조.) 악성 소프트웨어도 자동으로 설치될 수 있다. 예를 들어 악명 높은 컨피커(Conficker)는 사용자가 감염된 장치를 컴퓨터에 연결했을 때 설치되었다.

### OEM 설치
OEM 설치는 하드웨어 장치가 판매되기 전에 소프트웨어가 하드웨어 장치에 사전 설치되는 원천 장비 제조업체(OEM)에 의해 수행되는 설치이다. 이러한 유형의 설치는 일반적으로 최종 사용자의 상호작용 없이 수행되지만, 장치의 첫 부팅 시 사용자가 초기 시스템 설정을 수행해야 할 수도 있다.

### 클린 설치
클린 설치(Clean installation)는 설치하려는 컴퓨터 프로그램의 이전 버전이나 이전 설치의 잔재와 같이 방해되는 요소가 없는 상태에서 수행되는 설치이다. 특히 운영체제의 클린 설치는 설치 전에 대상 디스크 파티션을 지우는 설치를 말한다. 방해 요소가 없기 때문에 클린 설치는 일반적인 설치가 실패하거나 훨씬 더 오래 걸릴 수 있는 상황에서 성공할 수 있다.

### 네트워크 설치
네트워크 설치(net install)는 공유 네트워크 자원으로부터 프로그램을 설치하는 것으로, 네트워크를 통해 추가 패키지를 다운로드하기 전에 최소한의 시스템을 설치함으로써 수행될 수 있다. 이는 단순히 원본 매체의 복사본일 수도 있지만, 기관 고객을 위해 사이트 라이선스를 제공하는 소프트웨어 출판사는 네트워크를 통한 설치를 목적으로 하는 버전을 제공할 수도 있다.

## 인스톨러
설치 프로그램 또는 인스톨러는 응용 소프트웨어, 장치 드라이버 또는 기타 소프트웨어와 같은 파일을 컴퓨터에 설치하는 컴퓨터 프로그램이다. 일부 인스톨러는 자신이 포함하고 있는 파일을 설치하기 위해 특별히 제작된 것이며, 다른 인스톨러는 범용적으로 제작되어 설치할 소프트웨어 패키지의 내용을 읽어 들여 작동한다.

이들은 "단독 인스톨러"(또는 "오프라인 인스톨러")와 "웹 인스톨러"(또는 "온라인 인스톨러")로 모두 존재하는데, 전자는 모든 설치 파일을 포함하고 있어 오프라인 설치가 가능한 반면, 후자는 설치 시점에 웹에서 필요한 파일을 다운로드해야 한다.

패키지 관리자와 인스톨러의 차이점은 다음과 같다:

### 부트스트래퍼
컴퓨터 프로그램 설치 중에 인스톨러 자체나 패키지 관리자를 업데이트해야 할 때가 있다. 이를 가능하게 하기 위해 부트스트래핑이라는 기술이 사용된다. 이에 대한 일반적인 패턴은 인스톨러를 업데이트하고 업데이트 후에 실제 설치를 시작하는 작은 실행 파일을 사용하는 것이다. 이 작은 실행 파일을 부트스트래퍼(bootstrapper)라고 부른다. 때때로 부트스트래퍼는 부트스트래핑 과정 중에 소프트웨어를 위한 다른 필수 구성 요소를 설치하기도 한다.

### 일반적인 유형

크로스 플랫폼 인스톨러 제작 도구는 윈도우, MacOS 및 리눅스에서 실행되는 인스톨러를 생성한다. 예로는 자바를 기반으로 하는 Flexera Software의 InstallAnywhere가 있다. 네이티브 코드의 예로는 InstallAware Software의 InstallAware Multi Platform이 있는데, 이는 의존성 없이 실행되는 빌드 툴체인과 설정 엔진을 갖추고 있으며, 리눅스에서 그래픽 사용자 인터페이스(GUI)를 표시할 수 없는 경우 콘솔 모드로 전환할 수도 있다.

Windows NT 계열에는 설치 API와 이와 연관된 서비스인 윈도우 인스톨러가 포함되어 있다. 마이크로소프트는 자유롭게 이용 가능한 Windows SDK에서 윈도우 인스톨러를 사용하여 인스톨러를 만드는 데 필요한 최소 수준의 도구를 제공하며, 대신 개발자와 제3자가 이를 활용해 맞춤형 인스톨러를 만들 수 있도록 API에 집중하고 있다. 제3자 도구는 프로세스 속도를 높이기 위해 이 API를 사용하는 인스톨러 제작을 지원할 수 있다. 예로는 인스톨실드(Flexera Software)와 WiX(Outercurve Foundation)가 있다. 윈도우 인스톨러에 의존하지 않는 설치 저작 도구에는 Wise Installation Studio, Installer VISE, Visual Installer, NSIS, 클릭팀, InnoSetup 및 InstallSimple이 있다. 윈도우 인스톨러용 InstallAware는 하이브리드 설치 엔진을 갖추고 있어 윈도우 인스톨러 API를 사용하거나 InstallAware의 네이티브 코드 설정 엔진을 통해 직접 설정을 실행할 수 있다. 이 하이브리드 엔진은 런타임에 설치 모드를 전환하는 기능도 제공한다.

macOS에는 네이티브 패키지 관리자인 Installer가 포함되어 있다. 또한 macOS에는 애플 및 시스템 소프트웨어만 지원하는 별도의 소프트웨어 업데이트 응용 프로그램인 애플 소프트웨어 업데이트가 포함되어 있다. 10.6.6부터 도크와 애플 메뉴에 포함된 맥 앱 스토어는 유사한 앱 승인 프로세스, 구매를 위한 Apple ID 사용, 자동 설치 및 업데이트 등 iOS 장치용 App Store의 성공적인 특성들을 많이 공유한다. 앱 스토어가 애플이 선호하는 macOS 앱 배포 방식이지만, 이전에 구매한 라이선스는 다운로드나 자동 업데이트를 위해 맥 앱 스토어로 이전할 수 없다. 인스톨러 대신, 맥 앱 스토어 외부에서 배포되는 많은 macOS 응용 프로그램은 응용 프로그램 폴더로 드래그 앤 드롭할 응용 프로그램 번들을 포함하는 애플 디스크 이미지(.dmg 파일)를 사용한다. 이러한 응용 프로그램은 드래그 설치(drag-install) 응용 프로그램으로 설명된다. 이들은 종종 눈에 띄는 설치 지침과 응용 프로그램 폴더로의 바로가기를 특징으로 한다. 이러한 스타일의 드래그 설치 응용 프로그램은 Fetch 5 개발 중에 아이리스 아틴(Iris Artin, 전 벤 아틴)이 발명하여 발표했으며 이후 널리 채택되었다. macOS용 상용 응용 프로그램은 맥 버전의 Installer VISE나 InstallerMaker(StuffIt)와 같은 제3자 인스톨러를 사용할 수도 있다.

### 시스템 인스톨러
시스템 인스톨러는 장치에 운영체제를 설정하고 설치하는 데 사용되는 소프트웨어이다.

윈도우 설치는 마이크로소프트 윈도우의 시스템 인스톨러이다.

리눅스 시스템 인스톨러의 예:

* 아나콘다: CentOS, Fedora에서 사용
* 칼라마레스: 여러 리눅스 배포판(일부 우분투 변형, 데비안 및 파생판 포함)에서 사용
* 데비안 인스톨러("D-I"): 클래식 데비안 인스톨러(텍스트 및 그래픽 인터페이스)
* Subiquity: 우분투 서버 인스톨러
* 유비퀴티: 우분투 데스크톱 인스톨러(22.10까지)
* 우분투 데스크톱 인스톨러: 현재 우분투 데스크톱 인스톨러(23.04부터)
* YaST: SUSE 기반 프로젝트용

또 다른 예는 하이쿠 운영 체제에서 찾을 수 있는데, 라이브 CD 또는 라이브 USB로 부팅한 후 장치에 자신을 설치하기 위해 Haiku Installer라는 유틸리티를 사용한다.

## 같이 보기
* 제거 프로그램
* 소프트웨어 배포

## 각주

분류:설치 소프트웨어
분류:패키지 관리 시스템