Nextflow 기초: 프로세스(Process)
목차
소개#
프로세스(Process) 는 Nextflow 워크플로우에서 실제 작업이 일어나는 최소 단위다. 각 프로세스는 독립적인 작업 환경(격리된 디렉토리)에서 실행되며, 앞서 배운 채널을 통해 데이터를 입력받고 결과를 다시 채널로 반환한다.
채널이 데이터라는 원재료를 운반하는 '컨베이어 벨트' 라면, 프로세스는 그 재료를 가공하는 일종의 '공정' 과 같다.
주요 특징#
Nextflow 프로세스의 가장 큰 특징은 실행 환경의 격리다. 각 프로세스는 실행될 때마다 임시 작업 디렉토리(work/...)를 생성하고 그 안에서만 움직인다.
- 입력 파일: 필요한 파일만 작업 디렉토리로 심볼릭 링크를 통해 가져온다.
- 충돌 방지: 같은 프로세스가 병렬로 100개 실행되어도 각자 다른 디렉토리에서 작업하므로 파일 이름이 겹치는 이유로 에러가 발생하지 않는다.
프로세스의 기본 구조#
Nextflow 프로세스는 크게 다음과 같이 구성된다.
process <NAME> {
[ directives ] // 실행 환경 설정 (cpus, memory, container...)
input: // 채널로부터 받을 데이터 정의
<input_definition>
output: // 다음 채널로 보낼 결과 정의
<output_definition>
when: // (선택) 실행 조건
<condition>
script: // 실제 실행할 쉘 스크립트나 명령어
"""
<commands>
"""
}핵심 구성 요소
-
Input (입력)
채널을 통해 들어오는 데이터를 프로세스 내부에서 사용할 변수나 파일 이름으로 정의한다.
val, path, tuple 등의 수식어를 사용할 수 있다. -
Output (출력)
프로세스가 완료된 후 생성된 결과물 중, 다음 단계로 넘겨줄 데이터를 정의한다.
여기서 정의된 파일이나 값은 다시 채널 형태로 반환된다. -
Script (스크립트)
가장 중요한 부분으로 bash, python, R 등 사용자가 실행하고자 하는 실제 명령어를 작성한다.
Nextflow 변수를 $variable 형태로 참조하여 동적 스크립트 생성이 가능하다. -
Directives (지시자)
해당 프로세스가 사용할 자원을 명시한다. 설정은 다양하며, 아래와 같은 값을 예로 사용할 수 있다.cpus 4: CPU 4개 할당memory '8 GB': 메모리 8GB 할당container 'ubuntu:latest': 특정 도커 이미지 사용
마무리#
채널과 프로세스에 대해 알아보았는데, 다음 글에서는 이 둘을 사용하여 동작하는 workflow 를 구성해보도록 하겠다.