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 를 구성해보도록 하겠다.