초록

프로그래밍 언어의 효용와 그 교육에 관한 문제는 항상 학문적이고 이론적인 배경에서 주로 논의되어 왔다. 그런데 최근 학원 교육의 현장 일선에서 Javascript라는 웹 브라우저의 스크립트 언어를 둘러싼 독특한 현상이 관찰되었다.

프로그래밍에 대한 인식이 전무한 미술 디자이너들이 웹 개발에 참여하기 위해 전산 기능을 학습할 때, 가장 처음으로 프로그래밍 개념을 접하는 것은 웹 페이지의 부가 동작을 위한 Javascript 작성을 배울 때였다. 그리하여 Javascript 학습을 시초로 많은 디자이너들이 본격적인 프로그래밍을 익히게 된다.

Javascript는 교육 인력과 자원이 이미 널리 확산 되었으며 언어 자체의 구현 비용이 적어 총 도입 비용이 매우 낮다. 또 언어의 구조가 쉽고 융통성 있으면서도 순차적 프로그래밍에서 구조적 프로그래밍, 객체 지향 프로그래밍에 이르기까지 여러 가지 단계를 자연스럽게 아우르며 연결하도록 되어 있다. 한편 Javascript는 실용적이고 상업적인 응용이 즉각 가능하며 그 활용 분야가 넓고 멀티미디어 자료 처리에 강하다.

현재 Javascript는 구조상, 기능상 한계점이 있음에도 불구하고 이상의 특성들은 Javascript를 교육용 언어로 보급하는데 아주 강한 장점이다. 이는 프로그래밍 언어 교육 자체를 보다 현실화 시키는 수단이 될 수 있다.

학원교육 현장에서 발견된

Javascript의 프로그래밍 교육용 언어로서의 가치

I. 서론

최근 국내 정보 기술 산업의 생산량은 연간 150조원 이상으로 증가함에 따라[1], 정보 기술 산업은 그 소비 계층과 향유 분야가 사회 전체의 각 분야로 확대되고, 전 분야에 있어서 다양한 응용 분야가 국민생활의 일상으로 대중화되어 가고 있다.

이와 관련하여 최근 정보 기술 산업 인력 교육의 현장에서 발견되는 특기할 만한 특징은, 정보 기술 산업 인력의 공급 경로 및 인력 성향의 변화와 그에 따른 교육 내용과 방법의 변화이다.

정보 기술 산업의 외연 확대의 결과, 다수의 정보 기술 산업 종사 인력은 더 이상 정보 기술 전공자 및 전담자가 아니며, 각 응용 분야의 전문가, 기술자로서 정보 기술 기능을 추가적으로 획득하여 정보 산업에 참여하고 있게 되었다.

이런 상황에서 나타나는 인력의 교육 내용과 방법은 정보 기술 관련 정책 입안자 및 정보 기술 전공의 의사 결정자들이 스스로 경험했던 전통적이고, 고전적인 형태와 달라지게 된다.

전통적으로, 정보 기술 산업 종사 인력은 정보 기술 전공자와 전담자가 각 응용 기능을 추가적으로 보유하여 운용하는 것이었다. 즉, 정보 체계 기술자 및 전산 프로그래머가 산업의 특징에 맞는 작업, 실무, 예술 기능을 습득하거나 고려하여, 사업상에 필요한 특정 개발 과정을 수행하는 형태였다.

그러나 근래의 현실은 이와는 반대이다. 정보 기술 자체가 고도화되어 표준화 되고 대중화되면서, 일반 인력의 전반적인 정보 기술에 대한 인식이 보편화되고 기술에 대한 접근성이 향상되었다. 따라서 이제는 동종 업계에서 전문화된 경쟁력을 확보하기 위하여 특정 실무 담당자 및 예능상의 전문가들이 전산 기능을 취득하고, 개발 과정에서 정보 기술 전공자의 협조를 일부 구하는 형태가 보편 다수로 자리 잡아가고 있다.

그림 고전적인 디지털 컨텐츠 제작 방식

그림 현재의 디지털 콘텐츠 제작 방식

이러한 특징적인 상황에서 가장 주요한 특정 분야를 꼽게 된다면, 단연 인터넷 컨텐츠 개발 분야이다. 인터넷 컨텐츠 개발은 최근 급성장해온 정보 통신 관련 산업 분야 중에서 일반 대중과의 접촉에 전면에 나서 있을 뿐 아니라, 동시에 산업 규모의 위상에서도 거대한 규모로 성장하였다.

[2]

표 I 인터넷 컨텐츠 증가 지표로서

도메인 수 증가 추세

인터넷 컨텐츠 개발은 □HTML 문서□로 상징되는 고도로 정형화되고 보편화되어 있으면서도, 그 기술적 진입 장벽이 낮은 정보 통신 관련 산업 기술의 대표적인 한 분야이다. 따라서 이 분야가 확보하게 되는 대부분의 인력은 정보 기술상의 기술적 우열보다는 응용 실무 능력 즉, 컨텐츠 내용 자체의 독특함이나 컨텐츠 디자인 기술에서 그 경쟁력을 구비하게 된다.

따라서 □웹디자이너□와 □웹마스터□로 대변되는 다수의 인터넷 컨텐츠 개발자들은 주로 전문적인 정보 처리 기술을 전혀 접해보지 못한 출판, 디자인, 그래픽 기능인, 비 전산전공의 실업계 고등학교, 전문대학, 4년제 대학교 졸업생 및 미술, 음악, 영상 관련 전문가군으로부터 다수가 확보된다.

이처럼 웹디자이너, 웹마스터 인력의 교육은 고전적인 정보 기술 관련 인력 확보 및 교육과는 상반되는 근래의 인력 성장 경향과 가장 잘 부합하는 분야이다. 이러한 특성 때문에, 이러한 비 전산 전공자들에 대한 정보 기술 교육을 전담하는 학원 교육의 현장에서, 매우 독특한 몇 가지 구체적인 교육 기술 및 교육 정책이 자연 발생적으로 나타나게 되었다.

그 중에서도 무엇보다 주목할만한 것은 'Javascript'라는 웹 문서의 부가적인 편이 향상을 위한 웹 브라우저 스크립트 프로그래밍 언어 교육의 실제이다.

실제 취업 교육 및 학원 교육의 현장에서 대다수의 교육생들은 프로그래밍에 대한 개념과 인식 자체를 갖고 있지 않으며, 프로그래밍과 관련된 논리적이고 단계적인 문제 해결 기법 및 알고리즘에 대해 완전히 무지하고 생소하다.

이러한 상황에서 Javascript라는 스크립트 언어를 웹디자인에서 필연적으로 사용되는 최소한의 편이 기능을 구비하기 위하여 반드시 학습하여야 한다. 바로 이 Javascript라는 지극히 이용 목적이 제한된 언어를 학습하는 과정에서 이들은 최초로 프로그래밍의 의미와 논리, 현실적 실습을 경험하게 된다.

이러한 자연 발생적인 현실은 프로그래밍 언어 교육 및 논리적 문제 해결 기법 교육에 있어서 매우 독특한 현상으로 취급할 수 있다. 이는 일반적인 프로그래밍 언어 교육의 통념에 어긋나는 것이다.

) 이러한 학원 교육 현장의 독특한 상황은, 2001년 여름 기간동안 서울 강남구 소재  내외 컴퓨터 학원에서 웹디자이너 과정 시간 강사로 재직하면서 최초로 파악하였다. 그 후 각급 학원의 교육 과정을 살펴보고 전임 강사들을 면담 조사하는 과정에서 보다 구체적으로 배경을 이해할 수 있었다.

근래까지 프로그래밍 교육의 실제란, 상용이고 학술적이며 동시에 고도로 확립된 구조를 갖춘 범용 언어를 재료로 하여 수학적, 논리적 기반을 기초로 추상적인 기호성부터 교육해 나간다는 것이 기존의 일반적인 인식이었다.

이러한 기존의 일반적인 인식에서는 찾아 볼 수 없었던 인상적인 장점들과 제안을 비 전산 전공자를 대상으로 하는 웹콘텐츠 개발자 교육 과정에 있어서 Javascript 교육에서부터 관찰할 수 있었으며, 본문에서는 이러한 점들을 보편적으로 적용하기 위한 몇 가지 논점들에 대하여 살펴보고자 한다.

II. 본론

II.1. 초등 프로그래밍 언어의 필요성

초등 프로그래밍 언어 교육(elementary programming language education)이란, 특정한 전문적인 목적이나 전산 기술상의 독특한 응용을 최대한 배제하고, 전산 문제 해결을 위한 최소한의 기초 개념과 기능을, 이에 대한 경험이 없는 학습자들에게 최초로 교육하는 과정을 일컫기 위해 본문에서 사용하게 될 용어이다.

실례를 든다면, 대부분의 이공계 대학에서 1학년 기초 필수 과목으로 교육하게 되는 C, C++나 Java를 교재로 한 프로그래밍 개론 과목이나, 실업계 고교, 과학고등학교의 부가 학습 내용으로서 Visual Basic, C 언어 교육이 초등 프로그래밍 언어 교육의 범주에 포함된다. 또 북미 일부 중등교육 과정 및, 아르헨티나 일부 학교의 중등 교육과정에 포함된 Pascal을 교재로 하는 프로그래밍 교육, 혹은 초등학교 과외활동으로서의 기초 프로그래밍 언어 교육이나, 취업 교육상 IT 전문가 교육을 위한 최초 프로그램으로서 기초 프로그래밍 언어 등을 지칭하는 것이 초등 프로그래밍 언어 교육이다.

이전의 초등 프로그래밍 언어 교육은 그 연원을 역사적으로 최초의 전산 작업이 활용되었던 분야인 과학 기술상의 문제 해결에 그 1차적인 초점을 두고 있었다. 즉 초등 프로그래밍 언어 교육은, 장차 □전산 능력(computing power)을 수학적으로 표현되는 과학 문제를 풀이하는 데 적용하기 위한 능력을 갖추게 하는 것□이었다.

따라서 초등 프로그래밍 언어 교육은 이공계 대학의 기초 과목으로서의 위상과 가장 잘 부합하는 형태였으며, 초등 프로그래밍 언어 교육 자체도 그 범위가 이러한 연원의 주변에 한정되어 있었다. 타분야의 초등 프로그래밍 언어 교육도 이것을 비판 없이 각분야에 일괄적으로 적용되는 양상이 짙었다.

하지만 최근 정보 기술과 관련 산업이 산업 전면으로 확대되고 대중 생활의 일상으로 도입되면서 이러한 고래의 초등 프로그래밍 언어 교육 방침은 그 설득력을 잃기 시작했다.

더 이상 정보 기술이 고도의 계산 능력을 활용하는 희귀한 것이 아니므로, 기술적이고 학술적인 활용보다는 사무에 실용적이고 생활 예능에 문화적으로 이용하는 경우가 더욱 중요한 활용 형태로 자리 잡았다. 여기에 60년대에 태동하여 70년대를 거쳐 80년대 이후에 일반에게까지 널리 자리잡은, 취미와 열정으로 프로그래밍과 전산 운용 자체의 묘미를 즐기는 소위 □해커 정신(hackerism)□까지 상당한 영향을 미치면서, 초등 프로그래밍 언어 교육은 이전 보다 대중 교양의 영역에 가까운 것으로 인식되는 편이 보다 현실적으로 비치게 되었다.

따라서 최근의 초등 프로그래밍 언어 교육의 가치는 대체로 다음 네 가지로 요약된다.

첫 번째는 산업의 기술 고도화에 따른 학교 교육 및 대중적 인적 자원 개발을 위한 가치이다.

앞서에도 언급하였으며, 수많은 다른 자료들이 제시하다시피, 최근의 정보 기술 관련 산업의 경제적 가치와 사회 전반에 미치는 파장은 다른 어떤 것보다 중요한 수준으로 부각되었다. 따라서 공교육과 일반 교양 교육을 포함하는 교육 전반에 있어서 정보 기술 산업을 지원하고, 정보 기술 문화의 발전을 지향하는 교육 환경의 개발은 매우 중요하다.

이는 현대 우리 교육 전반에 등장한, 새로운 정치 사상 체계를 위한 윤리, 사회 교과 및 시민 단체, 언론 출판의 민주주의 교육과, 근대 이후 경제적 문화적 증진을 도모하기 위한 전면적인 국제 교류와 연계되는 영어 및 기타 외국어 교육과 비슷한 위상으로 이해할 수 있는 것이다.

따라서 초등 프로그래밍 언어 교육은, 논리적이고 체계적으로 동작하는 정보 처리 체계의 바탕이 되는 기저를 널리 보급하는 한 방편이 될 수 있다. 이는 모든 직업과 학문에 있어서 영어를 비롯한 외국어 활용능력이 중요한 의미를 갖는 이전까지의 교육-산업 연관 관계와 매우 흡사하다.

모든 사회 문화 활동 및 산업 제반과 학문의 분야에서 정보 기술은 어디에나 적용되는 도구로서 나날이 그 활용 구조가 고도화되고 있으므로, 이러한 점에 보다 쉽게 적응하고, 여기에 대한 개발 능력의 잠재력을 확보하는 기초로서 초등 프로그래밍 언어 교육이 필요하게 된다.

구체적으로 프로그래밍 작성에서 얻어지는 정보 기술의 작동과 프로그래밍 자체에 대한 근본적인 개념을 습득하고, 인간적이고 추상적인 문제를 구체화 시켜서 전산화 할 수 있는 것으로 환원하는 능력, 정보 처리 기술상의 작업을 수행하는 데서 만날 수 있는 다양한 역경과 고난점들을 직접 경험해 보는 것, 이러한 문제를 해결할 수 있는 고유한 작업 방법을 익히는 것, 보다 실용적으로 참조, 함수, 객체, 연산자, 변수, 자료 구조와 갖은 다양한 기초 전산 개념들에 대한 체계적인 이해를 널리 교육할 수 있는 것이다.

두 번째는 학문의 발전에 따른 교육 전체의 기초적인 사고력 창의력 향상을 위한 전반 교육 재료로서의 가치이다.

과학과 기술의 발전을 필두로 하여, 학문과 사회 제도 및 업무 체계를 포괄하는 현대의 모든 지적 문화는 그 어느 때보다도 높은 수준으로 성장했다. 따라서 교육과 학습에 대한 부담 또한 증가하였으며, 이에 따라 다양한 교수 방법과 학습법에 대한 연구와 시도도 병행되고 있다.

이러한 측면에서 프로그래밍 언어의 기초적인 학습과 실습은 논리력과 사고력, 창조력을 기르는 유용한 재료가 될 수 있다. 이러한 생각은 비교적 예전부터 널리 그 설득력을 인정 받고 있는 것이었지만, 현실적인 적용의 문제에서 여러 가지 어려움이 많았다.

하지만 최근의 전산 자원의 보급률은 충분히 증가하여, 일반 대중 제반과 공교육 대상자인 학생들이 기초 학력과 창의력 증진을 위해 프로그래밍 언어를 단순한 기술적인 대상이 아니라, 지적인 매개체로 활용할 수 있는 수준이다.

따라서, 논리적인 사고력과 문제 해결을 위한 체계적인 과정, 알고리즘에 대한 개념과 사고 및 기호 표현을 교육하는데 프로그래밍 언어는 매우 효과적인 재료로 다시 부각되고 있다.

특히 프로그래밍 언어와 전산 문제 해결 기법에서 느낄 수 있는 몇 가지 독특한 개성들은 언어로 설명하기 어려운 많은 논리학 용어들과 철학적인 개념들을 이러한 분야에 낯선 학습자들에게 직관적으로 제시할 수 있는 뛰어난 특성을 갖고 있다.

세 번째 실제적인 기술교육과 즉각적인 현장 투입을 위한 교육으로서의 가치이다.

모든 정보 기술과 전산 작업들은 대체로 단순 암기식 지식이나 경험적 반복에 의해 얻어지는 숙달 보다는 운용 체계에 대한 확실한 이해와 논리적 활용이 훨씬 더 뛰어난 효율을 지닐 때가 많다. 이는 실제적인 전산 개발 작업에서부터, 단순한 컨텐츠 개발, 사무 자료 처리, 문서 작성, 심지어는 가장 기초적인 인터넷을 통한 정보 수집이나 사교 활동의 거의 모든 부분에서 관찰된다.

따라서 초등 프로그래밍 교육은 모든 전산 작업에 있어서 일부 그 개념과 원칙이 도입될 필요가 있다. 또 실제로 모든 전산 작업이 이러한 프로그래밍의 요소들을 포함하고 있기도 하다.

보다 현실적으로 프로그래밍 교육에 있어서 무엇보다 주요한 위치를 차지하고 있는 영역은 단연 프로그래밍 교육 자체가 그 핵심으로 자리 잡고 있는 고전적인 과학 기술 연구의 기초 혹은 전산 개발 작업의 기초 교육이다. 이공 분야의 고도화와 전산 이용 능력은 갈수록 그 중요성이 높아지고, 산업구조상에서 차지하는 경제적인 의미가 증가하는 만큼, 초등 프로그래밍 교육의 강화가 장차 전문적인 전산활용에 있어서 적응 능력과 연구 개발 능력의 기초를 배양하는데 큰 기여를 할 것이다.

과학적인 영역과 구체적인 정보 활용 능력을 포함하는 기술적인 영역은 전체 정보 기술 산업의 중추로서 자리 잡고 있는 분야이므로, 현재의 초등 프로그래밍 교육에서 차지하고 있는 중요성 만큼이나, 앞으로 정보 기술 산업이 발전함에 따라 성장할 부피도 클 것이다.

II.2. 프로그래밍 언어 교육 교재로서 Javascript가 갖는 경제성

그림3 Javascript의 장점 정리 도표

Javascript는 홈페이지를 표시하는 데 사용되는 HTML문서의 일부에 포함되게 되는 문장들의 형태로, 클라이언트 즉 홈페이지를 보고 있는 사람의 웹 브라우저 상에서 실행되는 프로그램 명령문들을 말한다. 이러한 명령문들을 주로 원활한 웹사이트의 동작을 돕기 위해 만들어진 것으로, 현재 거의 대부분의 컴퓨터 기종, 거의 모든 종류의 웹 브라우저에서 원활하게 작동하고 있다.

Javascript는 그 연원을 LiveScript에 두고 있다. 과거 넷스케이프 네비게이터(Netscape Navigator)라는 현 넷스케이프사가 개발한 웹브라우져의 과거 버전은 LiveScript라는 자체적인 간단한 스크립트 언어를 정해두고, HTML문서에 그런 스크립트 언어가 발견되면 사소한 동작을 자동으로 하도록 되어 있었다. LiveScript는 웹사이트를 흥미진진하게 만들 수 있는 손쉬운 방법이었으며, 동시에 당시에 넷스케이프 네비게이터가 널리 퍼졌으므로, 어느 정도 보급되었다.

1995년 넷스케이프 사와 선 마이크로시스템즈(Sun Microsystems) 사는 전략적 제휴를 체결하면서, 넷스케이프 사는 자바(JAVA)라는 선 마이크로시스템즈 사에서 개발한 프로그래밍 언어로부터 몇 가지 편리한 점을 LiveScript에 추가 했다. 그리고, 전략적 제휴의 일환으로 이미지 전략을 위하여, LiveScript의 이름을 Javascript라고 바꾸어 붙이게 되었다.

이후, Javascript는 더욱 널리 쓰이게 되었으므로, 넷스케이프 사가 개발한 웹 브라우저가 아니더라도, 제대로된 웹 서핑을 위해서는 당연히 Javascript를 지원해야 하는 시기가 오게 되었다. 당연히 마이크로소프트사의 인터넷 익스플로러역시 Javascript를 지원하게 되었고, 인터넷 익스플로러의 점유율이 넷스케이프 네비게이터를 훨씬 능가하는 최근에는 인터넷 익스플로러의 Javascript 기준이 도리어 널리 통용되는 표준으로 상당수에 인식 되기에 이르렀다.

이러한 개발-발전 배경에서 직접적으로 연유하는 Javascript가, 교육용 프로그래밍 언어로서 갖게 되는 가장 확연한 경쟁력은 바로 그 가격에 있다.

일반 가정 사용자와 개인 사용자가 가장 쉽게 접할 수 있는 운영체제가 마이크로소프트 윈도우즈이며, 이 환경에서 구동할 수 있는 프로그래밍 개발 도구 중에서 가장 대중적인 것은, 소위 Visual C++ 혹은 Visual Basic등이 보편적이고 저렴한 교육용으로 쓰일 수 있는 개발도구이다. 최신 버전인 Visual C++ .NET과 Visual Basic .NET 개인용 판매판의 경우 1개 패키지의 가격은 원칙적으로 100달러 이상로 책정되어 있다.

2002년 2월 14일 기준 109달러 가격 책정.

[3]

표II 각종 개발 도구들의 정식 판매 가격

(www.softwin.co.kr 제시 가격 기준)

또 마이크로소프트 사와 프로그래밍 개발 도구 시장에서 일정 선상의 위치를 고수하며 경쟁을 벌이고 있는 볼랜드 사도 한국 시장에서 정가 240000원, 학생용 버전을 50000원 이상에 발매하는 등 소프트웨어 개발 도구 자체의 판매 가격은 상당히 높은 편이다. 이를 채택하여 수십만명, 수백만명 규모의 대대적인 초등 프로그래밍 교육 보급 활동을 펼치고자 한다면, 거기에 소요되는 비용은 엄청날 것이다.

이러한 높은 가격은 대체로 상업용 프로그램을 개발하기 위한 편리하고 직관적인 개발환경(IDE), OWL과 MFC로 대변되는 방대한 지원 라이브러리, 그리고 강력한 디버깅 도구들을 지원하는 데 대한 대가이다. 그런데 이런 강력한 기능들은 처음으로 프로그래밍을 접하는 학습자들에게는 전혀 사용되지 않는 쓸모 없는 기능들이많다.

따라서, 이러한 소프트웨어 개발 도구를 초등 프로그래밍 교육 교재로서 구입하는 것은 애초에 소프트웨어 개발 도구 자체가 가진 역할과 기능 활용에도 부합하지 않는 것이고, 경제적으로도 매우 비효율적이다. 그럼에도 불구하고 실제로 현장에서 Visual Basic등은 초등 프로그래밍 교육 교재로 어느 정도 사용되고 있는데, 이것은 실무 프로그래밍과 빨리 연계시킬 필요가 있는 사설 학원의 교육 과정에서 주로 나타난다. 이 때 실제적으로 소프트웨어 구입에 많은 비용을 사용하고 있기도 하다.

다음 수준에서 고려할 수 있는 것은 널리 알려진 범용 프로그래밍 언어에 대한 다양한 공개 컴파일러를 도입하는 것이다. 대체로 이 경우 C나 C++계열의 컴파일러가 대중적으로 퍼져 있다. 대표적으로 유명한 것은 GNU 소프트웨어의 일군인 GCC 계열 컴파일러들과 볼랜드 사가 공개한 Turbo C와 Turbo C++를 꼽을 수 있다.

이런 공개 컴파일러들은 무료로 사용할 수 있으면서도, 가장 널리 쓰이는 프로그래밍 언어들을 교육할 수 있으므로, 실제 이공계 대학 교육의 현장에서 프로그래밍 언어 교육 교재로 자생적으로 채택되고 있다.

하지만 단순한 공개 컴파일러의 구입 비용은 소요되지 않을 지라도, 총도입비용(TCO)의 관점에서 보면 비용의 크기는 크다.

이 경우, 각 컴파일러들을 수행할 수 있는 환경이 통일되어 있지 않고, 하나의 컴파일러가 일반 개인 사용자와 비전공자에게 폭넓은 지지를 받는 경우가 드물다. GCC 계열을 제외하면, 이러한 컴파일러를 보급하고 사용하는데는 실제적인 제약이 있다. 그리고 컴파일러 상의 미묘한 차이들과 실행 환경의 차이 때문에 비록 동일한 프로그래밍 언어로 프로그램을 작성했다 하더라도, 서로 다른 컴파일러에서 수정, 수행하고자 할 때에는 상당히 귀찮은 수정 작업이 수반되는 비용 요소를 갖고 있다.

무엇보다 이런식으로는 여러 기종의 컴퓨터, 다양한 운영 체제 환경에서 공통적으로 프로그래밍 작업을 수행할 수가 없다. 대표적인 예로, 수많은 대학은 Unix계열 시스템을 연구 목적으로 사용하고, 학습 대상자인 학생들은 MS 윈도우즈 기반의 개인용 컴퓨터를 보유하고 있는데, 이 경우 양쪽에서 동일한 컴파일러를 사용하거나, 초심자가 아무런 제약 없이 서로 다른 두 환경에서 프로그래밍 작업을 하기란 쉬운 일이 아니다.

따라서 학교 교육 등의 폭넓은 초등 프로그래밍 교육으로 널리 특정 언어 혹은 개발 도구를 보급시키는데는 상당한 비용이 소모될 수 있다. 또 일정 비용을 투자한다고 해도, 그 보급 정도에는 한계가 있게 된다. 공개된 컴파일러라고는 하지만 아직까지는 전국 각급에 있는 방대한 양의 컴퓨터 중에서 극히 일부에만 설치되어 있다고 할 수 있으므로 당장의 현실에서 그 접근성도 여실히 떨어진다 할 수 있다.

그 다음 수준으로 생각해 볼 수 있는 것은 JAVA이다. JAVA는 이미 기성 프로그래밍 언어와 함께 개발 대열에 확고히 자리잡았을 정도로 그 기반이 튼튼하고 활용도가 높은 데 비해, 다른 컴파일러와는 다른 수행 특성상, 특정한 작업 환경에 얽매임 없이 대다수의 기종과 대다수의 운영체제에서 프로그래밍 작업을 수행하고 결과를 확인 할 수 있다.

하지만 JAVA 역시 앞서 언급한 문제점에서 완전히 자유롭지는 못하다. JAVA로 작성되어 컴파일된 프로그램을 구동하는데 필요한 JDK가 설치되어 있지 않은 컴퓨터가 압도적으로 많으므로 프로그래밍 작업의 접근성이 떨어지고, JDK를 설치하는데 드는 노력이 대규모 초등 프로그래밍 교육 프로그램에서는 무시하지 못할 정도로 크기도 하다. 그러나 JAVA를 초등 프로그래밍 교육 교재로 널리 채택하는데 있어서 가장 큰 경제적 비용상의 문제점은 또 다른 데에 있다.

앞서 언급한 여러 가지 프로그래밍 도구와 컴파일러들은 대체로 학술적으로 널리 공개되고 통용되는 프로그래밍 언어를 대상으로 하는 특정 소프트웨어였다. 즉 널리 퍼져 있는 C++라는 통용되는 다소 학술적인 느낌이 강한 □언어 자체□라는 개념이 있고, C++로 편리하게 프로그램을 개발할 수 있는 개발 환경과 지원 라이브러리로서 마이크로소프트사가 개발한 Visual C++, 볼랜드 사가 개발한 C++Builder, Turbo C++, GNU의 일환으로 나온 GCC의 C++가 존재하는 것이다.

하지만 이에 비해 JAVA는 프로그래밍 □언어 자체□ 역시 선 마이크로시스템즈라는 하나의 상업 회사가 완전히 개발하고 소유하고 있다. 비록 JAVA로 프로그램을 만드는 도구인 JDK를 무료로 구할 수 있을 지언정, JAVA라는 언어의 표준과 나아갈 방향, 활용은 전적으로 선 마이크로시스템즈에게 태생적으로 독점될 수 밖에 없다.

이런 점은 단순히 짧은 기간 동안 실용에서 사용될 응용 프로그램을 개발하는데는 대수롭지 않은 문제일 수 있지만, 폭넓은 차원에서 초등 프로그래밍 언어로서 보급하는데는 중대한 부적합성이다.

초등 프로그래밍 언어 교육은 기본적으로 실용적인 부분을 고려하는 학문적인 차원에서의 프로그래밍 교육이고, 모든 종류의 논리적 문제 전개와 전산 활용의 바탕 교양이 되는 순수성을 보존할 필요가 있는 것이다. 즉 순수한 의도에서 자연적인 협의를 거쳐 모두의 표준으로 자리잡은 독점으로부터 자유로운 대상을 추구해야 한다.

그런데, 초등 프로그래밍 언어 교육의 교재로서 특정한 회사가 소유하는 상업 언어를 채택하여 보급한다면, 이는 어떤 학습지 회사가 펴낸 수능 언어영역 문제집을 전국 고등학교 국어 교과서로 채택하도록 하는 것이나 다름 아니다.

실제로 최근 선 마이크로시스템즈는 JAVA를 기초로한 J2EE와 이에 연계되는 상업적인 네트워크 활용 구조를 구축 보급함으로써, 업계에서 독점적인 위상을 확보하고자 하고 있다.

이상의 많은 다른 대안들에 비해, Javascript는 차별화되는 독특한 의미를 지니고 있다.

Javascript는 웹 브라우저 상에서 작동되는 인터프리터를 통해 수행되는 프로그래밍 환경이다. 즉 Javascript는 웹 브라우저가 읽어 들여서 수행하게 되는 스크립트 언어의 형태를 갖고 있으므로, Javascript를 지원하는 웹 브라우저가 작동되기만 하면, 그 어떤 종류의 시스템에서도 사용할 수 있다.

최근의 거의 모든 컴퓨터들이 인터넷과 WWW를 사용할 수 있으므로, 대부분의 컴퓨터들은 웹 브라우저를 구동시킬 수 있으며, 또 절대 다수의 웹 브라우저는 Javascript를 지원하고 있다. 그렇기 때문에, 종류에 관계없이 웹 브라우저가 설치된 시스템을 갖추고 있기만 하면 어떠한 추가 비용도 없이 Javascript를 즉시 사용할 수 있다.

단순히 Javascript를 사용하는 데 비용이 들지 않을 뿐 아니라, Javascript로 작성된 프로그램은 어떤 다른 운영체제, 어떤 다른 기종, 어떤 다른 컴퓨터에서도 수정 없이 사용될 수 있다. 특정 웹 브라우저에 극히 의존적인 명령이나 라이브러리를 끌어와 사용하지 않는 이상 이 점은 절대적이다. 따라서 프로그램의 이식 비용이 사실상 없으며 프로그래밍 작업 환경에 대한 접근 비용도 없다.

다시 말해서 작업자가 간단한 반복 계산을 계산기로 하기보다는 조직적으로 수행하여 답을 출력하고자 할 때나, 문득 떠오른 아이디어를 구현해보고자 할 때, 간단한 데이터들을 정리 계산하여 처리하는 프로그램을 만들고 구동해서 결과를 보고자 할 때 등의 사소하면서도 급한 경우에, 아무런 번거로움 없이 언제 어디서건 그저 가장 가까운 곳에 있는 컴퓨터에서 어떠한 설치 작업 없이 지금 그대로의 상황에서도 Javascript로 프로그램을 작성하고 수행할 수 있다는 뜻이다.

마지막으로 Javascript의 탄생 배경이 갖는 독특한 인터넷 중심의 자연 발생적인 특징 때문에 Javascript는 그 한정된 주인이 없다. Javascript의 최초 개발사와 Javascript라는 말을 상표로 쓸 권리는 넷스케이프사에 소속되어 있지만, Javascript는 더 이상 넷스케이프의 것이 아니라, 모든 웹 브라우저와 웹 서퍼들이 공유하는 보편적인 기준으로 자리 잡았다.

이는 인터넷의 분권적이고 수평적인 정보 구조가 갖는 특징이 반영된 것으로, 비록 Javascript를 처음으로 제시한 것은 넷스케이프 사라 할지라도, Javascript가 보급, 발전하는 데에는 많은 개발사, 사용자, 개발자들의 자발적인 참여와 개량이 중심 역할을 했기 때문이다.

단적인 예로, Javascript가 넷스케이프 사의 제안으로 등장한 것임에도 불구하고, 최근의 동향은 웹 브라우저 시장에서 가장 높은 점유율을 유지하고 있는 인터넷 익스플로러의 Javascript 지원이 사실상 표준으로 자리 잡아 가고 있는 것임을 살펴본다면, Javascript는 특정 회사, 특정 단체에 배타적으로 귀속된 것이 아니라, Javascript를 사용하는 인터넷 사용자 모두가 공유하는 무형의 언어 개념이라 할 수 있을 것이다.

이러한 언어 자체의 특성 외에 사실 Javascript가 갖는 결정적인 비용상의 이점은 바로 추가 교육비용 자체가 매우 적게 든다는 것이다.

GCC나 델파이와 같은 개발도구는 비록 개발도구의 여러 가지 좋은 점이 있다손 치더라도 이 언어를 이미 습득하고 다른 사람에게 교육할 인력이 턱없이 부족하다. 단순한 인력 뿐만 아니라, 교육의 기반 자원이라 할 수 있는 서적, 인터넷 상의 공개 자료의 측면에서도 자료가 희귀하다. JAVA나 Visual Basic의 경우에도 교육인력이 아주 풍부한 편은 아니다.

전산 전공자들에게는 매우 널리 퍼져있는 Visual C++의 경우를 기준으로하여 C나 C++ 언어 교육의 경우에는 사정이 상당히 나은 편이긴 하다. 하지만 Javascript의 교육 자원은 이런 다른 언어, 개발도구와는 비교할 수 없을 만큼 압도적으로 풍부하다.

Javascript는 본래 웹 페이지 개발을 위해 사용되었던 언어인 만큼, 모든 홈페이지 제작 관련 교육자들은 Javascript를 교육 할 수 있는 능력이 있으며, 시중에 이미 출판 보급된 서적의 수도 가장 보급률이 높은 상업 언어와 맞먹는 수준으로 방대하다. 무엇보다도 인터넷 상에서 쉽게 접할 수 있는 공개된 교육 자료의 양이 많기 때문에, Javascript는 그 교육과 학습의 측면에서도 비용이 0에 가까우며, 결과적으로 다른 언어에 비해서 접근 장벽이 낮다.

[4] [5]

표III 교보문고에서 발매중인 언어들의 참고도서수

표IV EMPAS에서 검색한 각 언어들의 웹 페이지 수

이점은 초등 프로그래밍 교육으로 그 대상을 한정하여 생각하면 더욱더 선명한 차이를 드러낸다. C나 C++를 초등 프로그래밍 교육 교재로 활용하는 교육 자원의 수는 극히 일부에 지나지 않지만, Javascript는 실제 현장에서 이미 광범위하게 초등 프로그래밍 교육 교재로 사용되고 있다.

대다수의 프로그래밍에 대한 개념이 전혀 없는 시각 디자이너들이 웹 개발자가 되기 위하여 여러 가지 전산 개념들을 습득할 때, 가장 먼저 접하게 되는 프로그래밍 언어가 Javascript이다. Javascript는 시각 디자이너들이 웹 페이지에 편리한 부가 기능을 추가하기 위한 간단한 수단으로 배우는 것이지만 그 의미는 결코 가볍지 않다.

이들은 웹 개발의 실제적인 필요 때문에 Javascript를 배우고, 그 과정에서 프로그래밍 언어의 개념과 논리적인 문제 해결 방법을 최초로 이해하고 프로그래밍의 세계에 처음으로 발을 딛게 된다. 이러한 과정은 이미 현장의 웹 디자이너 양성 교육의 제반에서 벌어지고 있는 일이며, 이미 수년간의 산업적인 경험이 축적되어 성숙된 교육 능력을 갖고 있다. 이러한 점은 초등 프로그래밍 교육을 대규모 대중에게 보급한다고 할 때, 다른 언어를 교재로 사용하는 것에 비해 월등한 이점으로 작용한다.

더군다나 이미 다른 프로그래밍 언어에 익숙한 개발자가 작업상의 필요나 소통을 위해 Javascript를 습득하고자 하는 경우에는 사실상 교육비용이 전혀 들지 않는다고 할 수 있다. Javascript의 간단한 문법과 폭넓은 프로그램 작성상의 편이성 때문에, 이러한 방대한 Javascript 학습에 관한 자료들이 제공되는한, 이미 다른 영역에서 일정 수준 이상의 프로그래밍 기술을 보유한 개발자는 Javascript를 지극히 쉽게 익힐 수 있다.

종합적인 비용 측면을 고려해 본다면, 실제로 추가 비용이 거의 필요하지 않은 Javascript는 그 어떤 언어보다도 대중적인 초등 프로그래밍 교육에 유리한 언어로 가능성을 갖고 있다 하겠다.

II.3. Javascript라는 언어 자체가 갖는 구조적인 장점과 안정성

Javascript가 초등 프로그래밍 언어로 적합한 것은, 실제 현장에 널리 보급되어 있으면서도 언어 자체가 무료이므로, 총도입비용이 타 언어에 비해 매우 낮다는 점에, Javascript의 공학적인 체계와 언어 자원이 초등 프로그래밍 언어에 어울린다는 것이 더해지기 때문이다.

Javascript는 그 언어 자체의 구조와 문법이 쉬우면서도, 체계적이고, 융통성 있으면서도 강력한 기능을 갖도록 되어 있다.

첫째, Javascript는 기본적으로 C 문법 체계를 근간으로 하고 있다.

Javascript는 소위 중괄호, 세미콜론과 백슬래쉬n('{', ';', '\n')으로 대표되는 고전적인 C 문법 체계의 정통을 그대로 받아들이고 있다. C의 문법 체계는 미국 벨 연구소의 켄 톰슨이 개발한 B언어를 계승하여 1972년 같은 연구소의 데니스 리치에 의해 UNIX 개발 프로그래머들의 효율적인 프로그래밍 작업을 위하여 탄생된 것에 그 기원을 두고 있다.

C의 문법 체계는 그 어떤 언어보다도 간단 명료하면서도 강력하고 다양한 표현력을 지니고 있다. 따라서 C언어는 모든 프로그램 작성 작업으로 급속히 확산되었고, 미국 국가 표준 협회에서 ANSI Standard C를 제정하기에 이르러, 확실한 표준안이 자리잡으면서 C 문법 체계는 프로그래밍 언어에 있어서 가장 널리 통용되는 기준이 되었다.

따라서 아직까지도 C는 공학 문제 풀이와 이론 연구의 분야에서 가장 널리 보급되어 있는 언어이다. 또 C++를 위시한 많은 신생 언어들이 실제 전산 개발의 영역에서 C의 자리를 대체하기는 하였으나, 이러한 언어들 역시 대부분 □중괄호, 세미콜론, 백슬래쉬n□의 C의 통상적 문법체계를 그대로 따르는 바탕 위에, 각 언어의 구조적인 특징들을 쌓아 나가도록 되어 있다.

C의 통상적 문법 체계를 바탕으로 하는 언어들은 C의 모든 구조를 그대로 받아들이고 거기에 몇 가지 부가를 통해 객체 지향 프로그래밍을 구현한 C++를 필두로, JAVA와 C#이 실용적으로 매우 널리 퍼져있는 개발용 언어로서 자리잡고 있다. 여기에 수학계산용 소프트웨어 Maple의 기술 언어와 가장 널리 사용되는 서버 운용을 위한 서버 사이드 스크립트 언어인 PHP에 이르기까지, 각종 다양한 응용 프로그램의 대부분에서도 C의 통상적 문법 체계는 널리 퍼져 있다.

단적인 예로 Visual Basic 프로그래머와 C 계열 언어 프로그래머가 서로의 개발환경에서 적응하는데 가장 중요한 호환 장벽은 문장(statement)의 끝을 나타내는 세미콜론(;)과 뉴라인 문자(소스 기술상의 줄바꿈)의 단순한 차이가 무엇보다 심각하다. C 계열 언어는 세미콜론을 문장의 끝으로 생각하므로, 한 줄이라고 해도 두 개 이상의 문장을 쓸 수도 있으며, 반대로 하나의 문장을 두 줄에 표현해도 아무런 문제가 없다. 하지만 Visual Basic은 그렇지 않으므로 서로 다른 문법 체계에서 □언어□의 특성상 습관적으로 익숙한 프로그래머에게 결코 가볍지 않은 심각한 적응 부담을 안긴다.

이러한 측면에서 Javascript가 C 언어 문법의 근간을 그대로 받아 들이고 있는 것은, C 언어 근간 문법 체계의 넓은 보급을 생각할 때 무시할 수 없는 특징이자 이점이다.

다라서 Javascript로 처음으로 프로그래밍을 접하여 익숙해진 사용자는 여러 가지 다른 언어와 개발환경에서 적응하기가 그만큼 쉽다. 이 점은 초등 프로그래밍 교육이 실제 각 분야의 전산 개발에 기초를 제공하는 것이라 할 때, 반드시 갖추어야 할 요건이다.

한편 Javascript는 Visual Basic 프로그래머가 Javascript에 적응하기 쉽도록 뉴라인 문자 역시 문장의 끝으로 사용할 수 있도록 하는 등 몇 가지 타협적인 부가 문법 역시 제공하고 있다.

둘째, Javascript는 단순한 순차적인 프로그램, 절차 지향적, 구조적 프로그래밍과 객체 지향적 프로그래밍 어느 쪽에서든 융통성을 발휘하는 구조를 갖추고 있다.

극히 단순한 작업에서 일반적인 전산 능력을 사용하고 싶을 때는 복잡한 구조나 깊이 있는 설계 원칙보다는 가장 원론적인, 순차 수행 프로그래밍이 가장 편리하다. 비전문가가 실제 생활의 각종 다양한 문제나 특정 수치의 반복 처리 결과를 알고 싶을 때에 단순한 전산응용의 목적으로 간단히 프로그래밍을 하고자 할 때는 엄격한 구조화와 여기에 수반되는 제반 설계 작업은 귀찮고 불필요한 것이다.

초등 프로그래밍 교육이 전문적인 개발자나 전산 처리에 심화 학습을 원하는 사람이 아닌 일반 대중 전체를 대상으로 한다는 점을 생각한다면, 단순한 순차 프로그래밍을 어느 정도 존중하는 것은 다양한 생활과 기타 업무 제반에서 전산 능력의 활용도를 높이는 간단한 프로그램 작성을 유도하는데 바람직하다.

한 동안 GW-BASIC을 중심으로한 BASIC계열 언어가 초등 프로그래밍 언어로서 가장 널리 사용되었던 것도 바로 이러한 이유 때문이었다. 그러한 맥락에서 전산 개발과 전산 작업 자체를 위한 프로그래밍 교육이 아니라, 실생활에서 부딪히는 다양한 작은 문제를 해결하고자 할 때에는 프로그래밍 작업이 극히 단순하고, 프로그램을 이해하는데도 추가적인 구조 이해 노력이 불필요한 순차 프로그래밍이 유용하다.

Javascript는 C 문법의 관용에서 이야기하는 프로그램 소스의 전역(global) 영역을 일반적인 C/C++ 프로그램에서 main 함수의 역할을 하도록 되어 있다. 따라서 단순히 순차 프로그래밍으로 단순 작업을 수행하기 위해서는 어떠한 추가적인 구조의 학습 없이 단순히 소스 코드에 수행하고자 하는 문장들을 차례로 기입하기만 하면 된다.

표V 객체 지향 언어 JAVA, 구조적 언어 C, Javascript에서 helloworld 프로그램의 소스 코드

J A V A	public class HelloWorld{ public static void main(String args[]){ System.out.println("Hello World!"); } }
C	#include <stdio.h> int main() { printf("Hello World!"); return 0; }
Java script	alert("Hello World!");

가장 단순한 프로그램인 "helloworld"를 각 언어에서 수행하는데 대한 소스 코드를 단적인 예시로 살펴 본다면, 이러한 단순 작업을 하는데 있어서 C는 함수 구조와 리턴값, 컴파일시의 헤더를 고려해야 하고, JAVA의 경우는 이렇게 사소한 작업에서도 전체적인 클래스 구조와 객체 지향 구조에서의 컴파일 및 실행에 대한 이해가 필요하다. 그러나 Javascript는 helloworld를 출력하는 명령 그 자체만 단순히 기술하면 된다.

단순한 프로그램에 대해서도 구조와 설계 이론을 갖추는 것은 프로그램 작업의 깊이를 익히고 개발 작업의 원칙을 근본주터 준수한다는 측면에서는 바람직한 것일 수 있다. 하지만, 처음으로 프로그래밍을 접하는 학습자에게 있어서, 이러한 점은 도리어 학습 과정에서 간단한 사항에 대해서도 어려움을 느끼게 하고 배운 사실을 각자의 문제에 적용하는 현실 감각을 잃게 만들기 쉽다.

다른 관점에서 순차 프로그래밍을 살펴보면, 순차적인 프로그램 실행이야 말로 가장 원초적인 기계적 전산 작업의 바탕이므로, 전산 알고리즘과 기본 원리에 대한 이해를 돕는 데 유리할 수 있다. 이러한 순차적인 프로그램 진행에 대한 이해가 전혀 없이 지나치게 추상적인 개념과 구조를 익히기만을 교육한다면, 오히려 이러한 추상적 개념들과 구조의 가치를 와닿게 느끼고 이해하기 어려울 뿐만 아니라, 기초적인 프로그래밍에 실제에 있어서 혼동과 불분명함을 해소하는 데 상당한 시일이 걸리게 될 수도 있다.

한편 Javascript는 순차적 프로그래밍을 간단하게 지원하면서도 함수 기반의 구조적 프로그래밍을 지원하며 객체 지향 프로그래밍도 도입하고 있다.

구조적 프로그래밍이란, 필요한 값들을 사용하기 위해 변수를 선언하고 사용할 수 있으는 체계 하에서, 명령과 변수로 구성된 함수 혹은 부프로그램을 정의할 수 있으며, 주 프로그램이 부 프로그램을 호출하는 방식으로 프로그램이 실행되는 형태의 프로그램을 작성하는 것을 말한다.

Javascript는 실제 현장에서 프로그램 소스코드의 재사용성과 구조화 수준을 좀 더 높이고, 수학적인 문제 처리 방식의 내용의 표현에 적합한 모듈화 지향의 함수 기반 구조적 프로그래밍의 형태에 가장 적합하다.

'function'이라는 직관적인 키워드를 통해 C와 매우 유사한 방식으로 정의하여 사용할 수 있는 함수의 작성과 사용을 지원한다. 이 경우, 단순 순차 프로그래밍의 용도로, 혹은 C언어의 main 함수와 같은 용도로 사용하는 Javascript의 전역 영역과는 그 수행이 분리되어 전형적인 C 언어 형태의 함수 사용 방법대로 전역 영역 및 또다른 제3의 함수에서 호출할 수 있게 된다.

현재 웹 상에서 사용되고 있는 수많은 Javascript 프로그램들도 대체로 이러한 Javascript의 함수 기능을 활용하는 것을 중점으로 하여, 구조화 프로그래밍으로서 Javascript를 사용하고 있다. 이러한 의미에서 Javascript는 객체 지향 개념을 바탕으로 하고, 순차 프로그래밍을 지원하는, □구조적 언어□(structural language, structured programming language)라 규정하는 편이 가장 현실적인 특징을 잘 표현하는 것이라 하겠다.

이러한 점은 실제로 Javascript가 지향하는 중간 규모의 프로그램을 개발하기에는 구조적 프로그래밍 언어를 사용하는 것이 적합하다는 일반적인 견해와 부합하며, 또 전산 개발 영역이 아닌 다른 실제 문제 풀이에서 가장 널리 사용되는 언어들인 C언어와 FORTRAN의 프로그래밍 방식과도 일치한다.

또다른 구조적 프로그래밍을 활용한 소프트웨어 개발의 실제에 있어서 매우 중요한 요소는 프로그램 작성에 있어서 두 사람 이상의 개발자가 프로그램 작업을 분담하고 협동하여 하나의 프로그램을 개발하는 작업이다.

초등 프로그래밍 교육의 수준을 생각할 때, 이러한 공동 프로그래밍이 실제적인 의미를 지니는 것과는 거리가 있다고 할 수도 있겠으나, Javascript는 두 개 이상의 파일 형태로 작성된 프로그램들을 하나로 합쳐서 실행시키는 간단한 방법 또한 제공하고 있다. 이는 초등 프로그래밍 교육 교재 수준에서 공동 작업을 수행하거나 실습하는 수준으로서는 무난한 것이라 하겠다.

객체 지향 프로그래밍에 있어서 Javascript는 독특한 접근법을 갖고 있다.

객체 지향 프로그래밍은  소프트웨어를 구성하고 실제 소프트웨어를 작동시키는 실체들을 분리하여 생각하는 사고, 즉, 프로그램 로직과 데이터가 분리되어 있는 기존의 구조적 프로그래밍의 사고에서 탈피하여 로직과 데이터가 결합된 객체들이 시스템을 이룬다는 것이다.

따라서 객체 지향 프로그램에서, 소프트웨어란 자료구조(data structure)와 행위(behavior)가 결합된 객체들의 구조화 된 집합이다. 이러한 개념을 도입함으로서 프로그래밍 작업 중에서 일상 생활에서 사람들이 대하고 생각하고 방식을 그대로 표현하기가 쉬워지며, 여러 사람이 함께 프로그램을 개발하거나 프로그램에 새로운 기능을 추가, 수정하고 이미 작성된 코드를 재사용하는 데 매우 유용하다.

따라서 객체 지향 프로그래밍은 최근의 전산 전문가들의 개발 작업에 있어서 중심으로 자리 잡아 널리 활용되고 있다.

하지만 실제 객체 지향 프로그래밍을 기초적인 프로그래밍에 도입하였을 때에는 이러한 장점들이 확실히 발현되기 어렵다. 더 복잡하고 원칙적인 체계 때문에 학습자가 학습에 어려움을 느낀다는 점 뿐만아니라, 소규모 프로그램에 있어서 객체 지향의 개념을 확실히 실험하고 그 장점을 직접적으로 느끼기 어렵기 때문에 그 이해의 정도가 피상적인 수준에 머무르기 때문이다.

이러한 현실에서 기본적으로 Javascript는 확실한 클래스를 기반으로 한 확실한 객체 개념을 지원하고 있다. 하지만, Javascript를 활용하는 실례 역시, 객체 지향의 형태로 프로그램을 설계하고 클래스를 정의하여 활용하는 예는 매우 드물다. 절대 다수 웹사이트 상의 실제 응용에 있어서 Javascript의 이러한 객체 지향 프로그래밍 지원 능력을 사용하지 않고, 단순한 구조 지향 프로그래밍만이 이루어지고 있다.

그럼에도 불구하고, Javascript는 객체 지향 프로그래밍의 개념에 잘 부합하는 프로그래밍 언어이다. 그것은 Javascript가 실제로 웹 사이트 상에서 구현될 때, 비록 프로그램 자체는 객체 지향을 전적으로 염두에 두고 작성되지 않았지만, 내부적으로 사용하는 많은 라이브러리들이 모두 객체 개념에 바탕을 두고 이루어지기 때문이다.

즉 Javascript의 프로그램 개발자들은 스스로 작성하는 프로그램이 완전히 구조 지향 프로그래밍으로 만들어진 것이라 하더라도, 웹 페이지의 요소들을 관리하기 위하여, window, document, frame, image, link와 같은 많은 객체들을 사용하여야 한다. 이런 객체들을 사용하는 과정에서 자연스럽게 객체의 개념과 그 활용 방법을 익히게 된다.

특히, Date 클래스로 대표되는 많은 클래스의 활용은 전형적인 객체 사용 방법을 확실히 익히게 하고, 여러 개의 웹 페이지와 거기에 소속된 Javascript 프로그램을 넘나들며 프로그래밍을 하는 경우에는 자연스럽게, 객체 지향의 개념에 아주 잘 부합하는 인스턴스, 메시지 개념들을 사용하게 된다.

Date 클래스는 new 연산자로 그 인스턴스를 만들어 사용하되, 기본적으로 현재 시간과 날짜를 속성으로 갖게 된다. 이러한 점을 알고 사용하는 것은 객체의 생성자에 대한 이해를 돕는다. Date형 객체에 무형적으로 들어 있는 □시간□이란 개념을 Date형 객체가 갖고 있는 다양한 메소드를 사용하여, 시간, 분, 초, 년, 월, 일, 날짜, GMT시간, 서술적인 문자열등의 다양한 형태로 끄집어 내어 사용하는 데에서 객체가 갖고 있는 속성과 메소드의 특징에 대해 이해하고 활용하게 되며, 이 객체를 대입 연산자에 사용하는 등의 과정에서 캡슐화의 의미를 알게 된다.

새로운 창을 열고 그 창의 제목, 크기, 위치 등을 지정하는 명령을 내리거나, 이렇게 새롭게 열린 창에서 스스로 닫히거나, 전달된 내용을 표시하는 등의 구조를 짜나가는 것은 여러 개의 객체가 상호작용하며 동작하는 모습을 실제적으로 경험하고 느끼게 한다.

이러한 점은 단순히 객체 지향 개념을 수동적으로 교육하고 그 실제에 대한 감각을 느끼기 어려운 기존의 객체 지향 프로그래밍 언어를 이용한 초등 프로그래밍 언어 교육에 비해, 오히려 작업 상에 있어서는 직관적인 구조적 프로그래밍을 해나가면서, 실제로 객체 지향 프로그래밍의 핵심적인 개념들을 직접 의미있게 사용하게 되므로, 교육의 측면에서 훨씬 유리하다.

뿐만 아니라 몇 가지 유용한 예시에 있어서는 Javascript가 지원하는 객체 정의 및 활용 기능을 사용하면 보다 근본적인 객체 지향 프로그래밍의 전반에 대한 활용 및 교육과 학습도 용이하다. 같은 개념으로 Javascript는 최근의 프로그래밍에서 중요해진 이벤트 핸들링에 대해서도 가장 바탕에서부터 그 개념과 프로그램 구성을 체득할 수 있다.

셋째, Javascript는 그 유연성이 탁월하므로 처음으로 프로그래밍을 접하는 학습자가 간단하게 원하는 바를 실습하는데 유리함과 동시에, 체계성을 갖추는 심화 기능에도 유리하다.

대표적으로 Javascript는 C 언어 형태의 문장 종결자인 세미콜론과 Visual Basic의 문장 종결자인 뉴라인 문자를 둘 다 지원한다. 따라서 학습자는 일단은 원하는 방식 중 어느 하나를 택하여 사용하더라도 불필요한 에러 없이 프로그램은 잘 수행된다. 즉 프로그램이  작성자의 사소한 실수에 관대하게 동작한다.

이 점은 Javascript의 형과 변수에 관한 문제에서도 비슷하다. Javascript는 명시적으로 변수를 선언하는 과정을 생략한다고 해도, 변수를 사용할 수 있으며, 서로 다른 변수 형들이 관습적이고 상식적인 선에서 자유롭게 자동으로 상호 형변환 된다. 이러한 점은 프로그래밍 실수에 관대하다는 점과 함께, 다양한 다른 규칙의 언어 사용자들이 공통적으로 익히는 초등 프로그래밍 교육 언어로서의 융통성을 보여준다.

보다 세심한 동작과 확실한 원칙을 지키는 프로그래밍을 위해서 문장의 끝에는 반드시 세미콜론을 사용하거나 Javascript는 명시적으로 변수를 선언하고 또 상호 형변환을 엄밀한 관리하에 수행해도 아무런 문제가 없다.

이러한 일련의 융통성은 Javascript 언어상의 직교성을 타 언어에 비해 비교적 약화시키는 문제점이 있을 수 있으나, 교육용 언어로서의 위상을 생각할 때, 그다지 우려할만한 수준은 아니다.

또 한가지 특기할만한 사항은 Javascript 프로그래밍의 통상적인 현재 관례는 이렇게 확실한 원칙과 관리를 지키자는 쪽이라는 것이다. 즉 예상치 못한 오동작을 방지하고, 프로그램 작성자가 엄격하게 프로그램의 작동을 예지 하는 범위내에서 프로그램이 동작하도록 하기 위해 대체로 어느 한쪽의 문장 종결자만을 사용하고, 변수들은 명시적으로 선언하며, 상호 형변환은 항상 직접 수동으로 이루도록 하는 것이 관습이다.

이 점은 과거 BASIC이 초등 프로그래밍 언어로서 자리 잡았던 때와 반대되는 것이다.

BASIC은 대체로 변수의 정의 등의 사항에 대해 엄격하지 않고 간편한 방향을 따르는 편이 관례였다. 이에 비해 Javascript의 엄격한 관습적 전통은 다른 더 복잡하고 전문적인 프로그래밍 언어를 익히는 바탕이 된다고 생각할 때 바람직한 흐름이라 생각된다.

이는 BASIC이 애초부터 교육과 단순 활용을 위해 개발되었던 것에 비해, Javascript는 이미 프로그래밍에 익숙한 전문가들이 웹 페이지의 표현력 증대를 위해 부가적으로 웹 브라우저에 기능을 추가하는 과정에서 탄생했기 때문에, 보다 엄격한 전문 프로그래밍 지향성의 관습이 자리잡은 것으로 추정된다.

이러한 엄격한 관습과 융통성 있는 언어 구조의 공존은 처음으로 프로그래밍을 학습하는 초등 프로그래밍 교육 대상자에게 있어서, 바람직한 프로그래밍 습관을 익히는 동시에, 오류에 대해서는 불필요한 실수를 관대하게 처리할 수도 있는 유익한 결과를 낳았다 하겠다.

Javascript의 융통성은 이외에도 큰따옴표와 작은 따옴표 모두를 문자열 지시자로 사용하는 데에서 오는 편리성, 다양한 내장 클래스, 객체들의 실용적인 많은 메소드 등등 여러 가지 다양한 곳에서 발견된다.

보다 근본적으로 앞서 언급한대로, Javascript가 현실적으로 구조적 프로그래밍 언어임에도 불구하고, 객체 지향에 바탕을 두고 있고, 단순한 순차적 프로그래밍에도 편리한 것도 이러한 Javascript의 전반적인 융통성에 기인한 것이라 하겠다.

끝으로 Javascript는 인터프리터에 기초한 언어가 갖고 있는 근본적인 몇 가지 특징을 갖고 있다. 즉 Javascript는 그 수행 속도가 컴파일러 기반 언어에 비해 현저히 떨어지며, Javascript의 실제적인 인터프리터가 되어 주는 웹 브라우저 없이 독립적으로 수행할 수 없다는 단점이 있는 반면, 프로그램 실행이 간편하며 대화형으로 프로그램을 개발해 나갈 수 있으며, 디버깅이 편리하다는 장점을 갖고 있다.

초등 프로그래밍 교육 언어는 대체로 대규모 전산 능력을 효율적으로 사용하는 프로그램의 작성보다는, 프로그래밍에 능숙하지 않은 비 전문가가 간단한 응용 프로그램을 작성하는 데 초점을 두고 있는 것이므로, 이러한 Javascript가 인터프리터 기반 언어라는 점도  초등 프로그래밍 교육 언어로서 적합한 특징으로 간주 할 수 있다.

실제로도 대부분의 웹 브라우저들이 Javascript를 실행할 때 비교적 상세하고 편리한 오류 지적 루틴을 제공하고 있으며, 인터넷 익스플로러등의 웹 브라우저들은 상세한 실용 디버거와 연계하여 사용할 수 있도록 디자인 되어 있다.

또 원초적인 인터프리터 언어는 그 소스 코드에 대한 보안을 유지하기 어려운 것이 보통이다. 대체로 BASIC 계열의 언어들은 실행을 위해서는 소스 코드에 누구나 접근할 수 있는 형태로 운영되고 있었으며, JAVA의 경우에는 소스를 바이트 코드로 1차 컴파일 하여 실행하므로, 소스 코드가 완전히 노출되지는 않지만, 실행을 위한 바이트 코드를 입수한 사용자라면 누구나 거의 완벽하게 역 컴파일 하여 소스를 얻을 수 있는 것이 그 현실이다.

Javascript의 경우에는 아예 기본적으로 소스 코드의 공개를 원칙으로 하고 있다. 이 것은 Javascript가 애초부터 복잡한 상업적 독립 응용프로그램의 작성을 위해 개발된 것이라기 보다는, 간단히 웹 페이지를 보조하는 차원에서 출발하였기 때문이다. 그리고, Javascript가 점점 복잡하게 기능이 추가되고 여러 가지 응용 분야로 발전해 나가면서도 대체로 인터넷 상에서 공개 된 채로 자율적이고 개방적인 참여로 성숙해 왔기 때문에, 현재 Javascript는 관습적으로도 소스 코드에 대한 비공개를 바라지 않는 원칙이 널리 통용되고 있다.

이 점은 상업 프로그램의 개발에 있어서는 치명적인 문제일 것이나, 초등 프로그래밍을 위한 교재로서 응용할 때에나 간단한 실습용 프로그램의 작성에 있어서는 그다지 큰 문제는 아니다. 오히려, 웹 상에 퍼져있는 다양하고 많은 실제 소스 코드들을 입수 할 수 있으므로 이미 작성된 기능을 웹에서 검색해서 도입하고 재사용하며, 학습하여 활용하는데 있어서 그 어떤 언어보다도 유리한 개발 자원 정책(policy)을 갖고 있는 셈이다.

II.4. Javascript가 갖는 실용성에 대한 논의

직접 실행 가능한 이진 코드를 만들어내지 못하는 인터프리터 기반의 언어는 대체로 그 용도가 교육이나 몇가지 간단한 작업을 하는데 한정되어 있어서, 실제로 본격적인 전산 작업에 활용가치가 있거나 상업적인 가치가 있는 프로그램을 개발하기가 어렵다는 것이 그 통념이다.

또, 인터프리터 언어나 특정 환경의 제약을 받는 언어가 아니라, 일반적으로 범용 컴파일러를 이용한다고 인정받는 언어라 하더라도, 실제 초등 프로그래밍 교육 초기에는 이러한 언어를 이용하여 실용적이고 창의적인 작업을 하기란 쉽지 않다. 이는 최근의 컴퓨터 환경에서 사용자에게 직접적인 경험을 주는 프로그램을 작성하기 위해서는 비교적 복잡한 네트워크 프로그래밍이나 멀티미디어 요소를 다루는 방법을 익혀야만 하는데, 이것이 초등 프로그래밍 교육의 단계에서는 쉽지 않기 때문이다.

그러나, 이렇게 실용적인 활용에 직접적으로 프로그래밍 학습의 결과를 적용하지 못하는 것은 학습자의 의욕을 떨어뜨리고, 학습자가 창의적으로 프로그래밍을 연습하며 결과물을 만들어 내는 보람을 앗아간다.

이러한 문제점에 대해, 인터프리터 기반 언어임에도 불구하고 Javascript가 갖는 가장 위력적인 장점은 그 실용성에 있다.

무엇보다도 먼저 Javascript는 홈페이지 제작에 아주 널리, 자주 사용된다. Javascript는 애초에, 보다 편리한 웹 사이트를 개발하기 위해 만들어진 것이다. 따라서 Javascript는 그 가장 원초적이고 초보적인 단계에서도 홈페이지 제작에 즉각 응용할 수 있다.

홈페이지 제작은 가장 대중화되고 널리 알려져 있으면서도, 매우 필수적인 최근의 전산 활용 분야이다. 최근 Javascript는 홈페이지 제작의 단순한 부가기능이 아니라, 대부분의 홈페이지에서 필수 요소로 자리잡아가고 있다.

Javascript는 홈페이지에 대한 입력사항을 간단히 체크하거나, 몇가지 내용을 동적으로 표시하는데, 혹은 버튼이 눌려지는 효과나 버튼에 불이 들어오는 것과 같은 아주 단순한 애니메이션에 쉽게 활용되어 광범위하게 쓰이고 있다. 또한 현재 홈페이지를 특정한 다른 웹 사이트로 자동으로 연결해 준다거나, 간단히 웹 서핑에 관련된 정보를 처리하여 편리한 웹 서핑을 돕는데 이용 된다. 또 많은 웹 사이트에서는 Javascript의 Cookie를 이용하여 로그인, 상황 표시에 따른 웹사이트의 개별화 등 편리한 개인 지향 기능에 Javascript를 효율적으로 사용한다.

Javascript는 대부분의 관공서, 기업 홈페이지와 포탈, 쇼핑 사이트에서도 널리 사용되고 있으며, 개인 홈페이지에도 갖가지 다양한 형태로 나타나고 있다.

표VI 삼성전자 웹사이트에 사용된 Javascript의 일부

<title>삼성전자 웹사이트 - 삼성전자 웹사이트에 오신 것을 환영합니다.</title>

<META NAME=description CONTENT="삼성전자 공식 웹사이트, 삼성전자

뉴스, 기업정보, 컴퓨터, 컴퓨터 주변기기, 영상, 음향, 통신사무기기,

생활가전, 네트워크, 생산자동화 설비 등 삼성전자 제품, 대리점, 서비스 센터, 쇼핑 등 삼성전자의 모든 정보 제공">

</head>

<Script language="JavaScript">

function sec_exit(){

alert("SEC.CO.KR의 SESSION을 종료합니다..");

}

</Script>

[6]

표VII Yahoo Korea 웹사이트에 사용된 Javascript의 일부

<script language="javascript">

var advUrl = 'http://kr.promo.yahoo.com/html/fortune_event/';

var floatGif = 'http://img.yahoo.co.kr/ads/crzy/mantle_property/fortune.gif';

var gPos = 'gifPos_SHOP';

var Ctime = 1;

var Cexp = 2;

var Cname = 'KR_FT';

r0 = 'http://kr.rd.yahoo.com/M=243221.2788416.4164280.2248792/S=2060171591:CRZY/A=1385947/R=0/*';

</script>

<script language=javascript src=http://img.yahoo.co.kr/ads/floatinggifapi2.js></script>

[7]

표VIII 개인홈페이지 □듀나의 영화 낙서판□에 쓰인 Javascript중 일부

<SCRIPT LANGUAGE="JAVASCRIPT">

<!--

function remote()

{window.open("http://idic.i-on.net/idic.php3","idicremote",

"width=440,height=480,resizable=yes,scrollbars=yes");}

//-->

</SCRIPT>

</HEAD>

[8]

표IX 정보통신부 웹사이트에 사용된 Javascript의 일부

<script	language=Javascript	src="/jsp/script.js">

</script><script src="main.js"></script><script language=javascript>

function t() {	newwin= window.open("/jsp/mic_comm/notice.htm","","

toolbar=0,scrollbars=0,resizable=0,width=450,height=500");

newwin.opener=this;	newwin.focus();	}

function MM_openBrWindow(theURL,winName,features) {	//베너 클릭시 팝업 창을 뛰워 이동하자

window.open(theURL,winName,features);

}

[9]

이러한 홈페이지 제작의 즉각적이고도 의미있는 활용은 실용성에 있어서도 장점이 되지만 또 한편으로는 교육 과정 상의 부드러운 전개와 편이에 있어서도 큰 도움이 된다.

이는 실제로 현재 학원 교육의 현장에서 관찰되는 사항이기도 하다. 전산 활용의 가장 기초적이면서도 중요한 분야가 홈페이지 개발이기 때문에 수많은 학습자들은 전산 관련 실무를 배우면서 홈페이지 개발 작업을 가장 먼저 습득한다.

HTML 혹은 단순 디자이너 기반의 간단한 홈페이지 개발 작업을 익힌 학습자들은 홈페이지에 몇 가지 기능을 추가하거나, 보다 복잡한 작동을 구현하기 위하여 다음 단계에서 흔히 Javascript를 익히는 수순을 밟아 간다. 그리고 누차 언급했듯이, 이러한 과정에서 자연스럽게 Javascript를 통해 프로그래밍 일반을 접하게 함으로서 프로그래밍의 개념, 논리적인 문제 풀이 기법, 나아가서는 알고리즘이나 소프트웨어 공학이 기초나 전산 개발의 여러 가지 요소를 경험하고 습득하게 할 수 있다.

이렇게 부드럽고 거부감 없이 이어지는 교육 과정은 더욱 교육 자체의 효과를 높이는 한편, 반대로 프로그래밍 학습에서 얻어지는 교육 효과를 전달하기 어려운 비수용자 계층에게도 한결 가깝게 프로그래밍 교육을 실시할 수 있다. 반대로 프로그래밍 학습에 대한 필요를 전혀 느끼지 못하거나 학습자 스스로가 불필요하다고 느끼는 수준의 교육 과정을 강제적으로 당하는 일을 막기가 쉬워 진다.

둘째로 Javascript는 멀티미디어 자료의 처리 기능에 아주 뛰어난 능력을 갖고 있다.

멀티미디어 자료는 현재의 컴퓨터 환경에서는 접근성이 높은 자료의 형태일 뿐만아니라, 사용자가 선호하고 친숙해하는 자료의 형태이다. 그에 비해 고전적인 프로그래밍 언어 교육에서는 가장 간단한 비트맵 이미지를 표현하는 것 조차도 아주 복잡하고 골치아픈 작업이다. 무엇보다 대부분의 널리 사용되는 프로그래밍 언어 환경에서 멀티미디어 자료를 사용하는 방법들은 수많은 라이브러리와 OS의존적인 코드들을 사용해야만 하는, 수행 환경에 독립적이지 못한 일반화되지 않은 것이다.

이러한 이유에서 많은 프로그래밍 언어에서 프로그래밍 교육의 초기에 멀티미디어 자료를 본격적으로 활용하기는 어려운데 비해, Javascript는 홈페이지를 표시하는 HTML과 연동하여 다양한 멀티미디어 객체들을 아주 간편하게 표시하고 활용할 수 있다. 이미지나 사운드를 다루는 방법들은 Javascript활용의 가장 기초적인 기능으로 언급되는 기능으로, Javascript 학습 초반부터 친숙하게 사용할 수 있는 것이며, 레이어나 스타일 시트와 Javascript를 연동하면 비교적 복잡한 애니메이션 기능도 아주 단순하게 구현할 수 있다.

실제로 많은 스트리밍 오디오 사이트나 VOD사이트에서 Javascript를 십분 활용하여 브라우져에서 편리하게 멀티미디어 재생기를 다루도록 되어 있으며, 이러한 기능들을 응용하여 만들어진 게임들도 다수 존재한다.

[10]

그림4 Javascript를 이용한 탁구 게임

(http://www.lostjungle.com/games/dhtml/phong/index.shtml)

멀티미디어 자료를 다루기 간편한 것은 사실 웹 브라우저가 화려한 홈페이지를 표시하기 위해 수많은 멀티미디어 기능을 사용할 수 있도록 객체의 형태로 지원하기 때문이다. Javascript는 그 실행환경이 웹 브라우저 상에서 동작하도록 되어 있기 때문에 이러한 장점을 획득한 것이며, 대체로 브라우저들이 Javascript에 대해 공통된 규약을 암묵적으로 준수하고 있으므로 멀티미디어 사용의 환경에 따른 의존성 문제에서도 비교적 자유로운 편이다.

셋째로 Javascript는 대부분의 업무 계산 작업에도 간단하게 사용될 수 있다. Javascript가 지원하는 계산기능과 문자열 처리 기능 등의 자료관리 기능은 간편하면서도 대부분의 상용적인 기능들을 모두 지원하는 폭넓은 것이다.

여러 가지 수학 함수들의 지원과 문자열 처리 기능은 대부분의 정보 처리 작업에 있어서 가장 필수적인 요소이며, 이들을 활용 함으로서 다양한 계산 처리 및 정보 분석 처리를 프로그래밍 할 수 있다.

Javascript는 다양한 웹 페이지의 동적 작동을 염두에 두고 구성되었으므로, 기본적으로 문자열 처리 기능이 발달해 있으며, 여기에 Javascript의 버전 업에 따라 수학 계산 기능들이 추가되면서 업무 처리에 있어서도 손색이 없는 전산 능력을 보유하게 되었다.

뿐만 아니라, Javascript가 웹 페이지 자체의 표현력과 결합하며, 데이터를 입력받는 폼을 시각적이고도 규격화되게 표현할 수 있으므로 입출력 인터페이스 / UI의 작성과 개발이 아주 편리하다. 따라서 작성된 처리 프로그램을 실제로 활용하기 편해진다.

말하자면, Javascript는 업무상에서 자주 사용하는 계산 기능을 하나의 패키지로 구성하여 입력폼과 시각화 출력 체계로 꾸며서 사용하는데 아무런 문제가 없는 강력한 기능을 갖추고 있다.

실제로 많은 웹 사이트에서 Javascript의 계산 기능을 이용해서 유용한 정보들을 계산처리하거나 자료를 처리한 후 시각화하여 표시하고 있다.

표X 주민등록번호가 올바른지 체크하는

Javascript 프로그램 중 일부

(http://java.up2.co.kr/exam/java65.htm)

var f1=str_jumin1.substring(0,1);	var f2=str_jumin1.substring(1,2);

var f3=str_jumin1.substring(2,3);	var f4=str_jumin1.substring(3,4);

var f5=str_jumin1.substring(4,5);	var f6=str_jumin1.substring(5,6);

var hap=f1*2+f2*3+f3*4+f4*5+f5*6+f6*7;

var l1=str_jumin2.substring(0,1);	var l2=str_jumin2.substring(1,2);

var l3=str_jumin2.substring(2,3);	var l4=str_jumin2.substring(3,4);

var l5=str_jumin2.substring(4,5);	var l6=str_jumin2.substring(5,6);

var l7=str_jumin2.substring(6,7);	hap=hap+l1*8+l2*9+l3*2+l4*3+l5*4+l6*5;

hap=hap%11;	hap=11-hap;	hap=hap%10;

if (hap != l7) {error(theForm.jumin1,'주민등록번호가 잘못되었습니다.\n\n다시입력해주세요!');}

var i9=0;	if (!errfound)	theForm.submit();;}

그림5 Javascript를 이용한 계산기 애플리케이션

(http://java.up2.co.kr/exam/ java103.html)

[11][12]

넷째로 Javascript는 언어기능과 실행 시간(run-time)의 작동이 안정되어 있다. 다양한 많은 기존의 범용 언어 및 교육용 언어들에서는 일부 기능에서 여러 가지 한계점이 발견되거나, 사용 환경에 따른 제약이 심심찮게 포착된다. 뿐만아니라, 기능 수행상의 불안정함이나 라이브러리 함수 자체에 버그나 오류가 포함된 경우도 가끔 나타난다.

상용 개발 환경이나 전문적인 실용 프로그래밍 언어와 개발 도구에서는 이러한 문제점들이 비교적 적은 편이나, 교육용 언어, 공개된 프로그래밍 언어나 개발 환경, 무료로 배포되는 도구에서는 이러한 문제점들이 무시 못할 수준으로 개발 작업 자체의 신뢰도를 떨어뜨리고 전체적인 작동상의 위험요인이 된다.

Javascript는 공개되어 널리 사용되는 프로그래밍 언어이면서도 특정 상업 회사의 웹 브라우저에 탑재되어 작동된다. 그러므로 Javascript는 웹 브라우저 제작사의 성의 있는 개발력의 보증과 함께 실행된다고 할 수 있다.

원칙적으로 Javascript 역시 상업 개발사의 제품 중 일부로서, 상업 개발사의 책임감 있는 개발진들이 노력을 기울여 만든 제품이다. 또한 많은 웹 브라우저들이 현실 사용자들이 동의한 공통의 언어를 지원하는 것이므로, 특정 웹 브라우저의 지원 기능과 다른 웹 브라우저의 Javascript 지원 기능은 차별화되고 비교되는 가운데 경쟁될 수 있다. 실제로 Netscape가 Internet Explorer에 비해 최근 그 점유율이 크게 떨어진 한 가지 중대한 이유는 Javascript 수행의 완결성과 편리함, 융통성에 있어서 Internet Explorer에 뒤졌기 때문이기도 하다.

공개된 언어의 특성상 Javascript를 처리하는 웹 브라우저가 갖고 있는 수행상의 버그들은 쉽게 발견되어 널리 알려진다. 웹 브라우저는 대부분의 제작사에서 비교적 자주 버전업되는 제품군 중 하나이므로 이러한 버그들은 대체로 빠른 시일내에 해결되는 편이며, 그렇지 않다고 하더라도 공개 언어의 특성상 버그 발견의 소식이 빨리 퍼져나가므로, 이러한 문제점을 빨리 인식하고 적절하게 대응하거나 피하여 가기에 좋다.

즉 Javascript는 웹 페이지라는 다양한 수많은 사용자들이 지속적으로 접속하는 결과물의 형태로 공개되므로, 어떤 기능이 추가된 Javascript를 지원하는 웹 브라우저를 웹 서퍼들이 얼마나 사용하느냐에 따라 자연 선택 혹은 자연 도태 되면서 진화하기 쉽다.

특정한 추가 기능을 매우 많은 홈 페이지에서 널리 사용하고 있다면 기꺼이 웹 서퍼들은 그 기능을 지원하는 웹 브라우저를 구비할 것이다. 한편으로, 별로 쓰이지 않는 웹 브라우저만이 갖고 있는 기능을 쓰는 홈페이지나 충분히 좋은 기능이 아닌데도 희귀한 기능을 쓰는 홈페이지는 웹 서퍼들이 방문을 귀찮아하게 되고, 자신의 웹 브라우저를 새로 구비하고자하는 필요를 절감하지 못하므로, 도리어 홈페이지가 웹 서퍼들로부터 외면당하게 된다.

모든 상업적인 표준안 혹은 제품들은 시장 기능에 의해 결정될 경우에 대체적으로 이러한 과정을 겪으며 발전하게 되지만, Javascript의 경우는 웹 페이지와 인터넷의 특성상 그 선택과 접촉의 기회가 아주 많으며 매우 빠르다. 또, 인터넷 사용자들의 특성은 대체로 웹 브라우저 업그레이드와 같은 작업에 장벽을 느끼지 못하므로, Javascript의 진화는 촉진된다.

그림6 Javascript의 진화 과정

한편 가장 널리 쓰이는 웹 브라우저인 Internet Explorer의 경우를 대표적으로 살펴볼 때 지원하는 기능들이 매우 안정되어 있는 편이다. 대체로 대부분의 인터프리터나 스크립트 언어는 많은 부분에서 한계성이나 특정 상황의 불안함을 드러내는 경우가 많다. 단적으로 GW-BASIC의 경우 문자열의 길이를 255바이트로 제약하고 있고, 지나치게 긴 프로그램을 작성했을 경우 프로그램이 폭주하는 경우가 잦다.

문자열 처리를 한 가지 예시로 사용하면, Internet Explorer는 Javascript 내부의 문자열 크기가 300KB대 안쪽에서는 원할히 작동하며 그 이상이더라도, 예외처리를 위해 여분의 시간 소요가 상당히 많을 뿐, 시스템 전체가 폭주하는 일은 없다. 따라서 문자열 하나에 하나의 문서나 책을 담아두고 작업하는 일이 가능하다.

Internet Explorer 외에 다른 많은 웹 브라우저들도 이처럼 모든 기능들이 상당히 안정되어 있는 편인데, 이것은 대부분의 초등 교육용 프로그래밍 언어들이 단순 업무 처리나, 교육에 국한되어 프로그래밍 도구 자체가 개발되는데 비해, Javascript는 수많은 온갖 다양한 웹 페이지에서 활용되게되므로, 여러 가지 만약의 사태에 대해 자유로운 가능성과 이에 상응하는 안정성을 갖추고자 노력하기 때문이다.

이 점은 모든 기능상의 안정성에 있어서 다른 초등 프로그래밍 교육에 적합한 언어와 Javascript의 성격적인 차이이다. 대부분의 초등 프로그래밍 교육 교재 언어들은 프로그래밍 도구 차원에서 어떤 기능의 활용 한계를 설정하고 그 한계 내에서 사용자들이 그에 적합한 몇가지 제시되는 일을 하는 창의성이 떨어지는 폐쇄적인 활용에 쓰일 분이다. 이에 비해 Javascript는 사용자들이 특정한 기능을 요구하거나, 특수한 상황에서도 어떤 기능이 무리없이 수행되기를 기대한다. 그리하여 기능들을 다양하게 적용 하고자 한다. 수행 환경인 웹 브라우저는 애초에 이를 염두에 두고 Javascript를 지원해야 하고, 한계가 있는 부분에 대해서는 최대한 빨리 개선하고자 노력한다.

이러한 성격적인 차이는 웹 브라우저가 Javascript의 기능을 안정시키고 이 기능의 안정이 자유로운 활용으로 연결되는데 그 바탕이 된 것이다.

Javascript의 활용폭은 이외에도 매우 넓다. Javascript와 순수한 HTML 문서 부분은 코드 상에서는 분리되어 있으면서 기능적으로는 연동되고 있다. 이를 이용하여 디자인과 로직을 분리해내는 간단한 멀티 티어 개념을 약식으로 구현하여, 웹 사이트 제작과 관리의 효율성을 높이는 방법이 있기도 하다. 또 간단한 반복 처리의 경우 서버 부담을 덜기 위해 처리 작업을 Javascript로 전가하는 예도 실제 상용 웹 애플리캐이션 운영에서 자주 관찰된다.

심지어 Javascript는 일종의 트로이 목마를 제작하는데도 널리 사용되고 있다. 이러한 채팅이나 게시판, 홈 페이지나 그 외의 네트워크 커뮤니티상의 트로이 목마를 흔히 □폭탄□이라고 하는데, 이는 네트워크 커뮤니티가 성숙되며 발달하면서 나타난 흥미있는 부작용 중의 하나로, 다양한 활용례들이 관찰되고 있다.

실례로 상당한 영향력을 가진 인터넷 언론사인 □딴지일보□에서는 Javascript를 이용한 간단한 트로이 목마를 웹사이트의 시작 장면에 어느 정도 활용하여, 12월 초에 자사의 반미(反美)논조를 표현한 바 있다.

표  웹 채팅 사이트에서 자주 발견되는 화면을 보이지 않게 하는 Javascript 트로이목마

<IMG SRC="." BORDER=999999999999><A HREF="" ONMOUSEOVER ="document.bgColor='black'">암흑</a>

II.5. 초등 프로그래밍 언어로서 Javascript의 한계점과 보충방향

Javascript는 그 모습이 고정된 것이 아니라 항상 발전하고 변화해 왔다. 따라서 그 어떤 언어 보다도 그 언어의 단점을 지적하고 개선 방향을 토론하는 작업이 생산적인 일이 될 수 있다.

대부분의 언어가 그 표준을 어기는 독창적인 변혁이 호환성의 장애와 언어 자체의 정체성에 대한 문제제기로 연결되기 쉬운데 비해, Javascript는 공개된 언어로서 역사적으로 이런한 방법으로 많은 기능들이 추가되어 왔고, 그 구조가 진보해 왔으므로, 이러한 논의에 실제적인 가치가 있다 할 것이다.

Javascript는 많은 장점들에도 불구하고, 다른 언어들에 비해 결정적으로 뒤지는 몇 가지 단점들이 있다. 이러한 점들은 초등 프로그래밍 교육 교재로서 Javascript의 위상을 떨어뜨리기보다는 대체로, 교육 언어로서 Javascript가 그 활용 가능성의 제약을 갖게 되는 요소들이 된다.

크게 세 영역으로 나누어 Javascript의 성격과 구조 상의 문제점, Javascript의 기능상의 문제점, Javascript 작업 현실에 있어서의 문제점에 대해 논의 해 보겠다.

그림7 Javascript 문제점 정리 도표

먼저 Javascript의 성격과 구조 상의 문제점은, Javascript가 애초부터 실체가 있는 프로그래밍 언어로 출발한 것이 아니라, Livescript라는 특정 웹 브라우저 기능의 한 부분으로 출발했다는 것에 그 깊은 연유가 있다.

이러한 기원은 대체로 프로그래밍 언어를 공개시켜서 융통성있고 진보가 빠른 언어가 되도록 하는 장점으로 작용함을 앞서 언급했으나, 여기에는 몇 가지 필연적인 단점 역시 공존한다. 이는 대체로 장점이 곧 단점이 되는 것들이다.

대표적인 두 가지 문제점은 언어의 확고한 표준이 존재하지 못한다는 점과, 특정 회사의 웹 브라우저에 사실상 Javascript가 묶이고 소유되는 현상이 나타날 가능성이 있다는 점이다.

언어의 확고한 표준이 정립되지 않았다는 점은 소유되거나 독점되지 않는 언어의 어쩔 수 없는 특성이긴 하나, 비슷한 정도로 널리 제약없이 통용되고 있는 언어인 C의 경우 1989년 Ansi-C의 확립으로 최소한의 기준이 명확히 제시되었다. 그리하여 대부분의 프로그램들은 Ansi-C로 기술되어 있으면 어느 곳에서건 쉽게 작동시킬 수 있다.

Javascript의 경우 최소한의 공식적인 기준이라는 것 또한 전혀 협의되지 않았기 때문에 결국은 관습상의 편리성만이 유일한 호환성의 기준이다.

대체로 현재는 Internet Explorer가 최초로 Javascript를 지원하기 시작한 Internet Explorer 3.0 이후, 최초로 Javascript가 자리를 제대로 잡은 Internet Explorer 4.0이 지원하는 Javascript를 지원해야만 최소한의 Javascript를 지원하는 브라우저라고 취급된다. 또  다양한 확장 기능을 사용하지 않는 호환성 높은 공통적으로 동작할  프로그램을 작성하려는 개발자 역시 Internet Explorer 4.0 수준의 Javascript만을 사용하면 어디서나 통용된다고 믿고 소스 코드를 작성한다. 실제로 대부분의 연산 기능과 라이브러리 형태로 처리되어 있는 기능을 제외한 기본 기능들은 이 수준에서 대부분의 웹 브라우저에서 공통적으로 똑같이 사용할 수 있다.

그러나 보다 다양한 기능을 사용하기 위한 코드를 작성할 때는 수많은 웹 브라우저 중에서 그 기능이 강력하면서도 보급률이 높은 Internet Explorer 5.0이 지원하는 Javascript의 기능을 대체로 표준으로 공유하는 편이다.

이렇게 특별한 공식화된 규정화 없이 특정 회사 제품에 대해  기준을 설정하는 것은 많은 Javascript 프로그래밍에 혼란을 가져 올 수 있다. 대표적으로 Javascript의 문자열의 색인을 세는 방식과 시간/날짜에 대한 라이브러리 클래스가 사용하는 규약들이 웹 브라우저들마다 제 각각이다. 특히 웹 브라우저 시장에서 양대 축을 형성 하고 있는 Internet Explorer와 Netscape Navigator가 두 가지 측면에서 완전히 다른 입장을 고수하므로 매우 빈번히 사용될 수 있는 이와 같은 라이브러리를 활용하는 정보 처리 프로그램은 서로 다른 브라우저에서 수행되지 않을 수 있다. 보다 더 심각한 문제는 수행은 잘 되었으나, 실제로 내부에서는 프로그래머가 의도한 바와는 다르게 실행되어 잘못된 결과를 출력하고 사용자로 하여금, 이 잘못된 결과를 믿게 하여, 판단에 잘못된 근거를 제시하는 것이다.

반대로, 현실적으로 어느 정도 굳어져 가는 Internet Explorer의 Javascript 규준을 받아들이는 것에는 또 다른 근본적인 문제점이 있다.

특정 회사 제품에 의존적인 Javascript 코드들을 표준적으로 간주하여 사용하는 것은 Javascript라는 언어 자체와 그 활용을 그 회사의 소유로 유도해가게 된다. 이는 Javascript의 근본적인 배경과 여기에서 오는 장점들을 스스로 파괴하는 모순적인 일이다. Javascript는 개방된 언어로 특정한 소유자가 없으며, 자율적으로 발전하고 정의되었으며, 어느 플랫폼에서나 동작시킬 수 있는 호환성 높은 언어라는 장점이 잠식당하는 것이다.

날짜, 문자열 처리 외에 또 한가지 중대한 호환성의 문제는 Javascript로 간단한 애니메이션 처리를 할 때 자주 사용되는 레이어와 스타일 시트에 관한 것이다. 이 점에 대한 표준과 Javascript를 통해 조정하는 방법이 많은 웹 브라우저에서 서로 차이가 있으므로, 어떤 한 웹 브라우저에서 아름답게 동작하는 애니메이션이나 게임이 다른 웹 브라우저에서 심각한 오류를 보이며 깨질 수 있다.

이러한 호환성과 종속성 사이의 갈등은 Javascript를 교재로 수행하는 초등 프로그래밍 교육을 최대한 통용되는 Javascript의 수준을 중심으로 수행하도록 하는 소극적인 방법으로 혼란을 막을 수 있다. 한편 이러한 호환성의 단점은 결국은 절대적인 호환성 보장에 문제가 있을 뿐이지, 특정 개발환경이나 컴파일러, 수행 OS환경에 절대적으로 종속적인 타 언어에 비한다면 훨씬 그 사정이 나은 편이다. 표준에 대한 대중적인 기준이 Internet Explorer에 편향적인 것에 대한 우려도, JAVA라는 언어의 개발과 표준안에 대해 사실상 전적인 소유권을 갖고 있는 Sun microsystems의 독점성에 비할바는 아니다.

다음으로 Javascript의 기능상의 몇몇 문제점들은 대체로 사소하고 구체적인 사항들이면서도, 활용 실제와 교육 현실에서 상당히 아쉬운 점들이다.

초등 프로그래밍 교육용 언어로서 한가지 중대한 Javascript의 부족한 점은 상당수의 웹 브라우저들이 함수의 재귀적 호출을 지원하지 않는 다는 것이다. 명령 집합의 재귀적 호출을 통한 알고리즘은 개념 자체가 가능성이 무궁무진하며, 그 이해와 개발에서도 상당히 많은 논리적인 사고의 진보를 가져 올 수 있으므로, 실제에서의 응용 효율을 떠나서 프로그래밍 교육에 있어서는 매우 중요한 개념이다.

물론 FORTRAN I과 FORTRAN 90을 제외한 대부분의 FORTRAN 언어 역시 변수가 실행시간에 기억장소가 결정되는 것이 아니었으므로 함수의 재귀적 호출을 사용할 수 없었음에도 불구하고 매우 긴시간 동안 광범위한 계산 분야에 널리 응용되긴 하였다. 이는 함수 재귀적 호출이 실용에 필수적이지는 않음을 보이는 예시가 될 수는 있겠지만 여전히 교육적인 가치로서의 가치는 무시할 수 없다.

다행히 현실적인 표준안으로 또다시 자리잡아가고 있는 Internet Explorer의 최신 버전에서는 함수의 재귀적 호출을 지원하고 있다. 이러한 점은 역시 Javascript가 유연성을 얻게되는 그 진화의 특성에 기인한 것으로, Javascript의 초등 프로그래밍 교육 언어로서 가치를 높여 준 것이다. 여전히 확고한 표준안의 부재로 함수의 재귀적 호출을 초등 프로그래밍 교재로서 Javascript에 규정상 포함시켜야 하느냐 마느냐 하는 것은 논란의 여지가 있다.

무엇보다 아쉬운 Javascript의 문제점은 파일 입출력을 사실상 전혀 지원하지 못한다는 점이다. Cookie를 사용하여 아주 단순한 정보를 파일에 기록하고 읽는 작업 이외에는 Javascript는 그 어떠한 파일 입출력 방법도 기본적으로 지원하지 않는다.

이것은 Javascript가 애초에 접근이 열려 있는 웹 페이지에 기능 도모를 위하여 개발되었으므로 갖고 있는 태생적인 한계점이다. 이는 특정한 웹 페이지에 접속했을 때, 클라이언트 측의 자료를 함부로 유출하지 못하고, 자원을 마음대로 사용-조작하지 못하게 하기 위한 근본적인 조치로서 파일 입출력과 관련된 기능은 일체 포기한 것이다. 이러한 제약하에서 최소한의 기록 필요를 위해서 Cookie라는 억지로 보안을 유지하는 적은 영역을 사용할 수 있도록 조치한 것이라 하겠다.

파일 입출력은 대용량의 자료를 처리하기 위해 필수적으로 필요한 작업임과 동시에, 일반 상용 응용프로그램이 데이터를 처리하고 사용하는 가장 보편적인 방법이다. 따라서 Javascript로 제작한 프로그램이 업무 처리 분야에 있어서 그 실용성을 완전히 확보하기 위한 가장 중대한 조건이다.

구체적으로 많은 경우, 간단하고 쉬운 프로그래밍 언어로 쓰이는 작은 업무용 프로그램의 용도는, 응용 프로그램의 매크로 기능으로 처리하기 어렵거나 마땅한 변환 프로그램이 없는 파일들간의 서식을 변경하는 것이다. 이런 업무에 있어서 파일 입출력 기능은 필수적인 것인데, Javascript는 충분한 문자열 처리 능력을 보유하고 있음에도 불구하고 파일 입출력 기능의 부제로 이러한 용도로 활용하기가 어렵다.

뿐만아니라, 단순한 유틸리티에서 게임이나, 워드프로세싱의 기초로 쓰이는 에디터, 일종의 웹에디터와 같은 응용프로그램에 이르기까지, 다양한 실용 프로그램들이 파일 입출력을 필요로 한다. Javascript에 파일 입출력 기능을 추가하는 것은 이러한 맥락에서 Javascript를 단순한 웹 브라우저에 딸린 스크립트 기능이 아니라 더욱 일반적인 언어이자, 초등 프로그래밍 교육용 언어로서 자리매김할 수 있는 주요한 방법이다.

Javascript에 document객체와 비슷한 방법으로 입출력이 가능한 로컬 파일에 입출력할 수 있는 객체를 하나 만들어 두고, 그 작동 수행에 대한 인증 절차를 엄격히 해 둔다면, 인터넷 상의 보안을 일정 수준으로 유지하면서도 Javascript를 전혀 새로운 차원에서 활용할 수 있으리라 본다.

비슷한 맥락에서 Javascript가 간단한 네트워크 기능을 갖는 것도 그 필요성이 큰 요소라 할 수 있다. 이미 Javascript는 HTTP로 특정 웹 문서를 가져오고 그 내용에 접근할 수 있으므로, 실제로 웹 상에 공개되어 서버로 쓰이고 있는 시스템에서 파일 입출력만 자유롭게 할 수 있다면, 기능적인 불편함이나 약간의 구조상 기형성은 있겠지만 네트워크를 통한 통신이 즉시 가능하다.

파일 입출력이 지원된다면, 몇가지 간단한 편의적인 메소드를 적당한 객체에 추가함으로서 편리하고 구조적인 네트워크 기능도 설치할 수 있을 것이다. 이러한 일련의 기능들은 Javascript를 전문적인 애플리캐이션 개발용 언어와 버금갈 정도의 수준으로 향상 시키는 것이다.

이러한 생각은 프로그램 개발 작업 혹은 프로그래밍을 닫혀 있는 조직의 일부 사람들이 닫혀 있는 개발 환경을 이용하여 수행하는 것에서, 열려 있는 대중이 열린 개발 환경을 통해 수행하는 것으로 바꾸어 나간다는 움직임과도 일맥상통 한다.

그 외에 Javascript의 기능상의 문제점으로 지적될 만한 것은 배열에 대한 표현이 많은 다른 언어들과 상당히 다르게 낯설다는 것으로, 실제로 내부 처리가 진정한 배열의 의미와는 거리가 있고, JAVA와도 상당히 다르다는 점이다.

그러나 이 점은 오히려 Javascript 언어 구조의 일관성이 있다는 점에서 그 단순성과 직교성을 확보하고 있고, 현실적인 코딩 작업 상에서 큰 불편이 없다는 면에서 큰 문제점은 아니다.

Javascript의 작업 현실에 있어서 문제점이란 몇가지 Javascript라는 언어를 수행하는 개발 환경과 개발 도구에 관한 문제점을 말하나.

Javascript를 포함한 수많은 인터프리터 기반으로 설계된 언어들이 갖고 있는 공통적인 필요성이 바로, 단독으로 프로그램을 실행할 수 있는 컴파일러의 존재이다.

이는 과거 Quick Basic이 Basrun.exe와 같은 프로그램과의 연동으로 베이직 프로그램을 컴파일 했던 것이나, 많은 DLL들을 이용하여 비주얼 베이직이 베이직 코드를 컴파일 하여 작동하는 것을 고려 할 때와 같은 성격의 필요성이다.

컴파일 후 독립된 프로그램을 수행하는 것은 단지 특정한 환경없이 단독으로 수행된다는 점에 대해 프로그램 자체의 품격을 높여주는 효과외에도,  잘 설계된 컴파일러라면 프로그램의 작동 효율을 비슷한 정도로 잘 설계된 인터프리터 보다 훨씬 더 높일 수 있다.

Javascript 문법 자체를 선언하고 많은 라이브러리 객체들을 근본부터 지원하는 컴파일러와 제반 자원들을 모두 만드는 것은 쉬운일은 아니겠으나, 단순히 하나의 파일로 단독 수행 가능한 이진 코드를 만들어 내는 것이 목표라면 컴파일러의 개발 자체는 그렇게 힘든 일은 아니다.

컴파일러의 지원과 긴밀히 결부되어 제시될 수 있는 문제점은 바로 소스 코드 보안 기능의 향상이다. Javascript는 그 소스 코드가 완전히 드러나 있기 때문에 개발자 스스로의 배타적 권리를 주장하는 것이 사실상 불가능하며 통념적으로도 받아들여지기 어렵다.

컴파일러의 또한 가지 특징은 복잡한 소스 코드들을 모두 환원적으로 해석해서 도저히 인간은 이해할 수 없는 이진 코드로 완전히 바꾸어 버린다는데 있다. 그래서 컴파일 과정에서 실행 가능한 파일을 만들고 나면, 이 실행 파일에서 다시 애초의 소스 코드를 찾아낸다는 것은 불가능하다.

그러므로 많은 상업 프로그래밍는 컴파일러를 사용하여, 컴파일된 이후의 실행가능한 이진 파일만을 배포하고, 자신들은 소스 코드를 따로 보존함으로서 자신들의 기술과 노력이 담긴 소스 코드를 조사 할 수 없도록 한다. 요컨대 단독 실행의 편이성 및 성능 향상가 소스 코드 보안을 달성하기 위해 컴파일러가 Javascript에도 필요하다는 것이다.

그러나 사실 Javascript는 웹 브라우저 라는 사실상 모든 컴퓨터에 다 구비되어 있는 자원만 있으면 쉽게 구동할 수 있는 아주 널리 퍼진 인터프리터 언어이므로, 비록 단독 실행은 아닐 지라도, 실행 자체의 제약은 거의 없다. 또 초등 프로그래밍 교육의 수준에서 필요이상으로 강력한 계산 효율은 의미가 없는 경우가 많다.

또한 교육 프로그래밍의 특성과 여러 가지 다른 측면에 적합한 완전히 개방, 공개된 프로그래밍 언어일수록, 이를 이용해 제작한 소스 코드가 원천적으로 완전히 공개되는 편이 의의도 있고 현실에서 유리할 수 있다.

그러나 규모가 큰 프로그램의 개발에서도 Javascript의 장점을 선전하거나 상업적인 가치를 내세우고자 한다면, 소스 코드에 대한 암호화 방법 혹은 컴파일러 제작과 관련된 보안이 더욱 중요한 가치일 것이다.

또 Javascript 프로그램 개발을 위한 전문적인 IDE가 사실상 전무하다는 점 역시 문제로 제기 될 수 있다. 대부분의 프로그래밍 언어들은 특정 환경에서 최적화된 고도의 IDE를 갖고 있는데, 이는 Microsoft Visual Studio와 Boland사의 수많은 개발 도구 제품군으로 상징된다.

IDE를 이용하면 코딩 자체가 간편해지고 디버깅이 편해진다. 뿐만 아니라 대형 프로그램을 작성하거나 여러 명이서 공동작업을 하는데 대한 필요들을 IDE가 제공할 수 있으며, 무엇보다 프로그래밍 작업에 항상 참고가 되고 도움을 주는 많은 레퍼런스들을 온라인으로 지원하는 것이 IDE의 편리성이다.

그러나 어떠한 환경에서도 웹 브라우저만 구비되어 있으면 당장 프로그램을 작성하고 돌려볼 수 있다는 Javascript의 기본적인 특성을 살리려 한다면, 이러한 IDE를 전면적으로 개발하고 보수하는데 치중하는 것이 큰 과제는 아니다. 오히려 Javascript의 표준화나 기능, 활용법에 대한 체계적인 문서를 집성하는 작업이 더욱 중요할 것이다.

그 밖에 Javascript의 유연한 문법 기능 때문에 오히려 추후에 전문적으로 다른 프로그래밍 언어를 익히는데 문제가 있을 수 있다.  때문에, 확실한 형변환, 세미콜론만으로 문장을 종결하도록 하는 것, 문자열에 작은 따옴표 혼용 금지와 같은 몇가지 엄격한 기준들을 필요에 따라 도입할 수도 있을 것이다.

즉, 일반적인 Javascript 프로그램은 뉴라인 문자로도 하나의 문장의 끝을 나타낼 수 있고, 형변환이 자유롭게 일어나는 경우를 인정하기는 하지만, 실행시에 혹은 소스 코드의 앞부분에 이런 경우의 해석을  선택할 수 있도록 명시한다는 것이다. 그래서 뉴라인 문자로 하나의 문장의 끝을 나타낸다거나, 무심코 명시적이지 않은 형변환을 하려 할 때, 고의적이고 강제적으로 오류나 경고를 발생시킨다는 것이다.

이를 통하여 Javascript가 보다 세밀하고 분명한 색채를 가질 수도 있을 것이며, 여러 가지 부분에 대한 실수를 예방할 수 있다. 한편으로 C, C++, JAVA, C#과 같은 언어를 사용하는데 있어서 교육적으로 보다 바람직한 코딩 습관을 들일 수 있다.

이러한 일련의 한계점들을 보충해 나가기 위한 방편으로 가장 현실적이면서도 우선시 되어야하는 것은, 바로 교육용 Javascript 표준안의 합의와 제정 및 명문화이다.

Javascript가 열린 언어의 특징을 갖는 이상 언어 전체의 스펙과 기능을 JAVA나 C#처럼 사실상 1개 단체에서 독점적으로 한정해 놓는 것은 옳지 못하겠지만, 최소한의 기준 설정은 초등 프로그래밍 교육에 있어서 아주 중요한 것이다.

이미 널리 통용되고 있는 Internet Explorer 4.0 수준이라는 기준하에 혼란이 있을 수 있는 여지들을 합리적이고 인터넷 웹 문화상에서 다수가 지지하는 방향으로 규정해 나간다면, 이와 같은 교육용 Javascript 표준안은 널리 받아들여질 수 있다.

최초로 Javascript를 대중적인 초등 프로그래밍 교재로서 대규모로 도입하는 공식적인 기관 혹은 영향력있는 단체에서 합리적인 교육용 Javascript 표준안을 제시하여 널리 교육한다면, 이 표준안은 부담없이 일반적인 Javascript 활용층에 보급될 것이다.

이러한 표준안의 일부에 앞서 언급한, 몇 가지 Javascript에 보충적으로 포함될 수 있는 기능인 파일 입출력 및 네트워킹 기능을 정의하여 제시한다면, 자연스럽게 Javascript의 기능 확장과도 연계 시킬 수 있다.

이상을 수용하는 Javascript 표준안은 대체적으로, 그 구성이 3단계의 계층적 성격으로 내용을 구분하여 정리할 필요가 있다.

1단계는 □Internet Explorer 4.0 수준□에서 기본적으로 요약되는 이미 Javascript활용의 일반에서 공통적으로 사용되는 사항을 명문화해 놓은 것으로, 아무런 장벽없이 모든 Javascript 프로그래머에게 수용가능한 사항이다.

2단계는 현재 일부 웹 브라우저에서만 지원하는 기능을 표준으로 택하는 것이나, 웹 브라우저들간에 그 작동이 서로 다른 기능들 중에서 수행결과의 통일적 표준을 확립하는 것이다.

이는 앞서 언급한 날짜, 문자열 처리와 같은 부분을 하나의 단일화된 규정으로 설정하는 것과, 일부 웹 브라우저에서만 지원하는 함수의 재귀적 호출 기능, 레이어 혹은 스타일 시트 지원 기능을 표준안의 일부로 받아 들이는 것을 포함한다.

이러한 점은 보다 호환성 높은 Javascript 프로그램을 작성하고자 하는 프로그래머와 표준안에서 배제된 웹 브라우저를 실행 환경으로 선호하는 프로그래머에게는 불편한 점이 될 수 있다.

그러나 인터넷에서 현실적으로 널리 퍼져 사실상 공통적으로 쓰이는 기능 및 규정과 일부 웹 브라우저에서만 기능이긴 하나 프로그래밍 일반에서 반드시 필요한 기능을 명문화하는 것이므로 최대한 부담이 적은 타협안이 될 것이다. 2단계는 그 성격상 표준안 확립의 가장 핵심적인 사안이자, 표준안 확립이라는 의미 자체와 가장 부합하는 사안이다.

3단계는 파일 입출력, 네트워킹과 같은 현재는 지원되지 않는 기능들이나 Javascript 프로그래밍의 일반화를 위해 필요하다고 생각되는 기능들을 미리 표준화 해 두는 설정이다. 여기에는 앞서 설명한 명령 해석의 조건부 문법 엄격화 기능이나, 소스 코드 보안 암호화 및 컴파일러 관련 규정을 포함할 수도 있을 것이다.

3단계 설정은 사실상 새로운 기능을 열린 Javascript의 진화 체계에 도입하는 작업이라 할 수 있는데, 이는 이러한 표준안을 채택하는 웹 브라우저가 얼마나 널리 보급되고, 이를 사용하는 초등 프로그래밍 교육 작업이 얼마나 큰 규모로 진행되는지에 달려 있을 것이다.

그림8 Javascript 교육용 표준화 방안

이러한 일련의 새로운 기능과 새로운 표준안을 준수하기 위해서는 Javascript를 해석, 실행 가능한 새로운 웹 브라우저의 개발역시 필요하다.

) 파일 입출력 기능을 웹 브라우저에 추가하는 것과 Javascript 컴파일러 제작에 관한 간단한 방법들을 부록에 소개하였다.

III. 결론

학원 교육의 현장에서 비전문 일반에게 프로그래밍의 개념을 처음으로 교육하는 기회가 Javascript를 사용하는 시점에서 자생적으로 자리 잡고 있다는 점은 주목할만하다. 이는 전산 개발이 발전과 변화를 주도하는 것이 아니라, 전산 활용이 자연적인 흐름을 형성하여, 특정한 재원을 확산시키고 고착화시키는 주요한 예라고 할 수 있다.

구체적으로 웹 개발의 급격한 수요 증가에 따라 전산 활용과 프로그래밍에 대한 경험이 전무한 미술 디자이너들은 웹 사이트 개발에 참여하게 된다. 이러한 상황에서 처음으로 접하게 되는 프로그래밍 작업이 Javascript를 이용한 간단한 활용이고 Javascript는 이러한 필요를 충족 시키는 독특한 특징들을 갖고 있다. 따라서 초등 프로그래밍 교육 언어로서 Javascript는 분명한 우월성을 지니고 있다.

Javascript의 총 도입 비용 고려에서 절대적으로 우수한 비용상의 장점과 융통성 있으면서도 다각화되어 있는 체계적인 언어 구조는 단순한 프로그래밍 교육에서부터 자연스럽게 구조적 프로그래밍과 객체 지향 프로그래밍을 이해하는데 그 어떤 언어 보다도 적합하다. 뿐만 아니라 Javascript는 가장 실용적으로 즉각 활용할 수 있는 언어이며, 그 실행환경인 웹 브라우저의 Javascript 지원 능력도 안정적이고 성능 역시 고도화되어 있다.

Javascript는 몇 가지 문제점을 갖고 있기는 하나, 이는 비교적 쉽게 개선될 수 있는 사항이다. 이러한 개선의 핵심에는 Javascript 표준화 작업이 자리잡고 있는데, 사실상 초등 프로그래밍 교육 언어로서 Javascript를 도입하여 대중 일반 및 학생들에게 전면적으로 프로그래밍 교육을 실시하게 된다면, 어떤 언어가 되었든 표준화 작업은 필수적임을 생각한다면 Javascript의 개선과 진정한 범용 언어로서의 자리잡음도 희망적인 사안이다.

앞으로 실무적인 수준에서만 정의되고 구성된 Javascript 언어의 특징은  보다 공학의 영역인 학문적인 수준에서 엄밀히 설정되어 그 구조 및 지향성이 철저히 연구될 필요가 있다. 이러한 작업 역시 Javascript를 단순한 웹 페이지 치장 작업이 아닌 보다 넓은 범위의 영역으로 확대하는 데 필수적인 한 요소가 될 것이다.

초등 프로그래밍 교육은 최근의 교육 성향과 산업 구조의 발전 방향에 비추어 볼 때 언젠가는 넓은 영역으로 확산되어 공교육의 일부에 보다 전면적으로 도입될 부분이다.

이러한 중앙 집권적인 사업에 대한 의사 결정 과정은 대체로 현실적인 문제를 제대로 포착하기 어려우며, 비용과 활용의 문제를 도외시 하기 쉽다.

그 어떤 대상이 되든지 간에, 이러한 사업일수록 이미 도입된 환경을 최대한 활용하고, 또 교육 작업이 현실과 밀착하여 자연 스럽게 정착될 수 있는 창조적인 논의와 실험, 관찰 끝에 그 방법론과 구체적인 정책이 결정되어야 할 것이다. 그러한 맥락에서 초등 프로그래밍 교육 언어로서 Javascript를 고려하고, 그 특성에 대해 관심을 갖고 연구하는 것은 중요한 일례가 될 것이다.

역의 관점에서, 지금까지 초등 프로그래밍 교육 보급에 있어서 주요한 장벽은 프로그래밍 언어의 구입 비용, 설치 비용 및 교육 비용의 부담과 활용상의 비실용성이었다. Javascript는 이러한 장벽을 허무는 매체로서 프로그래밍 교육을 확산시키고, 정착시키는 한 가지 한 가지 촉발 수단으로서 사용될 수도 있다 하겠다.

참고 문헌

[1] 정보통신정책국,

정보통신부 홈페이지의 정보통신정책국 사이트 "IT중소, 벤처기업 정책자금 지원방향" 중 "국내외 IT산업 동향",  http://www.mic.go.kr/jsp/mic_d/d700-0001-1.jsp?code=F

[2] 한국인터넷정보센터, 한국인터넷정보센터 도메인 관련 사이트,

http://domain.nic.or.kr/

[3] 소프트윈, 소프트윈 홈쇼핑 사이트, http://www.softwin.co.kr

[4] 교보문고, 교보문고 웹 사이트, http://www.kyobobook.co.kr

[5] EMPAS, EMPAS 웹 사이트, http://www.empas.com

[6] 삼성전자, 삼성전자 웹 사이트, http://www.sec.co.kr

[7] 야후 코리아, 야후 코리아 웹 사이트, http://kr.yahoo.com

[8] DJUNA, DJUNA의 영화 낙서판 웹 사이트, http://djuna.nkino.com

[9] 정보통신부, 정보통신부 웹 사이트, http://www.mic.go.kr

[10] LostJungle, LostJungle Website,

http://www.lostjungle.com/games/dhtml/phong/index.shtml

[11] 컴퓨터와 인터넷, 가자! 자바스크립트 세상으로,

http://java.up2.co.kr/exam/ java103.html

[12] 컴퓨터와 인터넷, 가자! 자바스크립트 세상으로,

http://java.up2.co.kr/exam/java65.htm

[13] Scott, Michael L., Programming Language Pragmatics, Morgan Kaufmann Pub, 1999

[14] Koch, Stefan, Voodoo's Introduction To Javascript(PDF Online Document), 2000

[15] Netscape, Javascript Reference (Netscape Navigator3+) (Online Document), 1997

[16] Ghezzi, Carlo/ Jazayeri, Mehdi/ Mandrioli, Dino, Fundamentals of Software Engineering, Prentice Hall, 2002

부록 : 단독 실행을 위한 컴파일러와 파일 입출력 및 네트워크 기능등의 Javasciprt 기능 추가를 위한 새로운 웹 브라우저 작성에 관한 간단한 편법

새로운 웹 브라우저의 개발은 간단한 기능 향상을 위해서는 객체 지향 프로그래밍의 현실에서 사실상 어렵지 않게 도입할 수 있다.

대부분의 일반적인 컴파일러 개발환경에서 현재 웹 브라우저를 하나의 클래스로 개발 중인 애플리케이션에 도입할 수 있다. 새로운 기능을 추가하는 웹 브라우저는 다음과 같이 작성될 수 있다.

웹 브라우저가 문서를 HTTP로 가져와서 그것을 화면에 표시하고 Javascript를 수행하는 과정 사이에 새로운 Javascript 기능 해석기를 삽입한다.

즉 웹 브라우저가 문서를 HTTP로 가져온 확장된 기능을 사용하는 Javascript는 새롭게 프로그래밍 한 해석기에 의해서 대응하는 예전의 확장된 기능이 없는 형태의 Javascript로 변환된다. 이것을 보통의 웹 브라우저에 최종적으로 넘기면, 복잡한 해석기능과 라이브러리 함수의 실제를 구현하지 않고도 Javascript의 기능을 확장한 웹 브라우저를 구현할 수 있다.

이러한 기법은 세미콜론과 뉴라인 문자 명령 종결 중 어느 한 가지 만을 허용하거나, 형변화의 엄격성을 소스코드에서 선언적으로 조절할 수 있는 조건부 문법 엄격화 기능을 가장 간단히 구현할 수 있는 방법이다.

파일 입출력등 한편 실행시간에 추기 처리해야할 기능에 대해서는, 다음과 같은 편법이 가능하다.

확장 Javascript를 해석하는 중간 부분에서 파일 입출력이나 네트워킹 등의 기능을 수행하는 명령을 타이틀 바 내용의 변경이나 화면 하단 상태 바 내용 변경, 임시적인 Cookie의 작성과 같은 프로그램 수행에 결정적인 영향을 미치지 않는 동작이지만 구별되는 기호가 있을 수 있는 것으로 바꾼다.

그리고 웹 브라우저 객체가 실행시간에 Javascript를 수행할 때, 이렇게 특정하게 바꾼 행동을 수행하는 부분에 선별적으로 발생하는 동작을 감지하여 확장 기능이 실행되는 프로그램을 추가한다.

예를 들면 다음과 같다.

확장된 Javascript가

file("test.txt").alert("Hello World!");

와 같은 구문을 해석하면, test.txt라는 파일에 "Hello World!"를 추가하는 기능을 수행한다고 하자. 이 기능을 지원하는 웹 브라우저는 HTTP가 이 문서를 가져온 직후에 새로운 해석기가 중간에서 끼여들어 동작한다. 이 해석기는 Javascript 구문에서

file(...).alert(...)

이라는 문구를 발견하면 이것을

window.title = "#FILEAP#:....>>...."

로 변환한다. 즉 주어진 구문은

window.status = "#FILEAP#:Hello World! >> test.txt";

로 변환된다.

웹 브라우저 클래스는 화면 하단 상태바 내용을 출력하는 부분에 파일 입출력 기능이 오버라이딩 되어 있다. 그 내용은 상태바 내용 출력이 #FILEAP#로 시작하면, 상태바에 출력되는 내용을 토대로 특정 파일에 어떤 내용을 덧붙이는 기능을 수행하는 것이다. 그러면 실행시간에 결과적으로 소스 코드가 서술한 확장 기능을 수행하는 셈이 된다.

이러한 편법은 진정한 의미의 객체 지향과는 거리가 있으며, 몇몇 부분에서 제약이 있을 수 있는 단점이 있으나, 기능을 웹 브라우저에 추가하여 Javascript를 확장하는 작업이 그다지 어렵지 않다는 한가지 예시가 된다.

Javascript의 단독 실행을 컴파일에 대해서도 한가지 좋은 편법이 있다. 이것은 많은 ZIP 압축 유틸리티가 지원하는 자동 압축 풀림 파일과 같은 방법을 사용하는 것이다.

즉 웹 브라우저 자기 자신과 거의 동일한 웹 브라우저의 실행 파일을 복사하고 이 파일의 뒷부분에 Javascript 프로그램을 담고 있는 문서를 덧붙여 써둔다. 이 실행 파일은 동작이 일반적인 웹 브라우저와는 약간 다른데, 그것은 수행 즉시, 자기 자신 파일의 뒷부분에 있는 문서를 읽어 들이도록 한다. 그러면 자연히 웹 브라우저 화면에 애초의 Javascript 소스 코드를 로딩하게 되고, Javascript 수행을 포함한 문서 표시 작업이 수행된다.

이것은 실제 Javascript가 사용하지도 않는 모든 자원까지 실행 파일 내부에 탑재하는 셈이므로 프로그램의 크기가 불필요하게 거대해 지고, 실제로 프로그램 자체를 컴파일한 것이 아니므로 수행속도가 빨라지지도 않는다. 그렇다면 웹 브라우저는 모든 환경에서 기본적으로 구비하고 있는 것이 보통이므로, 이러한 형식의 단독 실행이 실질적인 의미가 있다고 보기는 어렵다.

그럼에도 불구하고, 이러한 간단한 방법만으로 Javascript가 단독으로 실행될 수 있도록 흉내내는 것은 프로그램 전체의 모양새를 좋게할 뿐만아니라, 간단한 소스 암호화-복호화 로직을 겸비한다면, 상당히 효율이 좋으면서도 간편한 방법으로 Javascript로 제작한 프로그램의 소스 코드 보안을 구현할 수 있다.

이는 Javascript 소스를 이용하여 단독 실행 가능한 실행 파일을 만들 때 쓰이는 원본 웹 브라우저에 자동 수행 기능 뿐만아니라 복호화 기능을 추가하도록 한다. 그리고 실행 파일 뒷 부분에 소스 코드를 덧붙이는 단계에서, 암호화 하여 덧붙인다. 이렇게 제작된 실행파일은 자기 자신 뒷부분의 소스 코드를 읽어 들인후 복호화 하여 Javascript 코드를 원래대로 해독한 다음 웹 브라우저에 넘기게 된다. 이러한 방법을 통해 간단히 프로그램이 수행되게 하면서도 단순히 프로그램의 내용을 살펴보는 것 만으로는 소스 코드를 알 수 없도록 할 수 있다.