본문 바로가기
Programming/JavaScript/HTML5

The Node Beginner Book

by 개Foot/Dog발?! 2014. 6. 17.

URL : http://www.nodebeginner.org/index-kr.html


이 문서에 대하여

본 문서의 목표는 Node.js용 애플리케이션 개발을 시작을 할 수 있게 만드는 것입니다. 그리고 함께 알아야 하는 “고급” JavaScript에 관한 모든 것을 다룹니다. 본 문서는 전형적인 “Hello World” 튜토리얼 보다는 더 많이 다룹니다.



상태

당신은 현재 이 책의 최종버전을 읽고 있습니다. 즉, 새로운 버전의 Node.js에 있는 변경사항들을 반영하거나 오류를 수정할 때만 업데이트 합니다.

이 책에 있는 코드 예제들은 Node.js 0.6.11에서 동작하는지 테스트 되었습니다.



대상 독자

이 문서는 저와 비슷한 배경을 가진 독자들에게 가장 잘 맞을 겁니다. 적어도 객체지향 언어 –루비, 파이선, PHP, 혹은 자바 같은 언어- 하나 정도에는 경험이 있고, JavaScript에는 약간의 경험만 있으며, Node.js는 이번이 처음인 분들 말입니다.

이미 다른 언어에 대한 경험을 가진 개발자들을 대상으로 한다는 말은 데이터 타입이나 변수, 제어구조 같은 것들을 이 문서에서 다루지 않다는 뜻입니다. 본 문서를 이해하기 위해서는 그런 기본적인 것들은 미리 알고 있어야 합니다.

하지만, JavaScript에서의 객체나 함수들은 다른 대부분의 언어들에 대응되는 것과 다르기 때문에, 좀 더 자세히 설명하겠습니다.



이 문서의 구조

이 문서를 마치는 시점에, 유저들에게 웹페이지를 보여주고 파일들을 업로드 할 수 있는 완성된 웹 애플리케이션을 가지게 될 것입니다.

이 유스케이스를 만족하기 위해 “충분한 정도”까지만 코드를 만드는 것에서 조금 더 나아가서, “세상을 바꾸는 정도”는 아닙니다만, 간결하지만 완결성있는 프레임워크를 만들어서 우리의 애플리케이션의 다른 부분들로부터 깔끔하게 분리할 겁니다.

우리는 Node.js에서 JavaScript 개발을 하는 것이 브라우저에서 JavaScript를 개발하는 것과 어떻게 다른지를 살펴보는 것으로 시작하려 할겁니다.

다음으로, “Hello World” 애플리케이션을 작성하는 훌륭한 오랜 전통을 따를 생각입니다. 그리고 그건 “무언가를 하는” 아주 기본이 되는 Node.js 애플리케이션이 될 겁니다.

그리고 나서는, 우리가 만들기 원하는 “실제” 애플리케이션의 종류가 무엇인지에 대해 논의하고, 이 애플리케이션을 조립하기 위해 구현해야 하는 다른 부분들을 자세히 살펴보고, 하나씩 이 각각의 부분들에 대해 작업을 시작할 생각입니다.

약속드렸듯이, 우리는 JavaScript의 고급 개념 몇 가지와, 그것을 어떻게 사용하는지, 그리고 우리가 아는 다른 프로그래밍 언어의 개념과 이 개념이 어떻게 다른지 살펴볼 것입니다.

완성된 애플리케이션의 소스코드는 아래 링크를 통해 다운 받으실 수 있습니다. the NodeBeginnerBook Github repository.

차례


JavaScript와 Node.js

JavaScript와 당신

기술적인 부분들에 대해 이야기 하기 앞서, 잠깐 짬을 내서 당신과 JavaScript와의 관계에 대해 이야기 해 봅시다. 이번 챕터를 읽고 나면 이 문서를 계속 읽어야 할지 판단할 수 있을 겁니다.

만약 당신이 나와 같다면, 당신은 오래 전에 HTML 문서 작성을 계기로 HTML “개발”을 시작했습니다. 당신은 이 재밌는 일을 JavaScript와 함께 했습니다. 하지만 매우 기초적인 방식으로 사용했죠. 웹페이지 이곳 저곳에 상호작용 기능을 추가하는 식으로 말입니다.

당신이 정말 원했던 것은 “실제의 것”이었습니다. 당신은 어떻게 하면 복잡한 웹 사이트를 만들 수 있는지 알고 싶었습니다. 그래서 PHP나 루비, 자바 같은 프로그래밍 언어를 배웠고, “백엔드”코드를 작성하기 시작했습니다.

그러면서도, JavaScript에 눈은 계속 두고 있었죠. jQuery나 Prototype같은 것들의 소개를 보면서 말입니다. 그것들은 JavaScript 영토내에서 좀 더 진보해나갔습니다. 그러면서 JavaScript가 실제로는 window.open() 함수 이상이라는 것을 보았습니다.

하지만, 여전히 이 언어는 프론트앤드에 머물러 있었고, 웹페이지를 꾸미고 싶을 때 마음대로 다룰 수 있는 jQuery가 있다는 것이 좋긴 했지만, 결국 당신은 JavaScript 사용자였을 뿐입니다. 결코 JavaScript 개발자는 아니었죠.

그러다 서버 위에서 동작하는 JavaScript, Node.js가 나왔습니다. 너무 멋지지 않습니까?

이제 비로소 오래되었지만 새로운 JavaScript를 살펴봐야 할 시기라고 마음먹습니다. 하지만 잠시만요. Node.js 애플리케이션을 작성하는 것과 왜 그런 방식으로 작성해야만 하는 것인지, 즉 Javascript를 이해하는 것은 다른 이야기 입니다.

문제는 이렇습니다. JavaScript는 두 개, 혹은 세 개의 삶(90년대 중반부터 시작된 작고 우스운 DHTML 헬퍼, jQuery나 그 비슷한 종류의 좀 더 진지한 프론트앤드 도구, 그리고 지금은 서버사이드)을 살았기 때문에 JavaScript를 “올바른” 방식으로 배우는 것을 도와줄 정보를 찾는 것이 쉽지는 않습니다.JavaScript를 단순히 사용하는 것이 아니라, 개발하고 있다는 느낄 수 있도록 Node.js 애플리케이션을 작성하기 위해서 말입니다.

바로 그겁니다. 당신은 이미 경험있는 개발자이고, 여기저기 해킹하듯 새로운 기술을 배우고 나서 엉뚱하게 사용하는 것을 원하지 않습니다. 당신은 올바른 각도로 이것에 접근하고 있다는 것을 확신하고 싶을 겁니다.

물론, 훌륭한 문서들이 널려 있습니다. 하지만 때로는 문서만으로는 충분하지 않습니다. 필요한 것은 바로 올바른 안내입니다.

저의 목표가 당신에게 그런 가이드를 제공하는 것입니다.



주의 사항

정말 뛰어난 JavaScript 개발자들이 있습니다. 저는 그런 사람이 아닙니다.

저는 단지 앞에서 말했던 그런 수준의 사람입니다. 저는 백앤드 웹 애플리케이션 개발에 관해 한 두 개쯤은 알고 있습니다만, 여전히 “진정한” JavaScript에 대해서는 신참이고, Node.js에 대해서는 마찬가지입니다. JavaScript의 좀 더 고급스러운 내용에 대해서는 최근에서야 배웠습니다. 경험 많은 사람이 아니죠.

그게 바로 이 책에 “초보에서 전문가로”의 책이 아닌 이유입니다. 그 보다는 “아주 초보에서 발전된 초보로”에 더 가까운 책입니다.

제가 실패하지 않는다면, 이 책은 제가 Node.js를 시작할 때 가지고 있었다면 좋았겠다 싶은 생각이 드는 그런 종류의 문서가 될 것입니다.



서버 사이드 JavaScript

첫 번째 JavaScript의 구현체는 브라우저안에 살았습니다. 하지만 단순히 환경에 불과했습니다. JavaScript로 무엇을 할 수 있는지 정의하였습니다만, 해당 언어 자체가 할 수 있는 것이 무엇인지에 대해서는 그다지 많이 알려주지 않았습니다. JavaScript는 “완결성을 가진” 언어입니다. 당신은 이 언어를 수 많은 환경속에서 사용할 수 있고 다른 “완결성을 가진” 언어들과 마찬가지로 무엇이든지 만들어 낼 수 있습니다.

Node.js는 실제로 단지 다른 환경일 뿐입니다. Node.js는 브라우저 밖, 백앤드에서 JavaScript를 실행할 수 있게 해줍니다.

백앤드에서 당신이 지정한 JavaScript를 수행하기 위해서는, 잘 해석되고 실행되어야 합니다. Node.js가 하는 것이 바로 그 일입니다. 그리고 그 일은 구글 크롬 브라우저가 사용하는 JavaScript 실행환경과 동일한, 구글의 V8 가상머신을 사용해 이루어집니다.

거기에 더해서, Node.js는 많은 유용한 모듈을 탑재하고 있습니다. 그렇기 때문에 string을 console로 뿌리는 것 같은 것을 바닥부터 모두 작성할 필요가 없습니다.

요컨대, Node.js는 서버사이드 JavaScript 실행환경과 라이브러리, 이렇게 두 가지로 이루어져 있습니다.

이것들을 사용하기 위해서는 Node.js를 설치해야 합니다. 공식 설치 안내 사이트를 방문해서 설치를 마친 다음에 다시 오시길 정중히 권합니다.



.....