자바스크립트를 잡아라.-01

ksskor의 이미지

안녕하세요. 송기석입니다.

날씨가 점점 추워지는 가을입니다.
요즘 저는 Node.js 프로그램에 빠져서 살고 있습니다.
Node.js 프로그램은 자바스크립트를 기반으로 하는 서버사이드 개발 프로그램입니다.
Node.js 관련 글을 올리기 전에 자바스크립트에 대하여 쓰도록 하겠습니다.

자바스크립트 하면 제일 먼저 떠오르는 것이 자바입니다.
자바랑 자바스크립트는 다른 언어입니다.
그런데 대부분 자바스크립트를 말하면 자바랑 같이 묶어서 생각하는 경향이 있습니다.
역사를 통해 좀더 자바스크립트에 대하여 알아보도록 하겠습니다.

자바의 역사

썬(SUN)사는 1980년대 말에 전자제품을 디지털 신호로 움직일 수 있고,
전자제품끼리 정보를 주고받을 수 있는 시대가 곧 올 것으로 예상했습니다.
이를 실현하려면 전자제품의 플랫폼(embedded)에 영향을 받지 않는 프로그램을 실어야(porting)했습니다.
패트릭 노턴(Patrick Naughton)과 마이크 쉐리던(Mike Sheridan), 제임스 고슬링(James Gosling)은
1990년 12월에 Green Project를 시작했습니다.
그 결과 무선 PDA Sart 7을 완성하고 탑재 언어 Oak를 개발했습니다.
1993년에는 기계의 OS에 상관없이 실행할 수 있는 웹 언어를 연구하여 Oak라는 이름을 붙였습니다.
그런데 이미 같은 이름의 언어가 있어서 Java로 바꾸었습니다.
1994년에 제임스 고슬링(James Gosling), 아더 반 호프(Arthur Van Hoff), 앤디 베춀쉐임(Andy Bechtolsheim)은
급격히 늘어남 웹 사용 추세를 따라잡으려고 자바를 동적 웹 프로그램에 적용해 보았습니다.
자바는 인터넷 브라우저인 네비게이터(Navigator)에 탑재되기도 했습니다.
1995년에 웹에서 실행되는 프로그램 애플릿(applet)이 인기를 얻으면서 Hot JAVA라고도 불렀습니다.

자바스크립트의 역사

자바스크립트는 1995년쯤 netscape(넷스케이스)의 Brendan Eich(브렌단 아이히)에 의해서 개발되어
netscape 2.0B3에서부터 채택되었습니다.
처음에는 모카(Mocha)라는 이름으로 사용하다가, 라이브스크립트(LiveScript)라는 이름으로 개발되었습니다.
당시 java가 인기가 있어 그 유명세를 빌리려고 최종적으로 자바스크립트(Javascript)가 되었습니다.
자바스크립트라는 이름은 자바(Java)와 이름이 비슷하여 연관 있는 것으로 오해를 받았습니다.

자바스크립트와 자바

두 역사를 정리 하면 자바스크립트가 나오기 전에 자바가 나왔고 이것을 웹에 적용하여 사용하여 인기를 얻었습니다.
이것을 Hot JAVA라 불렀습니다. 후발 주자로 자바스크립트는 라이브스크립트라는 이름으로 개발 되었습니다.
자바와 자바스크립트는 같은 회사도 아니고, 같은 개발자도 아니며 언어적 사양도 다릅니다.
당시 인기가 있던 자바의 유명세를 빌리기 위해 이름을 자바스크립트로 한 것이
지금도 이름 때문에 많은 사람들은 자바와 자바스크립트가 서로 연관이 있는 것처럼 생각하도록 만들었습니다.
물론 마케팅측면으로 좋은 결정이라고 생각합니다.

좀 더 추가 설명으로 언어적 사양을 말하면 자바스크립트는
루비(Ruby)나 파이썬(Python)과 같이 경량 스크립트 언어나 리스프(Lisp)처럼 함수를 중심으로 하는 언어와 유사합니다.
단지 등장 초기에 자바와 보조를 맞춰 발전한 부분이 있어서 객체명이나 메서드명 등 자바와 비슷합니다.

이 글을 시작으로 자바스크립트의 이야기를 쓰겠습니다.
자바스크립트 이야기가 떨어지면 Node.js의 이야기를 쓰려고 합니다.
쓰다보니 글만 잔득있는 재미 없는 글이 되어버렸습니다. 다음번에는 그림도 넣도록 하겠습니다.
점점 추워지는 가을 곧 겨울이 올 것 같은 요즘 모두 감기에 조심하세요.

Forums: 
익명 사용자의 이미지

관련 있는건줄알았는데 전혀 무관하네요

vhgksl의 이미지

처음알았네요 ㅋㅋ

익명 사용자의 이미지

기대하고 있습니다~!!

twince의 이미지

잘 읽고가요~!

newbie server programmer

commonJS의 이미지

작성자 분의 내용에 추가하자면 현재 자바스크립트는 웹 브라우저 뿐만 아니라 서버 사이드 스크립트인 node.js(엄밀히 말하면 framework라 볼 수 있겠네요.)에 광역적으로 쓰이는 추세입니다.
또한, 최근에 떠오르고 있는 mean(mongo db + express.js + angular.js + node.js) stack을 이용해 자바스크립트 만으로 전체 인터페이스를 구상 및 개발할 수 있는 개념이 대두되고 있습니다.

node.js의 장점이 있다면 node.js의 경우 콜백 함수를 이용한 이벤트 비동기 I/O 처리(간단히 말해 멀티 스레딩 등을 할 때의 동기화 문제를 어떻게 하면 좀 더 효율적으로 처리할 수 있는가의 문제에 대해 고민해본 결과라고 생각합니다만...일종의 순서표를 받아 해당 이벤트에 진입하는 방식.. 비슷한 개념(?)일 수도 있는 멀티플랙싱과 비교 및 대조 해보시면 감이 오실듯 합니다.)로 인하여 요청 및 응답을 하여 좀 더 쾌적하게 구축할 수 있다와 기존에 클라단에서 자바스크립트를 만져보신 분들은 좀 더 친숙하게 서버쪽 프로그래밍을 할 수 있다는 정도를 예로 들 수 있겠습니다.

단점이 있다면 이 콜백함수라는 앞서 작성자 분께서 말씀하셨듯이 클로져라는 개념이 리스프의 그것(?)과 엄청 유사하다고 봅니다. (예를 들어, 익명함수를 통해 이벤트 콜백을 처리하거나 함수자체를 인자로 받아 쓰는 방식.) 따라서 이 개념의 이해가 선행되지 않는다면 ({(())});의 늪에서 해어나올 수 없게 됩니다. ㅠㅠ
그리고 이벤트 루프 기반의 비동기 I/O 체계이긴 하나 일단 프로세스 당 쓰레드가 하나이기 때문에(문서를 뒤져본 결과 프로세스 당 워커를 두어 처리하는 방법이 있다는 것으로 알고 있습니다만...) 이것이 오히려 단점이 될 수 있다는 지적아닌 지적이 존재합니다.

따라서 node.js를 쓸 시에 자신이 어떤 프로그램을 구상하고 개발하려 하는지가 중요하다고 생각합니다. :)

만약 위에 쓴 내용중에서 오류가 있는 부분은 정확히 지적해주신다면 더할나위없이 감사히 받아들이겠습니다. (저도 요새 관심을 가지고 보는 것들이라 정확한 개념을 잡기가 여간 쉽지가 않네요.)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.