워크플로 친화적인 소프트웨어 작성하기
여러분이나 다른 사람이 작성한 프로그램이 Snakemake와 같은 워크플로 시스템에서 원활하게 작동하려면 몇 가지 설계 원칙을 따르는 것이 좋습니다.
1. 종료 코드를 올바르게 반환하기
워크플로 시스템은 프로그램의 성공 여부를 종료 상태 코드(Exit Code)로 판단합니다. * 성공 시 반드시 0을 반환하세요. * 오류 발생 시 0이 아닌 값(예: 1)을 반환하여 워크플로가 즉시 중단되도록 하세요.
2. 명령줄 인자(CLI) 지원
파일 경로를 코드 안에 직접 적지(Hard-coding) 마세요. 대신 명령줄 인자를 통해 입력과 출력 경로를 받을 수 있게 하세요. * 추천: argparse (Python), optparse (R), getopts (Bash)
# 나쁜 예 (경로가 고정됨)
python process_data.py
# 좋은 예 (Snakemake에서 제어 가능)
python process_data.py --input data.txt --output results.txt3. 부작용(Side Effects) 최소화
프로그램은 지정된 출력 파일 이외의 파일을 임의로 생성하거나 수정하지 않아야 합니다. 특히 워크플로가 관리하지 않는 위치에 임시 파일을 만드는 것은 피해야 합니다. 모든 작업은 지정된 디렉터리 내에서만 이루어지도록 하세요.
4. stdout과 stderr의 분리
- stdout (표준 출력): 프로그램의 실제 결과물이나 데이터
- stderr (표준 에러): 로그, 진행 상황, 오류 메시지
이 둘을 분리하면 사용자가 파이프(|)나 리다이렉션(>)으로 데이터를 처리하기 훨씬 수월해집니다.
5. 설치 가능성 제공 (Conda 지원)
소프트웨어가 Conda나 Docker 컨테이너를 통해 쉽게 설치될 수 있도록 구성하는 것이 가장 중요한 친절함 중 하나입니다. requirements.txt나 environment.yml 파일을 함께 제공하세요.
이러한 작은 배려가 여러분의 워크플로를 훨씬 더 견고하고 재사용 가능하게 만들어 줍니다.