스크립트는 보통 컴파일 언어와 대비되는 방식으로 설명되며, 실행 시점에 인터프리터나 다른 런타임이 코드를 읽어 처리하는 언어 또는 코드 스타일을 가리킨다.[1] 다만 실제 언어들은 바이트코드나 가상 머신을 함께 쓰는 경우가 많아, "스크립트냐 컴파일이냐"만으로 완전히 나누기 어렵다.[2]

1. 개요

스크립트라는 말은 좁게는 스크립트 언어를 뜻하지만, 넓게는 자동화용 코드, 웹 페이지의 동적 동작, 셸 환경의 제어처럼 특정 실행 환경을 보조하는 코드까지 포함해 쓰인다.[7] 이런 용법은 개발자가 응용 프로그램의 핵심 로직을 직접 바꾸지 않고도 행동을 빠르게 조정할 수 있게 해 준다.[6]

이 때문에 스크립트는 프로그래밍 언어 전체를 하나의 규칙으로 묶기보다, "즉시 수정하고 즉시 시험해 보는" 실행 경험을 설명하는 말에 가깝다.[4] 교육 현장이나 실무 문서에서는 정의를 지나치게 단순화하면 오히려 컴파일러인터프리터의 차이를 흐리게 만들 수 있다.[2]

2. 실행 방식

전통적인 설명에서 컴파일 언어는 소스 코드를 미리 기계어 또는 중간 표현으로 바꾸고, 인터프리터 언어는 실행 시점에 줄 단위로 해석하는 방식으로 대비된다.[4] 그러나 현대 언어는 두 방식을 섞어 쓰는 경우가 많아서, 언어 이름만 보고 실행 모델을 단정하기는 어렵다.[5]

예를 들어 자바파이썬은 교육 자료에서 서로 반대편에 놓이곤 하지만, 실제로는 구현체와 실행 환경에 따라 다양한 층위를 가진다.[2] 그래서 스크립트라는 범주를 이해할 때는 "무슨 언어인가"보다 "어떤 실행 경로를 거치는가"를 같이 보는 편이 더 정확하다.[4]

3. 역사와 확산

컴퓨터 프로그래밍의 초기에는 저수준 언어가 중심이었지만, 시스템이 복잡해지고 작업 자동화 수요가 커지면서 더 가볍고 빠르게 수정할 수 있는 언어가 필요해졌다.[1] 이런 흐름 속에서 스크립트는 개발 생산성을 높이는 실용적인 선택지로 자리 잡았다.[7]

Lua는 대표적인 확장 언어 사례로 자주 언급되며, 기존 시스템 안에 넣어 동작을 유연하게 바꾸는 데 적합하다.[6] 이후 자바스크립트 같은 언어가 웹 브라우저에서 널리 쓰이면서, 스크립트는 단순 보조 도구를 넘어 사용자 경험을 직접 바꾸는 핵심 수단이 되었다.[7]

4. 웹과 자동화

웹 환경에서 스크립트는 정적인 문서를 상호작용 가능한 화면으로 바꾸는 역할을 해 왔다.[1] 브라우저 내부에서 실행되는 자바스크립트는 버튼 반응, 폼 검증, 페이지 갱신 같은 기능을 담당하며, 같은 언어가 서버 측 환경까지 확장되는 계기를 만들었다.[7]

이런 특성 때문에 스크립트는 웹뿐 아니라 반복 작업 자동화, 데이터 가공, 테스트 보조 같은 영역에서도 널리 쓰인다.[6] 작성과 실행의 간격이 짧을수록 작은 실험을 빠르게 반복할 수 있어서, 스크립트는 프로토타입과 운영 도구 양쪽에서 유용하다.[4]

5. 보안과 제약

스크립트는 편리하지만, 사용자의 의도와 무관하게 실행될 경우 보안 문제가 될 수 있다.[3] 그래서 웹 브라우저는 보안 수준에 따라 스크립트 실행을 제한하거나, 특정 기능을 아예 비활성화하는 옵션을 제공한다.[3]

특히 Tor 브라우저처럼 보안 중심의 환경에서는 스크립트 허용 여부가 사용자 보호의 핵심 설정이 된다.[3] 이 설정은 웹 기능의 일부를 희생하는 대신, 악성 코드나 추적 스크립트의 실행 가능성을 줄이는 데 초점을 둔다.[3]

6. 교육적 관점

교육 현장에서는 컴파일 언어인터프리터 언어를 단순 이분법으로 가르칠 때 혼란이 생기기 쉽다.[2] Python과 Java를 예로 들면, 언어 자체의 성격과 구현체의 실행 방식을 분리해서 보아야 개념이 정확해진다.[2]

따라서 스크립트를 설명할 때는 "가벼운 언어"라는 이미지보다, 실행 단계가 어디서 이루어지고 어떤 도구가 중간에서 개입하는지를 함께 설명하는 편이 낫다.[5] 이런 접근은 바이트코드와 가상 머신을 포함한 현대적 실행 모델을 이해하는 데도 도움이 된다.[1]

7. 관련 문서

8. 인용 및 각주

[1] The rise of scripting languages and the fall of Java, Righto, Wwww.righto.com(새 탭에서 열림)

[2] Definitions of “interpreted language” and “compiled language” with explanations of why Python and Java are or are not such languages, Python.org discussion, Ddiscuss.python.org(새 탭에서 열림)

[3] Security levels, Tor Project Manual, Ttb-manual.torproject.org(새 탭에서 열림)

[4] Interpreted vs Compiled Programming Languages: What's the Difference?, freeCodeCamp, Wwww.freecodecamp.org(새 탭에서 열림)

[5] Difference between Compiled and Interpreted Language, GeeksforGeeks, Wwww.geeksforgeeks.org(새 탭에서 열림)

[6] The evolution of an extension language: a history of Lua, Lua.org, Wwww.lua.org(새 탭에서 열림)

[7] The rise of scripting languages and the fall of Java, Righto, Wwww.righto.com(새 탭에서 열림)