어느새 Node.js 프로그래밍을 출간한지 1년이 다 되어가는데 공개적 혹은 개인적으로 예제코드에 대한 문의가 종종 왔었습니다. 그 사이에 Node.js가 0.8.x로 올라갔고 곧 0.10.x가 나올 예정입니다.(책은 0.6.x 기준입니다.) Node.js 자체는 큰 호환성 문제는 없지만 사용하는 모듈들의 업그래이드로 호환성이 깨진 경우가 종종 있었는데 이렇게 사용할 때 오류에 대해서 문의가 있어서 express가 2.5에서 3.0으로 올라가면서 달라진 점에 대한 포스팅을 올리기도 했습니다.
예제 소스의 문제를 어떻게 해결할까를 좀 고민했었습니다. 기존 소스를 그대로 변경하면 책을 보고 그대로 따라하는 분들이 오히려 혼란스러울 수 있기 때문이죠. 소스는 대부분 package.json에 의존성을 명시해 놓았기 때문에 그대로 사용할 경우는 호환성 문제가 발생하지 않아야 하지만 최신 모듈들을 설치해서 쓰시는 분들이 꽤 있고 지금 프로젝트를 하게 되면 당연히 최신 프로젝트를 사용하려고 할 것이기 때문에 필요한 부분이라고 생각했습니다.
고민 끝에 github 저장소에 features/node-0.8 브랜치를 생성해서 소스를 업데이트했습니다. 기존 소스는 그대로 유지하고 최신버전에 관심있으신 분들의 문제를 둘다 해결할 수 있는 방법이라고 생각했습니다. Git에 익숙하지 않은 사람들이 많을 것 같아서 걱정하긴 했지만 Github에서 브랜치에 대한 다운로드도 제공하고 있기 때문에 괜찮을 거라고 생각했습니다.
노드 자체는 큰 변경사항은 없없기 때문에 path.exist를 fs.exist로 변경한게 전부이고 대부분의 모듈은 의존성을 변경해도 큰 문제가 없었지만 express가 3.x로 올라가면서 변경된 내용들이 대부분이었습니다. express와 관련해서 express 서버를 실행하는 방식을 변경했고 Socket.IO와 연동하는 방식이 달라졌습니다.(express 객체가 더이상 HTTP 서버가 아니게 되었기 때문에...) 자세한 변경사항은 커밋로그에서 확인할 수 있습니다.
' ' 2년전에 prototype을 공부하면서 블로그에 들어와서 많은 정보를 얻고 갔엇는데
node.js 에 관련된 포스팅도 있네요 ㅎㅎ 이 글을 보면서 책 제목이 익숙하다고 했더니
얼마 전에 구매한 책이네요 ㅎㅎ 좋은 책 감사합니다 ㅎㅎ
제 책을 구입해 주신 고객님이시군요. ^^ 감사드립니다. 언제든 따가운 질책도 환영합니다.
책 잘 읽어보았습니다. 좋은 책 써주셔서 감사합니다.
몇가지 딴지.. ^^;
2장에서 module.export 설명이 잘 이해가 잘 안되네요
책의 내용중 아래와 같은 내용이 있습니다.
모듈 외에 직접 작성한 자바스크립트 파일 사이에서 서로 호출하는 방법을 알아보자.
// user_module.js
var something = module.exports = {};
// demo.js
var usermodule = require('./user_module');
이 부분 설명시.. 실제 export해서 어떤 함수라도 호출하는 예제를 보여주셨으면 더 좋았을텐데 하는 생각이 듭니다.
"something이 뭐지? usermoduel.something를 호출하나?"
고민을 하게 되더라구요.
예를 들어 usermodule.sayHello(); 이런 식으로 호출하는 예제까지 있었으면 더 좋을 것 같습니다.
그리고.. 5장 예제가 restler를 사용하고 있는데요
아래와 같은 오류가 발생하네요.
$ node app.js
{ errors:
[ { message: 'The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.',
code: 68 } ] }
현재 5장까지 스터디 진행해서.. 책리뷰는 여기까지 ^^;
닉네임이 인상적이군요.. ㅎㅎㅎ
말씀하신 내용은 당시에도 고민을 많이 했던 부분인데 처음에 어느정도 자세히 설명하냐는 참 어려웠던것 같습니다. 너무 많은 부분을 담으면 동시에 이해해야 하는 부분도 많아지니까요. 이어서 예제등을 통해서 사용하는 방법이 나오고 exports가 객체에 한정되는건 아니라서 저런식으로 적었던건데 오히려 좀 헷갈리셨나 보군요... 죄송합니다.
5장은... 외부의 요인이라 참 어렵군요. 다음에 에제업글할때 갱신해야겠습니다. 트위터가 6월인가에 v1 API를 완정히 종료해서 그렇습니다.(당시에는 예정에 없던 일이라..) 테스트해봐야겠지만 URL에 1.0을 1.1로만 바꾸면 동작할겁니다.
윗분 말씀처럼 5장의 restler를 활용해 트윗을 가져오는 부분이 되지 않아
구글링으로 아래 모듈을 이용해서 해결했습니다.
ouath인증후에 api를 이용할 수 있는 것 같네요.
https://github.com/istrategylabs/node-twitter
안녕하세요 ㅎㅎ 예제 따라하면서 열심히 공부중에 있는 실무 뛰어든지 1년 쪼금 넘은 초짜 개발자 입니다..
chap7 에 server.js 부분에서요..
io.configure <- 이 부부이 존재하지 않는 함수라고 계속 뜨네요..
제가 사용하고 있는 version은 최신 v0.12.5 입니다..
github에 올라와 있는데로 해봤는데 똑같더군요 ㅜ
그 사이에 사용하는 모듈의 버전이 많이 올라갔는데 여기서 하위호환성이 깨져서 그렇습니다. socket.io 0.9.x에서는 괜찮은데 1.x 부터는 configure 함수가 사라졌습니다.
io = io.listen(server);
io.configure(function(){
io.enable('browser client etag');
io.set('log level', 3);
io.set('transports', [
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);
기존에 위처럼 설정하는 대신에 이제는 다음과 같이 listen 함수에서 두번째 파라미터로 설정 객체를 전달하면 됩니다.
io = io.listen(server, {
transports: ['polling', 'websocket'],
allowUpgrades: true
});