파트 4: Hello Modules - 동영상 강의 스크립트¶
AI 지원 번역 - 자세히 알아보기 및 개선 제안
참고
이 페이지는 스크립트만 제공합니다. 전체 단계별 지침은 과정 자료를 참조하세요.
스크립트에 표시된 섹션 번호는 참고용으로만 제공되며, 자료의 모든 섹션 번호를 포함하지 않을 수 있습니다.
환영합니다¶
안녕하세요, Hello Nextflow 파트 4에 오신 것을 환영합니다. 이번 섹션은 모듈에 관한 내용으로, 과정에서 비교적 짧은 부분입니다. 실제로 코드를 많이 작성하지는 않으며, 파이프라인에서 코드를 어떻게 구성하는지에 초점을 맞춥니다.
지금까지는 모든 코드를 단일 파일에 작성해 왔습니다. 이 방식도 괜찮으며, 예전에는 실제로 이런 방식으로 Nextflow 파이프라인을 구축했습니다.
하지만 파이프라인이 커질수록 스크립트는 점점 길어지고, 탐색하고 유지 관리하기가 어려워집니다. 또한 코드를 공유하기도 어렵습니다.
Nextflow 모듈을 사용하면 메인 스크립트에서 process를 분리하여 가져올 수 있습니다. 이를 통해 코드 탐색이 쉬워지고, 서로 다른 파이프라인 간에 모듈 코드를 공유할 수 있습니다.
문서 메인 페이지의 작은 다이어그램이 이 개념을 잘 보여줍니다. 하나의 거대한 스크립트 대신, 서로 다른 모듈 스크립트에서 별도의 모듈 파일을 포함하게 됩니다. 이 모든 것이 워크플로우로 통합되지만, 실행 방식은 완전히 동일합니다.
GitHub Codespaces를 열어 살펴보겠습니다. 이전과 마찬가지로 작업 공간을 정리했습니다. 이전 Nextflow 디렉토리와 work 디렉토리 등을 삭제했습니다. 하지만 해당 파일들이 남아 있어도 괜찮습니다.
이전 챕터 마지막 상태의 hello modules 파일에서 작업을 시작하겠습니다. 세 개의 process가 있고, 몇 가지 params, 워크플로우 블록이 있습니다. 워크플로우 블록에서는 세 개의 process를 실행하고 채널로 연결합니다. 그런 다음 출력 채널을 게시하고, 해당 파일을 게시하는 방법을 지정하는 output 블록이 있습니다.
1. 모듈을 저장할 디렉토리 생성¶
앞서 말씀드린 것처럼, 코드를 많이 작성하거나 편집하지는 않습니다. 이미 작성된 코드를 이동하는 작업을 진행합니다. Nextflow 모듈 파일은 일반적으로 하나의 process를 포함하며, 관례적으로 modules라는 디렉토리에 보관합니다. 물론 원하는 이름을 사용해도 됩니다. 저장소에 modules 디렉토리를 만들고, 각 process마다 하나의 파일을 생성하겠습니다. 새 파일 이름은 sayHello.nf로 지정합니다.
2. sayHello()에 대한 모듈 생성¶
이제 process를 가져와서 해당 코드를 선택하고, 메인 hello modules 파일에서 잘라내어 여기에 붙여넣겠습니다.
물론 이것만으로는 아무것도 실행되지 않습니다. 메인 스크립트에는 여전히 해당 process가 필요하므로, 다시 가져와야 합니다. 이를 위해 include 구문을 사용합니다.
include와 중괄호를 입력하고, process 이름을 작성합니다. 그런 다음 from을 입력하고 상대 파일 경로를 지정합니다. 스크립트가 저장된 위치를 기준으로 상대 경로이므로 ./로 시작합니다. 경로는 modules/sayHello.nf입니다.
VS Code 확장 기능이 여기서 매우 유용합니다. 해당 파일을 찾을 수 있는지, 그리고 가져오려는 process를 찾을 수 있는지 알려줍니다. 의도적으로 오타를 입력하면 즉시 오류가 표시되며, 가져오려는 process를 찾을 수 없다고 알려줍니다. 오류가 발생하면 주의 깊게 확인하세요.
이것이 전부입니다. process는 그대로 있으며, 아래 부분에는 변경이 필요하지 않습니다. process 이름은 동일하고 실행 방식도 완전히 같습니다. 단지 process의 실제 코드가 별도의 파일에 있을 뿐입니다.
Nextflow 워크플로우를 다시 실행하면 완전히 동일하게 작동합니다. 이 챕터의 나머지 부분은 세 개의 process를 각각의 파일로 이동하는 작업입니다.
지금 바로 진행하겠습니다. 두 번째 process인 convertToUpper.nf에 대한 새 모듈 파일을 빠르게 생성하겠습니다. 해당 코드를 잘라내어 붙여넣고, include 구문을 추가합니다.
그런 다음 collectGreetings.nf에 대한 새 파일을 생성하고 코드를 잘라냅니다.
잘라내기, 복사, 붙여넣기 작업이 많습니다.
이제 메인 워크플로우 스크립트가 훨씬 짧아지고, 훨씬 보기 쉬우며 읽기도 편해졌습니다.
프로젝트가 여러 파일로 구성되기 시작하는 것을 확인할 수 있습니다. 원하는 부분의 세부 내용을 살펴보고, 파이프라인의 특정 단계를 훨씬 쉽게 찾아 탐색할 수 있으며, 파이프라인이 수행하는 작업을 빠르게 파악할 수 있습니다.
VS Code로 모듈 탐색하기¶
물론 이 방식의 단점도 있습니다. 파이프라인이 크면 모듈 파일이 많아지고, 여러 하위 디렉토리에 구성될 수 있습니다. 여기서도 유용한 팁이 있습니다. VS Code 확장 기능은 코드베이스 탐색과 코드 정보 제공에 매우 뛰어납니다.
VS Code가 해당 process를 이해하고, 마우스를 올리면 간략한 개요를 보여줍니다. 소스 코드를 직접 찾아가지 않아도 입력과 출력을 확인할 수 있습니다. 워크플로우에서 사용할 때 가장 중요한 정보입니다.
또한 Mac에서 Command 키를 누른 채 process 이름을 클릭하면 해당 파일이 바로 열립니다. 실제 파일 경로를 생각하지 않아도 바로 이동할 수 있습니다. process가 실행되는 위치에서도 동일하게 작동하므로 매우 빠르게 탐색할 수 있습니다.
4.4. 워크플로우 실행¶
파이프라인이 예상대로 실행되는지 확인합니다. 터미널을 열고 nextflow run hello modules를 실행하여 문제없이 실행되는지 확인합니다.
이 작업의 핵심은 파이프라인이 기본적으로 변경되지 않았다는 것입니다. 이전에 실행했을 때와 실질적인 차이가 없어야 합니다. 출력 결과가 완전히 동일하고, 동일한 파일들이 있는 results 디렉토리를 확인할 수 있습니다. 변경 사항이 없다는 것이 바로 성공입니다.
nf-core/modules에 대한 참고 사항¶
마무리하기 전에, 모듈과 관련된 협업의 강점에 대해 간략히 언급하고 싶습니다. 이 파일들은 제 저장소에 있으므로, 어떻게 협업할 수 있는지 바로 명확하지 않을 수 있습니다. 다양한 방법이 있지만, 가장 크고 잘 알려진 예시는 nf-core입니다.
nf-core 웹사이트에서 Resources의 Modules로 이동하면, nf-core가 방대한 모듈 라이브러리를 보유하고 있음을 확인할 수 있습니다. 제가 확인했을 때 거의 1,700개에 달하는 모듈이 있었습니다. 즐겨 사용하는 도구 이름을 검색하여 누군가 이미 해당 모듈을 작성했는지 확인하고, 입력, 출력, 소프트웨어 컨테이너 등 모든 정보가 포함된 미리 작성된 모듈 process를 확인할 수 있습니다. 또한 얼마나 많은 nf-core 파이프라인이 이 단일 공유 process를 사용하고 있는지도 확인할 수 있습니다.
다소 극단적인 예시이지만, 코드가 실제로 재사용되고 있음을 알 수 있습니다. GitHub 소스를 클릭하면 우리가 하는 것과 완전히 동일합니다. 파일 안에 있는 하나의 큰 process일 뿐입니다.
nf-core 측에서는 파일을 공유하고 서로 다른 저장소로 가져오기 위한 몇 가지 기법을 사용합니다. 이에 대해 더 알고 싶다면, nf-core 활용 및 구축에 관한 전용 과정을 확인하세요. 코드 재사용이라는 개념이 얼마나 강력한지 간략히 소개하고 싶었습니다.
마무리¶
모듈에 대한 내용은 여기까지입니다. 짧은 섹션이라고 말씀드렸죠. 퀴즈를 확인하여 내용을 잘 이해했는지, 모든 것이 올바르게 작동하는지 확인하세요. 다음 동영상에서 다시 만나겠습니다. 다음 내용은 소프트웨어 컨테이너에 관한 것입니다. 감사합니다.