Grunt 빌드에서 발생한 EADDRINUSE 오류


발생일: 2013.04.24

문제:
최근에 작업하고 있는 대부분의 라이브러리는 Grunt로 빌드하고 있다.

애용하는 몇 가지 빌드 라이브러리 중에 가장 좋아하는 건 grunt-contrib-livereload 인데,
LiveReload는 파일이 변경되면 브라우저를 바로 재시작해준다.

웹서버를 띄워서 파일을 열 때 리로드 용 코드를 추가하고,
파일 변경을 감시하고 있다가, 변경이 발생하면 페이지에 자동으로 적용해준다.

CSS가 변경된 경우엔 웹소켓으로 변경 내용을 가져와 새로고침 없이 바로 반영해주고,
JS나 HTML이 변경된 경우엔 페이지를 새로고침 해준다.

코드와 브라우저 사이를 왔다갔다 하지 않아도,
자동으로 수정 내용이 변경해주기 때문에 생산성이 크게 향상된다.

헌데, 어제부터 자꾸 EADDRINUSE 에러가 발생한다.
출력되는 오류 메시지는 아래와 같다.

  ... Starting Livereload server on 35729 ...
  ... Uhoh. Got error listen EADDRINUSE ...

35729 포트를 이미 사용하고 있다는 내용인데,
해당 포트를 사용하는 다른 프로세스가 있는지 확인해봐도 목록에 조회되지 않는다.

왜 이런 걸까...


해결책:

원인을 찾아내고 보니, 삽질하느라 보낸 시간이 정말 아깝다. ㅠ_ㅠ

그동안은 LiveReload를 Grunt의 default 태스크에 넣어두고 사용하고 있었다.

  grunt.registerTask('default', ['livereload-start', 'connect', 'regarde']);

기본 태스크로 넣어뒀기 때문에, 실행하려면 커맨드 라인에서 단순히 grunt 만 실행하면 됐다.

  > grunt


이번에 다른 빌드 스크립트를 추가하면서, 태스크를 명시적으로 구분하려고 livereload 란 이름을 줬다.

  grunt.registerTask('livereload', ['livereload-start', 'connect', 'regarde']);

아래처럼 실행하면 된다.

  > grunt livereload


이 때, 실행은 잘 되는데, 파일이 변경되면 EADDRINUSE 오류가 발생한다.
이미 grunt-contrib-livereload 라이브러리 내에서 livereload 란 이름의 태스크를 사용하고 있기 때문이었다.

아... -_-; 속상하다.
grunt.registerTask() 에서 태스크 이름이 중복될 때 미리 알려줬으면 쉽게 해결할 수 있었을 텐데, 아쉽다.


여튼, 태스크 이름을 변경하는 걸로 해결했다.

카테고리

분류 전체보기 (702)
About me. (6)
Daylogs (667)
비공개 (0)
영어공부 (0)
My works - 추억 (29)