티스토리 뷰

발생일: 2015.05.16

키워드: grunt to gulp, gulp, grunt, 걸프, 그런트

문제:
프로젝트의 빌드 툴을 그런트에서 걸프로 변경해보려고 한다.

그런트에 이미 굉장히 익숙하고 사용하는데에도 전혀 불편함이 없는데다,
여전히 활발히 사용되고 있는 빌드 도구라 사실 바꾸지 않아도 될 것 같긴 했다.

그치만, 빠른 속도로 성장해서 이미 많은 프로젝트의 빌드 도구로 자리잡고 있는데다,
'그런트보다 성능이 좋다'라는 얘기를 들어와서 변경을 검토해보려고 한다.

특히 최근 프로젝트의 규모가 커지면서 그런트 빌드 시간이 많이 늘어났는데,
빌드 시간을 단축할 수 있다는 얘기에 더 혹 하게 되더라.

걸프는 어떤 특징이 있고, 뭐가 좋은가?


해결책:

걸프에 대한 자료는 이미 검색하면 많이 나와서,
여기선 몇 가지 특징적인 부분만 기재했다.

먼저, 그런트에 비해 특징적인 장점은 아래와 같다.

1. 스트림은 파일 IO보다 빠르다.
걸프는 기본적으로 스트림을 사용하는 빌드 도구다.
각 태스크는 빌드할 소스를 스트림으로 읽어와 중간 중간 플러그인을 끼워넣고 파이프로 전달하는 방식이다.

이 작업은 메모리에서 진행되기 때문에,
매 빌드마다 임시 파일을 생성하는 패턴인 그런트와 비교했을 때, 파일 IO 비용을 절약할 수 있다.


2. Code over configuration로 자유롭게 작성할 수 있다.
또한 걸프는 설정을 일반 스크립트로 작성할 수 있기 때문에,
그런트에 비해 자유롭게 태스크를 작성할 수 있다. (일반 노드 모듈을 가져다 쓸 수 있다)


3. 태스크를 병렬 진행함으로 빠르다.
걸프에서는 아래 코드처럼, 각 태스크 전에 선행되어야 하는 태스크들을 정의할 수 있다.

  gulp.task('foo', ['bar', 'baz']);

그런트와 달리 의존하고 있는 태스크들은 병렬로 동시에 실행된다.
위 코드에서는 `foo` 태스크가 실행되기 전에, `bar`와 `baz` 태스크가 병렬로 진행된다.



그 외 기억해야할만한 정보:

내부적으로 아래 모듈을 사용한다.
- through2: 노드의 스트림을 처리하는 모듈
- vinly: 파일의 메타데이터를 포함한 객체. 걸프의 한 플러그인에서 다음 플러그인으로 전달되는 건 vinly 객체이다.
- orchestrator: 태스크 처리를 위한 모듈



반응형
댓글
공지사항