Development2017.05.02 12:07

이유는 알 수 없습니다만 여러곳에서 지속적으로 사용자 유입이 되고 있는 포스팅이 "JSON 포맷에서 주석을 사용할 수 있을까?" 라는 글입니다. 유입이 많은 이유로 생각되는 것은 많은 분들이 JSON 포맷을 사용하면서 주석 사용에 대한 욕망(?)이 있고, 이에 대한 방법을 찾으려다 검색 유입이 되는 것이라는 생각이 듭니다. 저 역시 글을 쓴 이유가 JSON 포맷에서 주석을 왜 쓸 수 없을까 였기 때문에 결국 같은 갈망을 가지고 검색후 실망-_-이라는 수순을 밟고 있는 안타까운 현실이라 하겠습니다.



요즘 읽고 있는 책 중 하나가 제이펍에서 출간한 "자바스크립트와 Node.js 를 이용한 웹 크롤링 테크닉"(책 내용 자세히 보기 [바로가기]) 이라는 책입니다. 곧 이직을 계획하고 있어서 여유 시간을 알차게 활용하고자 Node.js 와 파이썬(Python), 그리고 인프라스트럭쳐 배포 자동화에 심취해 있는데요, 여튼 이 책을 읽던 중 JSON5 에 대한 정보를 습득하게 되어 간단하게 공유해 보고자 합니다. 



JSON5 (http://json5.org) 는 JSON 이 가지고 있는 몇 가지 단점들을 ECMAScript 표준의 진화에 맞추어 쓸만한 형태로 개선하고자 하는 일종의 제안으로 시작된 프로젝트입니다. 시작된지는 좀 된 과제이지만 여전히 가야할 길을 열심히 걷고 있는 과제이기도 합니다. JSON5 는 JSON 의 규격을 조금 더 완화시키고 유연하게 만들어 다양한 데이터 포맷을 수용하고, 사람들에게도 더 친숙한 (= 주석으로 지저분해지는?) 형태로 만드는 것을 목적으로 하고 있습니다. JSON5 포맷으로 구성한 데이터 포맷의 예를 살펴보면 변화하는 부분을 쉽게 인지할 수 있습니다.



글의 시작에 이야기 했던 주석은 한줄 주석, 혹은 여러 줄로 구분된 주석 형태를 제공하고 있습니다. Key 를 표현할 때 꼭 사용해야 했던 따옴표 역시 제거되어 key 입력에 대한 불편함이 사라졌고, 파싱 에러의 대부분을 차지하고 있는 콤마에 대한 사용도 완화되어 어레이의마지막에 콤마가 들어가도 무방하도록 변경되었습니다. Value 에 멀티라인 텍스트가 들어갈 수 있는 것도 고무적인 부분입니다. 그 외에 Hex 형태의 표현 허용, 소수점 이하 표기법의 자유도 등도 눈에 띄는 부분입니다. Node.js 를 사용하는 경우 npm 을 통해서 json5 모듈을 쉽게 다운로드 받아 사용해 볼 수 있습니다.


$ npm install json5


모듈이 설치되면 Require 문으로 json5 모듈을 불러와야 한다는 점을 제외하면 parse 와 stringify 메소드를 이용해서 기존 JSON 내장 객체처럼 사용할 수 있습니다. 간단한 Node.js 예제코드는 아래와 같습니다.


var JSON5 = require('json5');

var fs = require('fs');

var json5 = fs.readFileSync("data.json5", "utf-8");


var obj = JSON5.parse(json5);


console.log(obj);

console.log(obj.multi_line);

console.log(obj.hex_data);

console.log(obj.items);


당연한 것이겠지만 JSON5 를 이용하여 데이터를 주고 받을 각 주체들은 JSON5 를 지원할 수 있도록 준비되어야 합니다. Node.js 이외의 다른 언어에서도 미리 준비된 패키지가 있을 것으로 생각됩니다만, 규격의 변경에 따른 사용 가능 여부를 확실히 점검하고 넘어가는 것이 좋을 것 같습니다. 주석을 이용할 수 있다는 것은 분명 의미있는 변화이지만 이로 인해 증가할 수 있는 데이터 파일의 크기, 새로운 처리 모듈의 사용 등은 고민을 해봐야 할 부분입니다.






저작자 표시 비영리
신고
Posted by 노피디
Development/node.js2017.04.06 05:36

node.js 를 사용하면서 가장 애를 먹는 것중 하나가 설치한 모듈을 찾지 못한다는 메세지를 만날때 입니다. 환경에 따라 모듈의 설치 경로가 달라질 수 있고, node.js 가 설치된 모듈을 찾아가는 순서에 영향을 받기 때문입니다. 간단한 몇 가지 명령을 통해 node.js 가 어떤 순서로 모듈을 탐색하는지 확인하고 글로벌 모듈로 설치된 경우 이를 명시적으로 node.js 가 이용할 수 있도록 알려줌으로써 어느정도 문제를 해결할 수 있습니다.


아래와 같이 npm 에서 -g 옵션을 이용하여 모듈을 설치하면 글로벌 모듈로 설치가 됩니다. 프로젝트에 관계 없이 설치된 모듈을 이용할 수 있어야 하는 것이지요. 일부 환경에서는 sudo 명령을 이용하여 관리자 권한으로 설치를 해야 할 수도 있습니다.


$ npm install -g [#모듈이름#]


또는


$ sudo npm install -g [#모듈이름#]


이렇게 -g 옵션을 이용하여 글로벌 모듈로 설치하는 경우, 그 경로는 어떻게 될까요? 아래와 같은 명령을 이용하여 글로벌 모듈로 설치하는 경우의 Path 를 확인할 수 있습니다.


$ npm root -g

/usr/local/lib/node_modules


간혹 글로벌 옵션을 이용하여 설치한 모듈을 찾을 수 없다고 나오는 문제를 겪고 있다면, 위의 명령으로 확인한 경로를 NODE_PATH 라는 환경 변수에 저장하여 node.js 가 글로벌 모듈을 찾을 때 참조할 수 있도록 명시적인 지정을 할 수 있습니다. 반복적으로 사용해야 하는 값이기 때문에 홈 디렉토리의 .bash_profile 파일에 포함하여 터미널 실행시 셋업되도록 하면 되겠습니다. 윈도 환경에서는 시스템 환경 변수에 넣어주면 됩니다.


~/.bash_profile 에 아래와 같이 환경 변수 추가


export NODE_PATH="/usr/local/lib/node_modules"


글로벌 모듈 이외에 현재 프로젝트에서 모듈을 찾아가는 탐색 순서를 확인하려면 아래와 같이 간단한 자바스크립트 구문을 node.js 를 이용하여 실행해보면 됩니다. 아래의 경로로 모듈을 찾아본 뒤, NODE_PATH 에 지정한 경로까지 탐색하여 현재 환경에서 모듈을 찾고 이용하게 됩니다. 


$ node -e "console.log(global.module.paths)"

[ '/Users/snoh/node_modules',

  '/Users/node_modules',

  '/node_modules' ]


- NoPD -



저작자 표시 비영리
신고
Posted by 노피디
Development/node.js2016.04.04 08:58

Node 의 새로운 버전이 릴리즈 되었습니다. Node 는 새로운 버전이 발표될 때마다 LTS (Long Term Support) 버전과 Stable 버전으로 나누어 공개하곤 합니다. 이번에 발표된 버전은 v4.4.2 (LTS) 버전과 v5.10.0 (Stable) 버전입니다. 아시는 분들은 아시겠습니다만 Stable 버전의 경우 이름의 뜻과는 달리 실험적인 기능들을 비롯한 덜 안정적인 기능들이 많이 들어간 버전이며 LTS 버전이 안정적인 버전이라고 생각하시면 되겠습니다.


Node 의 버전을 업데이트 하는 방법은 여러가지 있겠습니다만 개인적으로 추천드리는 방법은 n 을 이용하여 업데이트 하는 방법입니다. n 을 설치하고 사용하는 방법인 예전 포스팅에서 찾아보실 수 있습니다 (관련글 : http://ondemand.tistory.com/220) . n 은 여느 Node 패키지와 마찬가지로 NPM 을 이용하여 설치할 수 있습니다. 




간만에 또 한번 싱가폴에서 열심히 놀고 있는 서버에 접속을 했습니다. 업데이트를 하기 전 n 을 이용하여 현재 설치되어 있는 버전을 확인해 보았습니다. n 명령을 실행하면 현재 설치되어 있는 버전이 열거되며 활성화 되어 있는 버전은 특별히 밝은 색상과 o 표시가 되어 있어 식별이 쉽습니다. 




현재 설치되어 있는 버전이 두가지 이고 활성화된 버전은 4.2.4 로 확인됩니다. 새로 출시된 버전이 4.4.2 버전이니 n 명령을 이용해서 새로운 버전의 LTS 버전을 다운로드 받아 활성화 해보도록 하겠습니다. 명령은 무척 간단해서 n 뒤에 파라메터로 버전명을 기술해 주면 됩니다. 






약간의 시간동안 다운로드를 받고 설치하는 과정이 끝나면 준비 완료입니다. 다시 한번 n 명령을 이용해서 버전을 확인해보면 새로운 버전이 추가된 것을 확인할 수 있고 활성화까지 된것을 볼 수 있습니다. 느낌이 오셨겠지만 n 을 이용하면 현재 머신에서 어떤 버전을 활성화 해서 사용할 것인지도 쉽게 선택할 수 있습니다. 설치된 버전 목록에서 버전 넘버를 확인한 후, 다시 한번 n 명령 뒤에 해당 버전을 기술해 주면 됩니다. 저는 0.10.28 버전으로 다시한번 전환해 봤습니다.




네, 참 쉽습니다 ;-) 


Nodejs.org 공식 웹사이트에서 새로운 릴리즈 확인해보기 [바로가기]






저작자 표시 비영리
신고
Posted by 노피디
Development/node.js2015.12.24 09:28

간밤에 Node.js 의 v4.2.4 (LTS) 버전이 새롭게 업데이트 되었습니다. 이번 버전 업데이트에서도 정말 많은 버그들이 Fix 가 되었습니다. 자세한 업데이트 내역은 Node 공식 사이트에 등록된 릴리즈 노트를 확인해 보시기 바랍니다. 복기를 위해 간만에 개발용 리눅스 머신에 LTS 버전을 업데이트 하면서 사용했던 커맨드를 기록삼아 남겨둡니다. 혹시나 "Node.js 는 어떻게 업데이트 해야 하나요?" 하시는 분들을 위해 도움이 되었으면 합니다.


Node.js 는 두가지 버전으로 나뉘어져 출시(?)가 되고 있습니다. 짝수 버전에 해당하는 LTS 와 홀수 버전에 해당하는 Stable 이 바로 그것입니다. LTS 는 Long Term Support 의 약자로 Node.js 에서만 사용하는 용어는 아니고 말 그대로 "오랫동안 지원되는" 버전으로 안정성, 호환성에 포커스를 맞춘 버전입니다. 반면 Stable 버전은 용어의 의미와 다소 다르게 새로운 기능들이 적극적으로 반영되는 버전이니 (=이슈가 많을 수 있는?) 사용시 이를 감안해야 하겠습니다.




Node.js v4.2.4 (LTS) 버전 릴리즈 노트 확인하기 [바로가기]


Node.js 에서 사용하는 패키지들은 NPM 을 통해서 다들 관리를 하고 계실겁니다. 그런데 NPM 은 Node.js 자체의 버전을 관리해 주지는 않습니다. Node.js 의 버전을 관리하기 위해서는 NPM 을 이용하여 n 을 먼저 설치해야 합니다. n 은 Node.js 를 관리하기 위한 전용 도구로 이를 통해서 설치한 버전들은 특정한 경로에 저장되어 손쉽게 Node.js 의 버전을 변경해 가면서 활용할 수 있게 해줍니다. 참 편하쥬?




작업을 시작하기 전 노드의 버전을 확인해보면 v0.10.28 입니다. 오랫동안 쓸일이 없었던 가상머신이라 간만에 확인했더니 버전이 무척 낮습니다 ^^ 혹시나 하는 마음에 캐시를 비워주고 우선 n 으 설치했습니다. n 의 사용법은 무척 간단한데요 설치하려는 버전을 파라메터로 전달해 주면 됩니다. 새로 릴리즈된 버전이 4.2.4 이니 파라메터로 4.2.4 를 전달하면 알아서 새로운 버전을 다운로드 받아 설치를 진행합니다. 이렇게 다운로드 된 버전은 환경에 따라 다소 다를 수 있겠지만 설치 과정에 나온 "mkdir" 항목에 나온 경로에 저장되게 됩니다.


새로운 버전을 돌려보니 좀 이슈가 있다? 그러면 간단히 "n 0.10.28" 의 식으로 다시 버전을 변경하면 됩니다. 스샷에 보이는 것처럼 이미 로컬에 다운로드 되어 있기 때문에 별도로 다운로드 되는 과정 없이 버전이 변경됩니다. Node.js 를 이용한 개발도 편하지만 관리도 편한것이 사람들에게 지속적으로 사랑받는 이유가 아닐까 싶습니다!



저작자 표시 비영리
신고
Posted by 노피디
Development/node.js2014.12.04 09:22

node.js 를 이용하여 서버 프로그램을 만드는 경우, 디버깅이 짜증날때가 간혹 있습니다. 소스코드를 수정하면 다시 프로세스를 죽였다가 살리는 과정을 반복하는 경험들을 많이 하실텐데요, 이런 불편함을 없애주기 위한 여러가지 패키지들이 많이 준비되어 있습니다. 다 간단하긴 하지만 그 중에서도 nodemon 을 무척 잘 쓰고 있어서 소개해 봅니다.



nodemon GitHub 페이지 [바로가기]


당연하겠지만 Node Packager Manager 를 이용해서도 손쉽게 설치하실 수 있습니다. npm 명령을 이용해서 패키지를 설치하려면 아래와 같이 명령을 입력하시면 됩니다. 관리자 권한이 필요할 수 있다는 점 기억해 두시면 되겠네요.


npm install -g nodemon


nodemon 을 설치한 이후에 이용하는 방법은 node 를 통해 스크립트를 실행하지 마시고 nodemon 을 이용해서 스크립트를 실행하기만 하면 됩니다. 말로 적으면 복잡하나 커맨드로 보자면...


(기존) node server.js

(변경) nodemon server.js


번거로움을 한번에 없애주는 nodemon 으로 프로세스 중단, 재시작하는 불편함을 없애보시기 바랍니다!


저작자 표시 비영리
신고
Posted by 노피디
자바스크립트는 참 편리한 스크립트 언어이지만 다른 한편으로는 이해하기 힘든 녀석이기도 합니다. 이유인 즉선 너무 유연하게 사용할 수 있다보니 가끔 일반적인 언어, 컴퓨터 상식으로는 "왜 이렇게 동작하지?" 하는 경우들이 있기 때문입니다. 가장 대표적인 것이 조건 비교문을 이용하여 변수나 객체를 비교할때 입니다. 잘 동작할 것으로 생각했던 구문들이 정상적인 동작을 하지 않거나 예상치 못한 반응을 한다면 혹시 아래 표에 나온 경우중 하나가 아닌지 잘 살펴봐야 합니다. 아래 표는 http://dorey.github.io/JavaScript-Equality-Table/ 에서 업어왔습니다

 
Boolean 값인 True 와 1은 같은 값일까요? 그리고 True 와 "1"은 같은 값일까요? 조금 더 나아가 True 와 [1] 을 비교하면 어떻게 될까요? 두개의 이퀄 연산자(==)를 사용하여 자바스크립트에서 값을 비교하는 경우 위의 표에서 초록색으로 표시된 것처럼 결과가 리턴된다고 합니다. "" 와 0 이 같다는 생각을 해보셨나요? 혹은 "" 와 [[]] 가 같은 값으로 식별된다는 상상을 누가 해봤을까요? 

때문에 자바스크립트에서는 각 객체와 객체를 비교했을 때 값을 정확하게 예측하기 힘들다면 이퀄 연산자를 두개 이어쓰는 대신 세개(===)를 쓰는 것이 좋습니다. 세개의 이퀄 연산자를 사용하는 경우 엄격한 규칙에 의거하여 값을 비교하게 되고 이로 인한 조건 비교문의 오동작을 효과적으로 막을 수 있습니다. 세개의 연산자에 대한 부정형은 !== 이니 참고하시면 될 것 같습니다


훨씬 상식(?)에 가까운 결과를 보실 수 있습니다. 같은 형태의 자료형들간에 비교를 했을때 정확한 값이 나오는 것을 볼 수 있습니다. 자바스크립트를 쓰면서 뭔가 이해할 수 없는 동작이 발생하고 있다면 표를 참고하시고 연산자를 바꿔보는 것을 검토해 보세요. 우리의 시간은 소중하니까요. :-)

 

저작자 표시
신고
Posted by 노피디
Development2013.10.16 04:49
정규표현식은 복잡한 조건 비교문 없이
패턴 단위로 문자열을 검증할 수 있어서 무척 유용하...지만...-_-;;
자주 사용하지 않으면 할 때마다 헷갈린다는 단점이 있다.

자바스크립트만 이용해서 사용자 입력값을 검증하는 것은
무조건 문제가 생길 수 있기 때문에 서버측 검증을 꼭 해야만 한다.
물론 서버측에서는 여러가지 다른 수단 (가령, 스토어드 프로시저 파라메터의 데이터 타입) 이 있기 때문에
자바스크립트에서 정규표현식 검증을 하고
서버단에서는 별도 Validation 을 하는 것도 좋은 방법이다

각설하고,

사용자 계정 생성시 자주 사용하게 되는 룰이 영문, 숫자만 허용하는 것인데
이를 자바스크립트 정규표현식을 사용하면 무척 간단하게 표현이 가능하다

var regType1 = /^[A-Za-z0-9+]*$/;

 
영어는 대문자 소문자가 있기 때문에 두가지를 모두 식에 표현해 주어야 한다

var regType1 = /^[A-Za-z0-9+]*$/;
var regType1 = /^[A-Za-z0-9+]*$/; 


숫자도 0-9 라는 조건을 통해 필터링 할 수 있다

var regType1 = /^[A-Za-z0-9+]*$/; 


+ 는 대/소 영문자, 숫자가 한번 이상 나온다는 의미이며 
꺽쇠 바깥쪽의 별표(아스타리스크,*)는 꺽쇠 안의 조건이 0번 이상 반복된다는 의미이다

만약, 문자열 길이를 제한하고 싶으면 어떻게 하면 될까?
그 때는 브레이스({,})로 문자열 갯수를 지정해 주면 된다.

var regType1 = /^[A-Za-z0-9+]{4,12}$/; 


위와 같은 식을 이용하면 4자 이상, 12자 이하의 문자열 필터링이 가능하다.
완성된 코드는 아래와 같다.

var regType1 = /^[A-Za-z0-9+]*$/;
if (regType1.test(document.getElementById('userid').value)) { alert('아이디가 조건에 맞지 않습니다'); }


- NoPD -


저작자 표시
신고
Posted by 노피디
Development/node.js2012.05.23 08:30
새로운 언어나 개발환경에 익숙해 지는데에는 간단한 실습만한 것이 없다. Hello World 를 출력하는 프로그램이 모든 언어의 첫번째 예제가 되는 것은 다 이유가 있다. Hello World 를 출력하는 프로그램을 통해 언어가 가지고 있는 기본적인 코드 구성 방법을 이해할 수 있고 표준 입출력을 이용하여 결과값을 출력해 볼 수 있기 때문이다. 

node.js 역시 마찬가지 방법으로 접근을 해보고자 한다. 다만 javascript 에 익숙치 않은 사람들을 위하여 점진적으로 코드를 완성해 나가는 방식을 이용해 앞으로 설명을 하고자 한다. NoPD 역시 OOP 기반의 언어들에 익숙한 상태라 처음 javascript 에 익숙해 지는데 시간이 무척 오래 걸렸다. javascript 가 궁극의 개발 언어라고 주장하는 사람들은 이런 javascript 의 코드 개발 방식을 들기도 하니 유심히 살펴볼 필요도 있을 것 같다


자바스크립트로 서버를 만든다고?

node.js 는 서버 혹은 클라이언트에서 사용될 수 있는 스크립트임을 앞선 포스팅에서 이야기 했다. 클라이언트야 그렇다 치고 서버에서는 도대체 무슨 역할을 할 수 있는 것일까? node.js 는 로직을 가지고 있는 javascript 로서의 역할도 충분히 하겠지만 그 보다는 웹 서버, 소켓 서버 등의 역할로 사용되는 경우가 더 많다. 서버에 설치된 웹 서버 (예> IIS, Apache) 의 유무와 상관없이 독립적으로 동작이 가능하다.

웹 서버라는 것이 결국은 특정한 포트 (예> 80) 를 통해 TCP 통신을 받아들일 수 있도록 해주는 역할이라고 해석한다면 소켓 서버를 특정한 포트로 만드는 것과 별반 다른 것이 아니라는 점을 이해할 수 있을 것이다. 이제 간단한 웹 서버를 만드는 코드를 통해 node.js 의 구조를 이해하고 얼마나 생산성 높은 개발 환경인지를 알아보도록 하자.

var http = require('http');

먼저 위와 같이 코드를 입력해 보자. var 는 자바스크립트에서 변수를 선언할 때 사용되는 키워드이다. http 라는 변수를 선언하고 이 변수에는 require('http') 라는 문장을 통해 node.js 의 http 모듈의 객체 인스턴스를 생성하도록 했다. node.js 은 다양한 모듈을 가지고 있는데 모듈을 사용하기 위해서는 위와 같은 코드를 이용한다. 다른 언어에서 include 나 using, import 와 같은 역할을 한다고 보면 된다.

코드의 구조를 잡아보기

객체 인스턴스를 생성했으면 이제 이 인스턴스가 제공하는 다양한 메소드를 이용하기만 하면 된다. node.js 의 서버 모듈이 제공하는 다양한 메서드와 이벤트는 공식 웹사이트의 도움말을 참고하면 좋다 (바로가기 :  http://nodejs.org/api/http.html) 우리는 일단 간단한 웹 서버를 만들어 볼 예정이니 문서가 제공하는 방대한 내용을 다 이해할 필요는 없다. 이제 코드에 살을 좀 붙여보자.

var http = require('http');

http.createServer(function (request, response) {

});

생성한 http 인스턴스가 제공하는 createServer 메소드를 호출하는 코드이다. createServer 메소드는 파라메터로 requestListener 를 받는다고 공식 문서에 정의되어 있다. requestListener 는 특별한 것은 아니고 공식 문서에도 기술되어 있는 것처럼 request 이벤트의 이벤트 핸들러 형태를 따르는 함수면 된다. 그런데 이 서버는 어떤 포트를 통해 요청을 받을 것인지가 명시 되어 있지 않다. http 객체가 제공하는 listen 메소드를 이용해 1234번 포트로 요청을 받는 서버를 만들어 보도록 하자.

var http = require('http');

http.createServer(function (request, response) { 

}).listen(1234);

참 간단하다. 이제 이 코드에 우리가 추가해야 할 것은 요청(request) 가 들어 왔을 때 무엇을 회신(response) 할 것이냐이다. 웹 서버라는 것이 별 것은 아니고 사용자의 요청이 들어왔을 때 적절한 회신을 해주는 것임을 생각해 보면 이해하기는 어렵지 않다. 회신할 내용을 만드는 코드를 넣고 서버가 동작중임을 알리는 콘솔 메세지를 추가해보자.

var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World~!\n');
}).listen(1234);

console.log('Server running at http://127.0.0.1:1234/');
결과 확인해 보기! 

어렵지 않게 웹 서버를 무사히 만들어 냈다. 물론 진짜 웹 서버에 비하자면 동적인 웹 페이지의 생성, 적절한 결과의 응답등이 빠져 있지만 이런 부분들은 앞으로 여러 포스팅을 통해 다양한 모듈을 활용하여 풀어나갈 수 있는 부분이니 여기선 구조를 이해하는 선이면 충분할 것 같다. 이제 node.js 에서 만든 코드를 실행해 보도록 하자.  

 
서버가 동작중임을 알려주는 메세지가 화면에 출력되어 있다. 기본적으로 createServer 는 별도로 종료하지 않는한 계속 구동되고 있게 된다. 서버를 종료하는 별도 로직을 추가하거나 (특정한 요청에 응답?) Ctrl-C 등을 눌러 프로세스를 종료 시키면 서버는 종료되게 된다. 물론 서버가 종료되면 안되는게... 기본 동작 요구사항일 것이므로 그냥 그렇다고만 알고 있자. 이제 웹 브라우저를 이용하여 웹 서버에 접근을 해보도록 하자.


놀랍지 않은가? 단 몇줄의 코드로 웹 서버를 구동시켜 보았다. 앞서 이야기 한 것처럼 보완할 부분이 많은 말 그대로 껍데기 밖에 없는 웹 서버이지만 node.js 의 원리를 이해하고 강력한 기능을 맛보기에는 충분한 예제였다. 앞으로 node.js 를 이용하여 재미있는 것들을 많이 만들어 나가도록 하자.


- NoPD -

 
저작자 표시
신고
Posted by 노피디
Development/node.js2012.05.04 09:24
node.js 는 구글의 크롬(Chrome) 브라우저가 채택하고 있는 자바스크립트 엔진인 V8 을 기반으로 하고 있다. node.js 개발 환경을 설치한다는 것은 V8 엔진을 설치하고 V8 을 통해 자바스크립트를 브라우저를 통하지 않고도 실행할 수 있다는 것을 의미한다. 현재 제공되고 있는 설치 패키지는 윈도우(Windows) 플랫폼과 맥(Mac) 플랫폼이다. 하지만 github를 통해 소스코드를 제공하고 있고 다양한 리눅스 배포판별로 설치 방법을 가이드 하고 있으니 사실상 제한이 없다고 봐도 되겠다

 
node.js 설치파일을 받기 위해서는 공식 웹사이트인 http://nodejs.org 를 방문하여 가운데 있는 Download 링크를 누르면 된다. NoPD 는 윈도우 플랫폼을 사용하고 있기 때문에 윈도우용 MSI 설치 패키지를 받아서 설치했다. 개발 환경이라고는 하지만 커맨드 라인 기반의 인터페이스를 제공하고 있기 때문에 용량이 그리 크지 않다.
 

윈도우 환경에서 기본 설정으로 node.js 를 설치하고 나면 Program Files 폴더 아래에 nodejs 경로에 node.js 의 관련 파일들이 설치된다. 이미 이야기한 것처럼 node.js 의 구조는 무척 간단하다. 엔진 및 커맨드라인 인터페이스인 node.exe 파일이 있고 node.js 가 제공하는 모듈들은 자바스크립트로 작성되어 node_modules 폴더 아래에 깨알같이 분산되어 있다.

node.js 가 설치된 폴더의 구석구석을 살펴보면 자바스크립트로 만들어진 깨알같은 소스코드들이 많이 들어 있어서 참고하기에 무척 좋다. node.js 를 꼭 사용하지 않더라도 브라우저 기반으로 자바스크립트를 구동시킬 때 참고할만한 소스코드들이 무척 많으니 천군만마를 얻은 것 같은 기분이다. 이러한 구조를 참고하여 나중에 개인적인 모듈을 만들때 많은 도움을 받을 수 있으니 시간이 되면 살펴보는 것도 좋을 것 같다.

 
node.js 가 제공하는 다양한 기능들을 제대로 활용하기 위해서는 기술문서를 꼼꼼히 읽어보는 것이 좋다. node.js 의 공식 웹사이트가 제공하고 있는 Document 를 참고하면 node.js 의 어떤 요소들을 활용하여 무엇을 개발할 수 있을지 생각하는데 큰 도움이 된다. node.js 로 개발을 진행하는 동안 가장 도움을 많이 받을 기술 레퍼런스이니 항상 다른 창으로 띄워 놓도록 하자.

이번 포스팅을 그냥 이렇게 마무리 할까 하다가... 소스코드 한줄 정도는 만들어 봐야 하지 않을까 싶어서 모든 개발 환경의 기본 테스트이자 가장 많은 의미를 갖는 샘플, "Hello World" 를 출력하는 방법을 살펴보고 글을 마무리 할까 한다. 일단 첫번째 방법으로 무작정 설치 경로에 위치한 node.exe 를 실행해 보자. ">" 프롬프트가 뜨면서 뭔가를 입력하라는 화면이 휑~ 하니 출력된다. 변수 하나에 문자열을 집어넣고 console.log 메소드를 이용하여 콘솔 화면에 출력하는 간단한 소스를 입력해 보자.

 
첫번째 방법은 코드를 간단히 테스트 해볼때 사용하기 좋은 방법이다. 이 화면을 보고 혹시 크롬 브라우저의 개발자 기능중 콘솔 기능이 떠올랐다면 정확히 본 것이다. node.js 가 하는 일이라는 것이 결국 자바스크립트 엔진으로 자바스크립트 소스를 보내고 수행한뒤 결과를 리턴하는 것이라는 이해를 하면 그것으로 충분하다.

하지만 첫번째 방법은 실무에서 쓰기에는 별로 좋은 방법은 아니다. 간단한 디버깅이나 소스코드의 동작을 확인하는 용도 정도일 뿐이다. 우리가 원하는 방식은 별도로 소스코드를 만들어 이를 실행하는 방식일 것이다. 귀차니즘으로 에디터 쓰는 것도 번거로우니 커맨드 라인에서 간단히 소스코드를 만들고 실행을 해보도록 하자. 

 
자바스크립트 기반이기 때문에 확장자는 .js 를 일반적으로 붙여주지만 사람에 따라서는 .node 를 붙여 주기도 한다. 두가지 확장자를 쓰는 경우에 한하여 node.js 는 알아서 해당 파일을 찾아 실행을 해주니 별도의 확장자를 쓰기 보다는 .js, .node 를 이용하는 것이 좋다. 오늘 포스팅에서는 node.js 개발 환경을 설치하고 간단한 소스코드를 실행해 봤다. 다음 포스팅에서는 몇가지 쉬운 코드를 이용하여 node.js 가 기본적으로 제공하는 모듈을 사용해 보도록 하자.


- NoPD - 
저작자 표시
신고
Posted by 노피디
Development/node.js2012.05.02 23:19
요즘 가장 핫(Hot)한 개발 트렌드는 무엇일까? 사람에 따라서 가장 관심있는 개발 기술이 다를 것이기 때문에 어떤 것이 가장 관심을 받고 있다고 잘라 말하기는 애매하다. 하지만 일반적인 개발 생태계 전체를 놓고 보면 눈에 띄는 것들이 몇몇 있다. 마이크로소프트가 열심히 밀고 있는 윈도폰, 윈도8을 위한 메트로 스타일(Metro Style) 개발이 그 중 하나일 것이다. 스마트 디바이스를 위한 개발은 여전히 아이폰과 Objective-C 가 가장 뜨거운 관심을 받고 있다. 

그렇다면 웹 개발 영역에서는 어떤 것이 가장 핫한 개발 트렌드 일까? HTML5 나 CSS3 를 이야기 하는 사람들이 많을 것이다. 하지만 개인적으로는 그 보다도 자바스크립트, 더 정확하게는 node.js 가 사람들이 가장 관심을 많이 갖고 있는 웹 개발 영역에서의 아이템일 것 같다.

node.js 가 도대체 뭘까?

node.js 는 뒤에 붙은 접미사가 .js 라는 것으로 미루어 보아 분명 자바스크립트(JavaScript)와 관련된 무언가라고 추측할 수 있을 것이다. 그러면 혹시 jQuery 처럼 클라이언트 사이드의 자바스크립트 라이브러리일까? 그건 그렇지 않다. node.js 는 클라이언트에도 사용될 수 있지만 그것은 제공되는 기능의 일부일 뿐이다. node.js 가 만들어진 주 목적은 바로 서버측에서 구동되는 자바스크립트 개발 환경을 위해서이다.

 
많은 사람들에게 자바스크립트는 브라우저에서 구동되며 웹 사이트에서 다양한 클라이언트단에서 프로그래밍적인 요소가 필요한 상황에서 사용되는 클라이언트 사이드(Client-side) 언어일 것이다. 그런데 쌩뚱맞게도 node.js 는 서버에서 구동되는 개발 환경이라니 이게 무슨 소리인가 싶을지도 모르겠다.

이 글을 읽고 있는 사람이라면 ASP.NET, JSP, PHP 와 같은 서버 사이드(Server-side) 스크립트에 대해서 잘 알고 있을 것이다. 서버 사이드 스크립트는 서버에서 구동되어 동적인 컨텐츠를 만들어 내어 클라이언트(보통 브라우저)에게 전달하는 역할을 하게 된다. 컨텐츠 전달의 중간에는 웹 서버(Web Server), 웹 어플리케이션 서버(Web Application Server)가 있다는 것은 길게 설명할 필요가 없을 것이다.

node.js 를 요약해서 이야기 하자면 웹 서버 혹은 웹 어플리케이션 서버이면서 동시에 서버 사이드 스크립트의 역할도 하는 자바스크립트 기반의 서버 개발 환경이다. 어떻게 자바스크립트가 서버에서 구동되고 쓰이게 되는지에 대해서는 더 자세한 이야기를 기술해 놓은 곳들이 많으니 한번 찾아보면 좋을 것 같다. 중요한 것은 자바스크립트 엔진의 발달로 자바스크립트의 구동속도가 서버에서 쓰일 수 있을 만큼 빨라졌고 오히려 그 간결함과 익숙함, 효율성을 통해 생각치 못했던 더 많은 것을 할 수 있다는 것이다.

[ node.js 관련 참고 URL ]
- node.js 공식 웹사이트 : http://nodejs.org 

- node.js 관련 추천 도서 : "모던 웹을 위한 node.js 프로그래밍" (한빛미디어) [바로가기]  


다음 포스팅에서는 node.js 를 윈도우 환경에서 직접 설치해 보고 간단한 샘플 코드를 통해서 node.js 를 통한 개발이 얼마나 쉬운지 한번 살펴보는 시간을 갖도록 하겠다.

- NoPD -
저작자 표시
신고
Posted by 노피디

티스토리 툴바