스크립트 언어

[thumb|[고도 (게임 엔진)|고도 3.4의 GDScript]]
컴퓨팅에서 **스크립트**(script)는 일반적으로 수동 프로세스를 자동화하는 상대적으로 짧고 간단한 명령어 세트이다. 스크립트를 작성하는 행위를 **스크립팅**이라고 한다. **스크립팅 언어**(scripting language) 또는 **스크립트 언어**(script language)는 스크립팅에 사용되는 프로그래밍 언어이다.

원래 스크립팅은 운영체제의 셸 자동화에 국한되었고, 언어는 비교적 단순했다. 오늘날 스크립팅은 더욱 널리 사용되며 일부 스크립팅 언어는 응용 소프트웨어 개발에도 사용될 수 있는 최신 기능을 포함하고 있다.

## 개요
스크립팅 언어는 범용 프로그래밍 언어이거나 특정 환경을 위한 도메인 특화 언어일 수 있다. 응용 프로그램에 내장될 때 확장 언어라고 불릴 수 있다.

스크립팅 언어는 높은 추상화 수준에서 작동하는 경우 매우 높은 수준의 프로그래밍 언어로, 특히 메인프레임의 작업 제어 언어의 경우 제어 언어로 불린다.

스크립팅 언어라는 용어는 일반적으로 동적인 고급 프로그래밍 언어를 지칭하는 더 넓은 의미로 사용되기도 한다. 일부는 엄격히 인터프리트되는 언어인 반면, 다른 일부는 일종의 컴파일을 사용한다.
이러한 맥락에서 스크립트라는 용어는 이러한 언어로 작성된 작은 프로그램을 의미한다. 일반적으로 스크립트는 단일 파일에 포함되며 몇천 줄을 넘지 않는다.

스크립팅 언어의 범위는 작고 도메인 특화 언어적인 것부터 크고 범용 프로그래밍 언어적인 것까지 다양하다. 언어는 작고 매우 도메인 특화적인 것으로 시작하여 나중에 이식 가능하고 범용적인 언어로 발전할 수 있으며, 반대로 범용 언어가 나중에 특정 도메인 특화 방언으로 발전할 수도 있다.

## 주목할 만한 언어

* AWK, 텍스트 처리에 사용되며 일반적으로 유닉스 계열 운영 체제에서 사용 가능
* 배치 파일 언어(BAT), 마이크로소프트 윈도우 스크립팅용
* 본 셸, 유닉스 및 유닉스 계열 운영체제 스크립팅용 인터프리트 언어
** 배시
** 콘셸
* C, 타이니 C 컴파일러를 통해
* 그루비, 자바와 유사한 객체 지향 스크립팅
* 자바, JBang 사용
* 자바스크립트 (이후: ECMA스크립트), 원래 웹 브라우저에서 웹 페이지를 동적으로 수정하는 데 국한되었으나, 나중에 널리 이식 가능한 범용 프로그래밍 언어로 확장됨
* 린든 스크립트 언어, 세컨드 라이프 가상 세계 스크립팅을 위한 사용자 지정 확장 언어
* 리스프, 이맥스의 이맥스 리스프를 포함한 응용 프로그램을 위한 범용 및 확장 언어 계열
* 루아, 많은 응용 프로그램에서 사용되는 확장 언어
* 펄, 나중에 범용 언어로 발전한 텍스트 처리 언어; 다양한 응용 프로그램의 확장 언어로도 사용됨
* 파워셸, 마이크로소프트 윈도우, macOS 및 리눅스 스크립팅용
* 파이썬, 범용 및 확장 언어
* REXX, 여러 플랫폼에서 실행되는 범용 언어; 확장 언어로도 사용됨
* 루비, 다중 패러다임 범용 언어
* sed, 텍스트 처리용; 대부분의 유닉스 계열 운영 체제에서 사용 가능하며 다른 운영 체제로 이식됨
* Tcl, 유닉스 계열 환경용으로 1990년대에 인기가 있었음; Tk와 함께 GUI 응용 프로그램 개발에 사용될 수 있음
* TrainzScript, Trainz 철도 시뮬레이터를 위한 사용자 지정 확장 언어
* VB스크립트, 마이크로소프트 윈도우 스크립팅용
* 비주얼 베이직 포 애플리케이션, 마이크로소프트 오피스 응용 프로그램에서 사용 가능한 확장 언어

## 특성
스크립트는 일반적으로 다음 속성을 포함하는 주관적인 특징이다.

### 인터프리트됨
스크립트는 일반적으로 컴파일되지 않는다. 적어도 일반적인 의미에서는 그렇다. 일반적으로 소스 코드에서 직접 인터프리트되거나 바이트코드에서 인터프리트되거나 JIT 컴파일 후 네이티브로 실행된다.

### 짧고 단순함
스크립트는 일반적으로 비교적 짧고 단순하다. 크기나 복잡성에 제한이 없으므로 스크립트는 주관적이다. 분기가 없는 몇 줄의 코드는 스크립트로 간주될 수 있다. 여러 파일로 구성되어 정교한 사용자 또는 하드웨어 인터페이스나 복잡한 알고리즘 또는 멀티프로그래밍을 수행하는 코드베이스는 스크립트로 간주되지 않을 것이다.

### 자동화
스크립트는 일반적으로 사람이 수동으로 수행할 작업을 자동화한다.

### 제한된 언어
주로 스크립팅을 목적으로 하는 언어는 일반적으로 범용 언어에 비해 기능이 제한적이다. 스크립팅 언어는 복잡한 응용 프로그램을 작성하는 기능이 부족할 수 있다.

### 상단에서 시작
일반적으로 스크립트는 코드의 첫 번째 줄에서 실행을 시작하는 반면, 응용 프로그램은 일반적으로 엔트리 포인트라고 불리는 코드의 특별한 지점에서 시작한다.

예를 들어, 자바는 응용 프로그램이 코드의 상단에 있을 필요가 없는 이라는 함수에서 시작하기 때문에 스크립트와 같지 않다. 다음 코드는 에서 시작한 다음 "Hello World"를 출력하는 를 호출한다.


```java
public class HelloWorld {
    public static void printHelloWorld() {
        System.out.println("Hello World");
    }
    public static void main(String[] args) {
        printHelloWorld();
    }
}
```


대조적으로, 다음 파이썬 코드는  함수나 자바가 요구하는 클래스 정의와 같은 다른 구문 없이 "Hello World"를 출력한다.


```python
print("Hello World")
```


### 단일 사용자
스크립트는 종종 실행하는 사람이 생성하거나 수정하지만 특히 게임의 상당 부분이 스크립팅 언어로 작성된 경우처럼 배포되기도 한다. 구글 크롬 T-rex 게임이 대표적인 예이다.

## 역사
초기 메인프레임 (1950년대)은 비대화형이었으며 대신 일괄 처리를 사용했다. IBM의 작업 제어 언어 (JCL)는 일괄 처리를 제어하는 데 사용되는 언어의 원형이다.

최초의 대화형 셸은 1960년대에 최초의 시분할 시스템의 원격 작동을 가능하게 하기 위해 개발되었으며, 이들은 컴퓨터 프로그램 내에서 컴퓨터 프로그램인 셸을 제어하는 셸 스크립트를 사용했다. 캘빈 무어스는 그의 TRAC 언어에서 명령어 대체, 즉 인터프리트될 때 문자열을 스크립트에 삽입하는 명령어를 스크립트에 내장하는 기능을 발명한 것으로 일반적으로 인정받고 있다. 멀틱스는 이를 활성 함수라고 불렀다. 루이 푸진은 1964년경 CTSS용 RUNCOM이라는 초기 명령 스크립트 처리기를 작성했다. MIT의 스튜어트 매드닉은 1966년에 IBM의 CP/CMS용 스크립팅 언어를 작성했다. 그는 원래 이 처리기를 COMMAND라고 불렀다가 나중에 EXEC로 명명했다. 멀틱스에는 CTSS RUNCOM의 파생물인 RUNCOM도 포함되어 있었다. EXEC는 결국 EXEC 2 및 REXX로 대체되었다.

Tcl 및 루아와 같은 언어는 어떤 응용 프로그램에도 내장될 수 있는 범용 스크립팅 언어로 특별히 설계되었다. 비주얼 베이직 포 애플리케이션 (VBA)과 같은 다른 언어는 기본 시스템의 자동화 기능과 강력하게 통합되었다. 새로운 언어를 각 응용 프로그램에 개발하는 대신 이러한 범용 스크립팅 언어를 내장하는 것도 분명한 이점이 있었는데, 응용 프로그램 개발자가 처음부터 언어 번역기를 코딩할 필요성을 덜어주고 사용자가 다른 곳에서 배운 기술을 적용할 수 있도록 해주었다.

일부 소프트웨어는 여러 다른 스크립팅 언어를 통합한다. 최신 웹 브라우저는 일반적으로 브라우저 자체의 확장을 작성하기 위한 언어와 자바스크립트 (ECMA스크립트 방언) 또는 XUL을 포함하여 브라우저를 제어하기 위한 여러 표준 내장 언어를 제공한다.

## 유형
스크립팅 언어는 여러 가지 다른 유형으로 분류될 수 있으며, 유형 간에 상당한 중복이 있다.

### 글루 언어
스크립팅은 종종 오스터하우트의 이분법 또는 "대규모 프로그래밍과 소규모 프로그래밍"에서처럼 시스템 프로그래밍과 대조된다. 이러한 관점에서 스크립팅은 소프트웨어 컴포넌트를 연결하는 글루 코드이며, 이 목적에 특화된 언어를 글루 언어라고 한다. 파이프라인 및 셸 스크립팅은 글루 언어의 전형적인 예이며, 펄은 원래 이 역할을 채우기 위해 개발되었다. 웹 개발은 데이터베이스와 웹 서버 간의 인터페이스 역할을 하는 글루 언어의 사용으로 간주될 수 있다. 그러나 상당한 양의 로직이 스크립트로 작성된 경우, 그것은 "글루"가 아니라 단순히 또 다른 소프트웨어 구성 요소로 더 잘 특징 지어진다.

글루 언어는 다음을 작성하고 유지 관리하는 데 특히 유용하다:
* 명령 셸용 사용자 지정 명령;
* 컴파일된 언어로 구현하는 것이 더 나은 프로그램보다 작은 프로그램;
* 워드 프로세서, 스프레드시트, 데이터베이스, 어셈블러, 컴파일러 등과 같은 응용 프로그램을 실행하기 전이나 후에 파일을 이동하거나 조작하고 운영 체제와 다른 작업을 수행하는 배치 파일과 같은 실행 파일용 "래퍼" 프로그램;
* 변경될 수 있는 스크립트;
* 결국 다른, 일반적으로 컴파일된 언어로 구현될 솔루션의 고속 응용 프로그램 개발.

글루 언어 예시:

* 애플스크립트
* 커피스크립트
* 콜드퓨전
* DCL
* ECL
* 임베디드 커먼 리스프
* 얼랭
* EXEC, EXEC 2
* 자바스크립트, J스크립트
* 작업 제어 언어 (JCL)
* 줄리아
* 루아
* m4
* 펄 (5 및 라쿠)
* PHP
* 파워셸
* 퓨어 (프로그래밍 언어)
* 파이썬
* Rebol
* 레드 (프로그래밍 언어)
* REXX
* NetRexx
* 루비
* 스킴
* Tcl
* 유닉스 셸 스크립트 (ksh, csh, bash, sh 및 기타)
* VB스크립트
* 워크플로 언어
* XSLT

운영 체제 또는 응용 프로그램 구성 요소에 노출된 매크로 언어는 글루 언어 역할을 할 수 있다. 여기에는 비주얼 베이직 포 애플리케이션, 워드베이직, 로터스스크립트, 코렐스크립트, 허밍버드 베이직, 퀵스크립트, REXX, SaxBasic], WinWrap Basic 등이 포함된다. AWK와 같은 다른 도구들도 글루 언어로 간주될 수 있으며, 윈도우 스크립트 호스트 엔진 (윈도우의 기본값인 VBScript 및 JScript, 그리고 Rexx, Perl, Tcl, Python, XSLT, Ruby, Modern Pascal, 델파이, C 구현을 포함하는 타사 엔진)에 의해 구현된 모든 언어도 마찬가지이다. 대부분의 응용 프로그램은 객체 모델 또는 자체 함수를 통해 운영 체제 구성 요소에 액세스하고 사용할 수 있다.

프로그램 가능한 계산기와 같은 다른 장치에도 글루 언어가 있을 수 있다. Windows CE와 같은 PDA의 운영 체제는 일반적인 글루 언어(윈도우 NT, 도스, 일부 유닉스 셸, Rexx, Modern Pascal, PHP, Perl 포함)의 구현 외에도 응용 프로그램을 함께 붙여주는 기본 또는 타사 매크로 도구를 사용할 수 있다. OS 버전에 따라 WSH와 기본 스크립트 엔진(VBScript 및 JScript)을 사용할 수 있다.

프로그램 가능한 계산기는 세 가지 방식으로 글루 언어로 프로그래밍할 수 있다. 예를 들어, 텍사스 인스트루먼트의 TI-92는 공장 기본값으로 명령 스크립트 언어로 프로그래밍할 수 있다. TI-NSpire 계산기 시리즈에 스크립팅 및 글루 언어인 루아를 포함한 것은 이의 후속으로 볼 수 있다. 대부분의 그래프 계산기의 기본 고수준 프로그래밍 언어(대부분 베이직 변형, 때로는 리스프 파생물, 더 드물게 C 파생물)는 많은 경우 그래프, 목록, 행렬 등과 같은 계산기 함수를 함께 붙일 수 있다. 이 문서에서 글루 언어로 나열된 변형에 더 가까울 수 있는 보다 포괄적인 베이직 버전의 타사 구현도 사용할 수 있으며, TI 및 HP 그래프 계산기에서 Perl, Rexx 또는 다양한 운영 체제 셸을 구현하려는 시도도 언급된다. C와 Perl, Rexx, AWK, 셸 스크립트와 Perl, Modern Pascal, VBScript 간을 변환하는 도구와 함께 사용되는 일부 TI 및 HP 기계용 PC 기반 C 교차 컴파일러는 글루 언어로 프로그램을 작성하여 결국 계산기에서 (컴파일된 프로그램으로) 구현할 수 있게 해준다.

### 편집기 언어
많은 텍스트 편집기는 편집기에 내장된 매크로 언어(예: SemWare 편집기 (TSE), Vim)를 사용하거나 외부 구현(예: XEDIT)을 사용하거나 둘 다(예: KEDIT) 사용하여 작성된 매크로를 지원한다. 때때로 텍스트 편집기와 편집 매크로는 CMS의 FILELIST 및 RDRLIST와 같은 다른 응용 프로그램을 제공하는 데 사용된다.

### 작업 제어 언어 및 셸

주요 스크립팅 언어 클래스는 시스템 프로그램의 동작을 시작하고 제어하는 것과 관련된 작업 제어의 자동화에서 파생되었다. (이러한 의미에서 셸은 IBM의 JCL, 즉 작업 제어 언어의 후손으로 생각할 수 있으며, 이는 바로 이 목적으로 사용되었다.) 이러한 언어의 많은 인터프리터는 유닉스 셸 또는 MS-DOS의 `[[COMMAND.COM]]`과 같은 명령줄 인터프리터로도 사용된다. 애플스크립트와 같은 다른 언어는 스크립트를 빌드하기 위해 영어와 유사한 명령어를 사용하는 것을 제공한다.

### GUI 스크립팅
그래픽 사용자 인터페이스의 출현과 함께 컴퓨터를 제어하기 위한 특수 스크립팅 언어가 등장했다. 이러한 언어는 인간 사용자가 사용하는 것과 동일한 그래픽 창, 메뉴, 버튼 등과 상호 작용한다. 이들은 사용자 동작을 시뮬레이션하여 이를 수행한다. 이러한 언어는 일반적으로 사용자 동작을 자동화하는 데 사용된다. 이러한 언어는 키보드 누름 또는 마우스 클릭 시뮬레이션을 통해 제어되거나 터치 활성화 화면을 탭하거나 누르는 방식으로 제어될 때 매크로라고도 불린다.

이러한 언어는 원칙적으로 모든 GUI 응용 프로그램을 제어하는 데 사용될 수 있지만, 실제로는 응용 프로그램과 운영체제의 지원이 필요하기 때문에 사용이 제한된다. 이 제한에 대한 몇 가지 예외가 있다. 일부 GUI 스크립팅 언어는 화면 화소에서 그래픽 개체를 인식하는 것을 기반으로 한다. 이러한 GUI 스크립팅 언어는 운영 체제나 응용 프로그램의 지원에 의존하지 않는다.

GUI가 IBM 워크플레이스 셸(Workplace Shell)에서와 같이 적절한 인터페이스를 제공하는 경우, 예를 들어 Object REXX와 같은 일반 스크립팅 언어를 사용하여 GUI 스크립트를 작성할 수 있다.

### 응용 프로그램별 언어
응용 프로그램별 언어는 다양한 범주로 나눌 수 있다. 즉, 독립 실행형 기반 앱 언어(실행 파일) 또는 내부 응용 프로그램별 언어(포스트스크립트, XML, gscript 등 널리 배포된 스크립트 중 일부는 각각 어도비, 마이크로소프트 및 구글에서 구현)는 응용 프로그램 사용자의 필요에 맞춰진 관용적인 스크립팅 언어를 포함한다. 마찬가지로, 많은 컴퓨터 게임 시스템은 논플레이어 캐릭터 및 게임 환경의 프로그래밍된 동작을 표현하기 위해 사용자 지정 스크립팅 언어를 사용한다. 이러한 종류의 언어는 단일 응용 프로그램을 위해 설계되었다. 비록 특정 범용 언어(예: C를 모델로 한 퀘이크C)와 표면적으로 유사할 수 있지만, 이를 구별하는 사용자 지정 기능을 가지고 있다. 이맥스 리스프는 완전히 형성되고 유능한 리스프 방언이지만, 이맥스의 편집 기능을 확장하는 데 가장 유용한 많은 특수 기능을 포함하고 있다. 응용 프로그램별 스크립팅 언어는 단일 응용 프로그램에 특화된 도메인 특화 프로그래밍 언어로 볼 수 있다.

### 확장/내장 가능 언어
많은 언어들이 응용 프로그램별 스크립팅 언어를 응용 프로그램에 내장함으로써 대체할 목적으로 설계되었다. 응용 프로그래머(C 또는 다른 시스템 언어로 작업)는 스크립팅 언어가 응용 프로그램을 제어할 수 있는 "후크"를 포함한다. 이 언어들은 기술적으로 응용 프로그램별 확장 언어와 동등할 수 있지만, 응용 프로그램이 "공통" 언어를 내장할 때 사용자는 응용 프로그램 간에 기술을 이전할 수 있는 이점을 얻는다. 더 일반적인 대안은 단순히 일반 목적 언어가 특정 도메인에 대한 언어를 수정하지 않고 응용 프로그램을 제어하는 데 사용할 수 있는 라이브러리(종종 C 라이브러리)를 제공하는 것이다.

자바스크립트는 웹 브라우저 내부의 스크립팅 언어로 시작되었으며 여전히 주로 그러한 용도로 사용된다. 그러나 ECMA스크립트로 언어가 표준화되면서 범용 내장 언어로 인기를 얻었다. 모질라 구현인 스파이더몽키는 야후! 위젯 엔진과 어도비 제품인 어도비 플래시 (액션스크립트) 및 어도비 애크러뱃 (PDF 파일 스크립팅용)과 같은 여러 환경 및 응용 프로그램에 내장되어 있다.

Tcl은 확장 언어로 만들어졌지만 파이썬, 펄, 루비와 유사한 역할로 범용 언어로 더 자주 사용되게 되었다. 대조적으로, REXX는 작업 제어 언어로 만들어졌지만 확장 언어 및 범용 언어로 널리 사용된다. 펄은 범용 언어이지만, 오라클 호출 인터페이스가 컴파일된 펄 4 바이너리로 구성된 Oraperl(1990) 방언이 있었다. 그러나 이는 이후 라이브러리(Perl Module), DBD::Oracle로 대체되었다.

다른 복잡하고 작업 지향적인 응용 프로그램은 사용자에게 더 많은 제어 기능과 아무리 정교하더라도 사용자 인터페이스를 통해 얻을 수 있는 것보다 더 많은 기능을 제공하기 위해 내장 프로그래밍 언어를 통합하고 노출할 수 있다. 예를 들어, 오토데스크 마야 3D 저작 도구는 마야 임베디드 언어를 내장하고, 블렌더는 파이썬을 사용하여 이 역할을 수행한다.

더 빠른 기능 추가 또는 수정 및 실행 주기가 필요한 다른 유형의 응용 프로그램(예: 게임 엔진)도 내장 언어를 사용한다. 개발 중에 이를 통해 기능을 더 빠르게 프로토타이핑하고 더 자유롭게 조정할 수 있으며, 사용자가 응용 프로그램의 내부 작동에 대한 깊은 지식을 가질 필요가 없거나 각 조정 후에 다시 빌드할 필요가 없다(상당한 시간이 소요될 수 있음). 이 목적으로 사용되는 스크립팅 언어는 더 일반적이고 유명한 루아 및 파이썬에서부터 엔젤스크립트 및 스퀴럴과 같은 덜 알려진 언어에 이르기까지 다양하다.

## 같이 보기

* 배치 파일

## 각주


분류:프로그래밍 패러다임