발생일: 2013.09.24 키워드: 노드, Node.js, Q, 프라미스, Promises 문제: 최근 진행 중인 프로젝트엔 모든 비동기 작업에 프라미스 패턴을 적용해 구현하고 있다. 프라미스 구현체로는 Q 라이브러리(https://github.com/kriskowal/q)를 사용하고 있다. 노드 서버에도 Q로 프라미스 패턴을 도입했는데,Q에서는 노드 콜백 패턴을 쉽게 프라미스 객체로 변경할 수 있는 메서드를 제공하고 있어서 편리하다. 해결책: https://github.com/kriskowal/q#adapting-node 노드의 콜백은 function (err, result) 형태의 패턴을 따른다.q 라이브러리에서는 이런 콜백을 프라미스 객체로 래핑할 수 있게 다양한 방법을 제공하고 있다. nfcal..
발생일: 2013.11.26 키워드: 노드 패킷, Node packet, 찰스, Charles 문제: 노드로 리버스 프록시 역할을 하는 서버를 하나 돌리고 있는데,HTTP 프록시 도구에서 노드 패킷을 확인해보고 싶다. 어떻게 하면 될까? 해결책: 난 주로 찰스(Charles, http://www.charlesproxy.com/)를 쓰고 있는데,노드 프로세스에서 보내는 HTTP 패킷은 찰스에서 확인할 수 없다. 노드의 HTTP 요청을 래핑해주는 모듈이 여럿 있는데,이번 프로젝트에서는 `request` 모듈(https://github.com/mikeal/request)을 사용했다. 요청을 보낼 때 프록시로 HTTP 프록시 도구를 바라보도록 설정하는 방법으로 해결할 수 있다. http://afuchs.tumb..
발생일: 2013.04.29 문제: 노드 모듈에서 상대적인 파일의 위치를 찾는 방법이 좀 헷갈린다. 이해하기 쉽게, 간단히 메모해둔다. 해결책: 1. arguments 로 파일명을 전달받고, 해당 파일의 위치를 가져오려고 한다면. 노드가 현재 실행되고 있는 디렉토리 정보는 아래 명령으로 알 수 있다. process.cwd(); // process 모듈은 전역이다. 상대 경로로 파일명을 전달받았다면, 아래와 같이 해당 파일의 절대 경로를 가져올 수 있다. var path = require('path'); path.join( process.cwd(), filename ); 2. 현재 파일을 기준으로 다른 파일을 읽어오려 한다면. 현재 파일의 디렉토리는 `__dirname` 변수에 저장되어 있다. 따라서, 아..
발생일: 2013.04.29 문제: Grunt 로 테스트를 빌드 과정에 포함시키려 한다. 헌데, grunt-contrib-qunit 나 grunt-contrib-jasmine 을 써서 빌드에 포함하려고 하는데,phantomjs 가 설치되어 있지 않다며 실행되지 않는다. 이미 phantomjs 를 설치해뒀는데, 아무래도 제대로 인식되지 않는 모양이다. 어떻게 해결해야 할까? 해결책: grunt-contrib-qunit 과 grunt-contrib-jasmine 모듈은,headless 브라우저인 phantomjs 위에서 동작한다. 두 모듈 모두 phantomjs 노드 모듈에 의존하고 있는데,이 모듈은 다른 노드 모듈에서 phantomjs를 사용할 수 있도록 API를 제공하는 어댑터이다. 두 모듈이 제대로 실..
발생일: 2013.03.09 문제: 작은 node 앱에 Express 를 사용하고 있다.기본 HTTP 모듈과 Express 의 역할에 대해선 잘 알겠는데,Connect 에 대해선 명확히 감이 잡히지 않는다. Connect 는 정확히 뭐고, 세 모듈의 관계는 어떻게 될까? 해결책: 간략한 결론 먼저.노드는 기본적으로 HTTP 모듈을 가지고 있고,Connect 는 HTTP 모듈에 여러 플러그인(정적 파일, 로깅, 캐싱, 압축 등)을 추가할 수 있는 미들웨어 프레임워크다.Express 는 Connect 를 내장하고 있는 웹 애플리케이션 프레임워크다. 좀더 자세히,Connect 위주로 찬찬히 살펴보면, 다음과 같다. node.js 에서는 기본적으로 HTTP 모듈을 내장하고 있고,아래와 같이 createServe..
발생일: 2013.02.01 문제: 1월부터 팀원들과 함께 노드 스터디를 진행하려고 'node.js 프로그래밍'이란 책을 샀더랬다.헌데, 갑자기 팀이 나뉘어 모두 헤어지게 된 터라(ㅠ ㅠ),스터디도 자연스럽게 해체됐고 읽다만 책만 덩그러니 남았다. 첫 몇 장의 내용이 꽤 괜찮았던 터라, 어제부터 남은 부분을 쭉- 읽어봤다. 중요한 요소 요소를 예제를 들어가며 이해하기 쉽게 잘 설명하고 있다.예전에 몇몇 모듈을 만들어보다 겪었던 문제들에 대한 내용도 잘 설명되어 있더라.미리 읽어봤더라면 시간을 많이 절약할 수 있었을 텐데...라는 생각이 들었다.^^ 나중에 인덱스 용도로 참고할 목적으로 작성한 메모를 옮겨둔다. 여기선 4장부터의 내용만 메모했다.1장의 내용은 이전 포스트를 참고하면 되고,2장과 3장은 설치..
발생일: 2012.01.15 문제: 팀에서 노드(Node.js) 스터디를 하고 있다. 노드가 처음은 아니고, 얼마 전 노드로 작은 모듈을 만들어보기도 했지만,책을 읽으니 확실히 좋다. :) 지금은 '노드제이에스 프로그래밍'이란 책으로 스터디를 진행하고 있는데,글도 매끄럽고 쉽게 잘 읽혀져 좋다. http://book.naver.com/bookdb/book_detail.nhn?bid=6818977 책의 1장에 노드의 탄생 배경에 대한 내용이 있는데,꼭 알아두면 좋을 것 같아 메모해둔다. (노드 예찬론자였던 양형이 생각난다. ㅎㅎ) 해결책: var result = db.query('SELECT * FROM table');// result를 사용 일반적인 프로그래밍 언어나 플랫폼에서는 Blocking I/O ..
발생일: 2013.01.10 문제: node 에 포함된 npm(Node Package Manager)으로 패키지를 관리할 수 있다.헌데 node 자체의 버전 관리는 어떻게 하나~? 해결책: 노드 버전 관리 매니저가 있다. nave & nvm 대표적으로 nave와 nvm이 있고, 명령어나 사용법은 거의 동일하다. nave - Virtual Environments for Node - https://github.com/isaacs/nave - npm 패키지로 등록되어 있어서 npm을 통해 설치하면 된다. `npm install -g nave` nvm - Node Version Manager - https://github.com/creationix/nvm - curl이나 wget으로 install.sh을 다운로..
발생일: 2011.10.25 문제: 엘리먼트(element)와 노드(node)의 정확한 차이가 뭘까? 해결책: W3C의 DOM(Document Object Model) 스펙에 따르면, 노드 인터페이스(Node Interface)는 DOM의 가장 기본이 되는 데이터 타입이다. 노드 인터페이스를 구현한 여러 오브젝트가 있으며, 노드 타입으로 구분할 수 있다. 예) 엘리먼트 노드, 텍스트 노드, 속성 노드 등등 정리: 노드는 엘리먼트의 상위 개념이다. * 참고: - 노드 인터페이스와 타입별 nodeName과 nodeValue의 리턴값을 확인하고자 한다면: Interface Node Spec - DOM Structure Model에 대한 상세 스펙을 보고자 한다면: DOM Structure Model Spec ..