본문으로 건너뛰기

[HPC 101] 파일 전송: SCP, Rsync, Git 완전 정리

Will Paik
작성자
Will Paik
대규모 GPU 클러스터를 최적화하는 HPC 엔지니어. 밤에는 방구석 미니 슈퍼컴퓨터를 조립하며(가끔은 태워 먹으며) 그 과정을 기록합니다.
HPC 101 - 이 글은 시리즈의 일부입니다.
파트 2: 이 글

컴퓨팅 파워는 생겼습니다. 이제 데이터가 필요합니다.

로컬 머신(랩탑이나 워크스테이션)과 HPC 클러스터 사이를 오가며 파일을 주고받는 건 연구자의 일상입니다. 코드, 입력 데이터, 그리고 결과물까지 모두요. 파일 압축부터 대용량 데이터셋 처리까지, 파일 전송 기초를 정리했습니다.

1. 기본 규칙: 옮기기 전에 먼저 묶습니다
#

이사할 때를 생각해보겠습니다.

이전 포스트에서 HPC 클러스터를 호텔에 비유했습니다. 그럼 제 랩탑은 예전에 살던 집입니다. 짐(데이터)을 새 집(HPC 클러스터)으로 옮겨야 합니다.

양말이 10,000켤레 있다고 상상해봅니다 (작은 파일들). 이사 트럭에 하나씩 들고 나를 건가요? 당연히 아니죠. 먼저 박스에 넣을 겁니다.

HPC에서도 마찬가지입니다. 작은 파일 수천 개를 하나씩 전송하면 네트워크 오버헤드 때문에 성능이 뚝 떨어져요. 그래서 파일이나 폴더를 먼저 아카이브로 묶어야 합니다.

Tar vs. Zip 선택하기
#

# 묶기 (아카이브 생성)
$ tar -czf my_data.tar.gz my_folder
# -c: 생성 (Create)
# -z: Gzip 압축
# -f: 파일 이름 지정

# 풀기 (아카이브 압축 해제)
$ tar -xf my_data.tar.gz
# -x: 압축 해제 (Extract)
# -f: 파일 이름 지정
# (최신 시스템에서는 압축 방식을 자동으로 감지합니다)
# 묶기 (아카이브 생성)
$ zip -r my_data.zip my_folder
# -r: 하위 폴더 포함 (Recursive)

# 풀기 (아카이브 압축 해제)
$ unzip my_data.zip

2. 직접 다운로드 (웹에서 HPC로)
#

상황: 데이터가 웹사이트에 올라와 있습니다.

랩탑에 먼저 받아서 다시 클러스터에 올리지 마세요. 쓸데없는 이중 작업입니다. 택배를 새 집(클러스터)으로 직접 보내면 됩니다.

클러스터의 컴퓨트 노드(또는 전용 데이터 전송 노드가 있다면 거기서) wget 또는 curl을 씁니다. 로그인 노드에서 파일 전송을 직접 실행하는 건 보통 권장하지 않습니다.

# 방법 1: wget 사용
# wget <파일 주소>
$ wget https://example.com/dataset.tar.gz

# 방법 2: curl 사용
# curl -o <저장할 파일 이름> <파일 주소>
$ curl -o dataset.tar.gz https://example.com/dataset.tar.gz

3. 전송 도구: SCP vs. Rsync
#

상황: 파일이 제 랩탑에 있습니다. (아래 명령어는 로컬 터미널에서 실행해야 합니다. 클러스터 안에서 하는 게 아니에요.)

SCP (단순 던지기)
#

작은 파일이나 압축된 아카이브 하나를 보낼 때는 scp(Secure Copy)를 씁니다. 간단하고 빠르거든요.

# 업로드: 랩탑 -> 클러스터
$ scp my_data.tar.gz <USER>@<HOST_NAME>:~/
# 예: scp data.tar.gz [email protected]:~/

# 다운로드: 클러스터 -> 랩탑
$ scp <USER>@<HOST_NAME>:~/results.tar.gz ./
# 예: scp [email protected]:~/data.tar.gz ./

Rsync (스마트 이동)
#

100GB짜리 파일을 전송하다가 WiFi가 99%에서 끊기면? scp는 실패하고 0%부터 다시 시작해야 합니다. 정말 끔찍하죠.

rsync를 써보세요. 소스와 목적지 사이의 차이를 비교해서 연결이 끊겨도 이어서 전송합니다.

$ rsync -azP my_big_data <USER>@<CLUSTER>:~/
# 예: rsync -azP data_tar.gz [email protected]:~/

플래그 설명 (-azP):

  • -a: 아카이브 모드. 권한, 타임스탬프, 심볼릭 링크를 보존합니다.
  • -z: 전송 중 파일 데이터를 압축해서 속도를 높입니다.
  • -P: 진행 표시줄을 보여주고 부분 전송 이어받기가 됩니다.

선택 기준:

  • 작은 파일이나 단순 전송? SCP
  • 큰 파일이나 불안정한 네트워크? Rsync

4. GUI 클라이언트 (WinSCP & FileZilla)
#

“터미널은 질색이에요. 그냥 드래그 앤 드롭으로 딸깍은 안 되나요?”

됩니다! 아직 커맨드라인이 익숙하지 않거나 파일을 시각적으로 탐색하고 싶다면 SFTP 클라이언트를 써보세요.

추천 도구
#

연결 방법
#

SSH 접속 정보와 똑같이 입력하면 됩니다.

  1. 파일 프로토콜: SFTP
  2. 호스트 이름: 클러스터 주소 (예: data.university.edu)
  3. 포트 번호: 22 (기본 SSH 포트)
  4. 사용자/비밀번호: 본인 계정 정보

연결되면 왼쪽에 내 랩탑 파일이, 오른쪽에 클러스터 파일이 보입니다. 드래그 앤 드롭으로 전송하면 됩니다.

Globus 사용자 참고: 기관 간이나 클러스터 간에 수 테라바이트, 페타바이트 단위 대용량 데이터를 전송해야 한다면 시스템 관리자에게 Globus를 물어보세요. 연구 센터에서 많이 지원하는 고성능 전송 서비스입니다. SCP/SFTP보다 훨씬 빠르고 안정적입니다.

5. Git으로 코드 관리하기
#

상황: Python이나 C++ 스크립트를 옮겨야 합니다.

rsync로 코드를 복사할 수는 있습니다. 그런데 더 좋은 방법이 있습니다. 코드를 도서관의 책처럼 관리하는 겁니다. 오래된 판을 남기면서 새 판을 추가하고 대출도 할 수 있는 방식이요. Git을 쓰세요.

  1. 랩탑에서: 코드를 commit하고 GitHub/GitLab에 push합니다.
# 변경사항 커밋
$ git commit -a -m "커밋 메시지"

# GitHub에 push
$ git push
  1. 클러스터에서: 저장소를 clone하거나 pull합니다.
# 클러스터에서
$ git clone https://github.com/username/my-project.git

# 변경사항 받아오기
$ git pull

버전 히스토리가 안전하게 남고 협업도 훨씬 편해져요.

6. 저장 공간 할당량
#

주의: ‘호텔 방’ 비유 기억하시나요? 방에는 수용 인원 제한이 있습니다. HPC에서는 이걸 Quota(할당량) 라고 부릅니다.

디스크가 꽉 차면 작업이 실패하고 파일을 저장하지 못하거나 심지어 로그인도 안 될 수 있습니다.

확인 방법은? 기관마다 명령어가 다릅니다. 흔한 예시를 들면,

  • $ quota -s
  • $ lfs quota -u user123 /home/user123
  • $ check_usage

정확한 명령어는 사용자 문서를 확인하거나 지원팀에 확인해보세요. 대용량 데이터셋을 전송하기 전에 항상 여유 공간을 확인합니다.


정리

파일 전송 툴
  1. 작은 파일은 먼저 묶습니다 (tar 또는 zip).
  2. 웹 데이터는 wget 으로 바로 받습니다.
  3. 빠른 소규모 전송에는 scp 를 씁니다.
  4. 크거나 안정적인 전송에는 rsync -azP 를 씁니다.
  5. 코드에는 git 을 씁니다.

잘 하셨습니다! 데이터를 준비하는 방법을 배웠습니다. 다음 포스트에서는 Conda로 소프트웨어 환경을 관리하는 방법을 다룰 겁니다.

즐거운 컴퓨팅 되세요!

HPC 101 - 이 글은 시리즈의 일부입니다.
파트 2: 이 글