데이터 과학을 위한 저작도구

Make 와 doit 비교

Make가 아닌 doit을 학습하는 이유.

소프트웨어 카펜트리에 서로 다른 두가지 빌드 도구를 가지고 수업을 진행한다: Make 와 doit. 자료 분석 파이프라인(Data Analysis Pipeline)을 자동화할 때, 어느 것을 선택해야 할까? 여기에서 각 도구의 장점과 단점을 전반적으로 다뤄보려고 한다.

1. 대중성 (Popularity)

Make는 현재 사용되고 있는 가장 대중적인 빌드 도구(build tool)다. 아마도 이것이 가장 큰 장점이다. Makefiles 작성하는 방법을 배우면 누군가 작성한 파이프라인을 재사용할 수 있는 도움을 받게된다. 컴파일된 언어로 작성된 소스코드를 가지고 소프트웨어를 설치하려면 이것은 매우 큰 혜택이다. 만약 ./configure; make; make install 조합을 타이핑해서 무언가 설치한다면, 부지불식 중에 Makefiles를 이미 사용하고 있는 것이다. 다른 한편으로 Doit은 훨씬더 적은 사용자 기반이 있다. 만약 doit을 배운다면, 유사 사례를 찾는데 훨씬 더 어려움이 있고, 더 적은 사람이 Stack Overflow 같은 사이트나 포럼에서 도움이 된다.

2. 가용성(Availability)

Make는 기본 디폴트로 대부분 유닉스 컴퓨터(즉, 리눅스와 맥)에서 사용가능하다. 반대로 Doit은 사용하는 어떤 컴퓨터에도 선탑재되어 있지 않을 가능성이 높다. 만약 루트 권한이 있다면, Doit을 설치하는 것은 매우 쉽다. 하지만, 루트 권한이 없다면 파이썬 패키징관련 문제로 고생할 수도 있다. 또다른 한편으로 만약 윈도우 사용자라면, doit 혹은 Make 어느 것도 기본 디폴트로 설치되어 있지 않아서, doit이 매우 설치하기 쉬운 것이 당연할지도 모른다.

3. 가독성 (Readability)

DoitMake 보다 축약되지 않고(verbose) 훨씬 더 가독성이 좋다. Make에는 $^$@ 같은 명확하지 않은 자동변수가 있는 반면에, doit에 대응되는 %(의존성)와 %(대상, target) 자동변수가 아마도 더 명확하다. 그리고 추가하고자 하는 매개변수 혹은 if/then 제어 흐름이 make보다 doit/python에서 훨씬더 가독성이 좋다. - 코드를 읽는 사람이 어느 언더도 모른다면 특히 그렇다.

4. 자동-문서화(Self-Documentation)

Doitlist 명령을 구현해서 명령라인에 가용한 모든 대상(target)을 목록으로 출력할 수 있다. 만약 작업을 docstring으로 작성하면, doit은 또한 각 대상(target)별로 도움말 페이지에 노출시킨다. 기본 디폴트로 Makedoit 어느 것도 가능한 매개변수를 목록으로 출력하는데 작업은 좋지 못하다. 하지만, 약간의 작업으로 doitargparse 같은 파이썬 라이브러리와 조합될 수 있다. 이를 통해서 훨씬더 사용성 좋고, 자동문서화하는 사용자 인터페이스가 가능하다.

5. 예행연습 (Dry Runs)

Make를 "예행연습(dry run)" 모드로 실행해서 실제로는 어떤 것도 수행하지 않지만, 대신에 실행될 명령을 단순히 출력만 한다. Doit에는 대응되는 명령 모드가 없다.

6. 파이썬 (Python)

만약 이미 파이썬을 알고 있다면, doit을 배우는 것이 Make를 배우는 것보다 훨씬 더 빠르다. 추가적으로, 만약 주로 파이썬으로 작업한다면, doit으로 파이프라인 작업을 자동화하는 것이 프로그래밍 언어 사이를 전환하면서 연관된 인지부하를 줄인다.

7. 디버깅 (Debugging)

Doit은 어떤 이용가능한 파이썬 디버거도 쓸 수 있다. 또한, pdb 옵션을 갖고 doit을 실행할 수도 있는데, 오류가 발생할 때, pdb 쉘에 자동으로 떨어뜨릴 수 있다. Make에도 가용한 디버거가 있지만, 사용하기는 그다지 쉽지는 않다.

8. 확장성 (Extensibility)

Doit은 매우 가볍고 매우 확장성이 좋다. 쉽게 본인만의 명령어를 추가하고, 작업이 재실행되는 자신만의 방법도 추가하고, 파이프라인 실행 결과를 자신만의 보고서를 만들기도 쉽다.

9. doit 데이터베이스

만약 의존성(dependancy) 시간도장(timestamp)이 대상 시간도장보다 최신인지에 따라 Make는 파일이 변경되었는지 결정한다.Doit은 파일 변경 여부를 파일에 MD5 해쉬(즉, 파일 실제 내용이 변경되었다면)에 변경여부를 탐지해서 결정한다. 이런 방식이 원치않는 대상 파일에 대한 재실행을 방지한다. 다른 한편으로, doit은 데이터베이스로 MD5 해쉬 파일을 저장할 필요가 있다. 우연히 해쉬파일을 삭제하게 되거나 데이터베이스 파일을 찾을 수 없는 방식으로 doit을 실행하게 된다면, 어떤 파일이 변경되었는지 판별할 수 없고, 기본 디폴트 설정으로 모든 작업을 다시 실행한다.