발생일: 2013.04.29 문제: Express 서버를 띄운 후에, 예기치 않은 오류가 발생해서 서버가 종료됐다.서버를 다시 시작하려니 아래와 같은 메시지가 나오면서 시작되지 않는다. $ node app.js events.js:71 throw arguments[1]; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoException (net.js:770:11) at Server._listen2 (net.js:910:14) at listen (net.js:937:10) at Server.listen (net.js:986:5) at Object. (/Users/ohgyun/mywork/git-workspace/everydaywordbook/sr..
발생일: 2013.04.24 문제: 최근에 작업하고 있는 대부분의 라이브러리는 Grunt로 빌드하고 있다. 애용하는 몇 가지 빌드 라이브러리 중에 가장 좋아하는 건 grunt-contrib-livereload 인데,LiveReload는 파일이 변경되면 브라우저를 바로 재시작해준다. 웹서버를 띄워서 파일을 열 때 리로드 용 코드를 추가하고,파일 변경을 감시하고 있다가, 변경이 발생하면 페이지에 자동으로 적용해준다. CSS가 변경된 경우엔 웹소켓으로 변경 내용을 가져와 새로고침 없이 바로 반영해주고,JS나 HTML이 변경된 경우엔 페이지를 새로고침 해준다. 코드와 브라우저 사이를 왔다갔다 하지 않아도,자동으로 수정 내용이 변경해주기 때문에 생산성이 크게 향상된다. 헌데, 어제부터 자꾸 EADDRINUSE 에..
발생일: 2013.04.02 문제: Require.js 에는 AMD를 지원하지 않는 다른 라이브러리나 객체를 모듈로 정의하는 옵션이 있다.바로 shim 옵션이고, 해당 가이드 문서를 아래 링크에서 찾았었다. https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#wiki-shim 난 처음 사용할 때 가이드를 보고도 한참 이해가 되지 않았었다.설정을 하고도 자꾸 모듈을 찾지 못한다는 오류가 나서 한참을 삽질했던 기억이 있다. 예전 메모를 정리하다가 혹시 도움이 될까 남겨둔다. 해결책: 사실 위 가이드는 2.0으로 버전업하면서 만들어진 가이드라 현재 버전 가이드랑 약간 다르다.최신 가이드는 아래 링크에서 찾아볼 수 있다. http://req..
발생일: 2013.04.02 문제: 노드에서 몽고 디비를 사용하려고 하는데,몽고 디비 모듈에도 여러 가지가 있다. mongodb 모듈도 있는데, mongoose 란 모듈도 꽤 유명한 것 같다.두 모듈의 차이가 뭘까. 해결책: mongodb 는 로우 레벨의 드라이버 역할을 하는 모듈을,mongoose 는 ODM(Object Document Modeling) 도구이다.관계 모델링 툴이라 생각하면 되겠다. 몽구스 사용법에 대한 슬라이드도 함께 참고하자.http://www.slideshare.net/ggoodale/getting-started-with-mongodb-and-nodejs # 참고:- mongoose-vs-mongodb-nodejs-modules-extensions-which-better-and-why
발생일: 2013.03.31 문제: 며칠 전에 Pro Git 책을 다시 읽었다.git 은 평소에도 늘 사용하고 있고, 1년 전에도 한 번 읽었던 책인데,처음 읽은 것처럼 새로운 내용이 많더라. ㅎㅎ 예전에 git 브랜치를 효과적으로 나누고 관리하는 방법에 대해,홍과 Y형에게서 공유를 받은 적이 있다. Vincent Driessen 라는 개발자가 공유한 브랜칭 방식인데,브래칭 전략을 손쉽게 쓸 수 있게 git flow 라는 도구도 만들어놨다. 하지만 그 개념이 좀 복잡하게 느껴지기도 했고,git은 개인 프로젝트에서만 사용하고 브랜치도 개발용만 따로 땄던 터라,"뭐 그냥 그런 게 있군" 하고 넘어갔더랬다. 그러다 이번에 책을 다시 보고,git flow 를 다시 살펴보니, 오~ 정말 깔끔하고 훌륭한 브랜칭 전..
발생일: 2013.03.28 문제: 라이선스 문제로 각 브라우저에서 지원하는 비디오 태그의 코덱이 다르다고 알고 있다.자세히 살펴보자. 해결책: 비디오 형식은 매우 다양하며, 어떤 것은 무료지만 어떤 것을 라이선스 비용을 내야 한다.HTML5 비디오 태그와 관련된 비디오 형식에는 .ogg, .mp4, .webm 가 있다. 각 비디오 형식은 한 가지 또는 여러 가지 코덱을 사용해서비디오 또는 오디오를 압축하거나 압축을 푼다. 코덱을 사용하면 큰 용량의 비디오 데이터를 작은 크기의 파일로 압축해서 이용할 수 있기 때문에비디오 형식에 있어 매우 중요하다. 1. 테오라 + 보비스 = .ogg 테오라(Theroa, http://theora.org)는 Xiph.org에서 만든 무료 오픈소스 비디오 코덱이다.보비스(..
발생일: 2013.03.09 문제: 작은 node 앱에 Express 를 사용하고 있다.기본 HTTP 모듈과 Express 의 역할에 대해선 잘 알겠는데,Connect 에 대해선 명확히 감이 잡히지 않는다. Connect 는 정확히 뭐고, 세 모듈의 관계는 어떻게 될까? 해결책: 간략한 결론 먼저.노드는 기본적으로 HTTP 모듈을 가지고 있고,Connect 는 HTTP 모듈에 여러 플러그인(정적 파일, 로깅, 캐싱, 압축 등)을 추가할 수 있는 미들웨어 프레임워크다.Express 는 Connect 를 내장하고 있는 웹 애플리케이션 프레임워크다. 좀더 자세히,Connect 위주로 찬찬히 살펴보면, 다음과 같다. node.js 에서는 기본적으로 HTTP 모듈을 내장하고 있고,아래와 같이 createServe..
발생일: 2013.03.09 문제: 지난 주 스터디에선 `JSON.stringify()` 에 대한 얘기가 나왔었다. 가끔 객체를 문자열로 바꾸다가 에러가 발생했던 경험이 있어서,객체를 직렬화하는 경우 오류가 발생할 수 있으니 주의해야하고,아마도 프로토타입을 순회하는 과정에서 발생하는 것 같다고 설명했었다. 다음 날, 스터디 멤버 중 한 분이 오류가 발생하는 예제 코드에 대한 질문을 하셨는데,살펴보니 내가 잘못 설명한 부분이 있더라. =_= 해결책: 정확하게는, 프로토타입을 순회하는 과정에서 발생하는 게 아니라,순환 참조로 인해 발생하는 경우가 많다. 예를 들어,아래 코드는 TypeError: Converting circular structure to JSON 를 발생하게 된다. var a = []; a[..
발생일: 2013.03.07 문제: 며칠 전 M 과장님이 영어사전 크롬 익스텐션의 신기한 버그를 하나 알려줬다. 과장님이 개발하고 있는 페이지에서 require.js 를 사용하고 있는데,영어사전 익스텐션이 설치되어 있는 경우엔 메인 코드가 두 번 호출된다는 거다. 익스텐션에서도 require.js 를 사용하고 있긴 한데,..require.js 가 두 번 로드되면서 뭔가 충돌이 일어난 것 같다. 정확한 원인이 뭘까? 해결책: 먼저, require.js 가 메인 코드를 가져와 실행하는 과정은 다음과 같다. 1. require.js 가 로드되면, 페이지 내에서 require.js 에서 코드를 초기화할 때,전역 변수인 `requirejs, require, define` 가 이미 존재할 경우 중복 정의하지 않기 ..