연구 서버 세팅 가이드: SSH부터 conda까지, 삽질 없이 한 번에 끝내기
🐍

연구 서버 세팅 가이드: SSH부터 conda까지, 삽질 없이 한 번에 끝내기

Tags
Intern
Published
January 6, 2026
Author
SSUM
들어가며큰 그림: 연결은 3층 구조다Step 0. 용어/개념 먼저 정리 (실수 방지)SSH 키 (로컬 → 서버)SSH 키 (서버 → GitHub)git user.name / user.emailconda envStep 1. (로컬 맥) 서버 접속을 "ssh rose" 한 줄로 만들기1-1) 로컬 SSH 키 준비1-2) 로컬 ~/.ssh/config에 서버 별명 등록1-3) 동작 확인왜 이걸 해야하나?Step 2. (VS Code) Remote-SSH가 rose를 못 찾는 이유 해결2-1) VS Code가 어떤 config를 보는지 확인2-2) 터미널에서 확인실전 팁Step 3. (서버) Git 커밋 에러 (Author identity unknown) 해결해결 방법왜 이걸 해야하나?Step 4. (서버) GitHub SSH 인증 (Permission denied publickey) 해결전형적인 에러4-1) 서버에 SSH 키 생성4-2) GitHub에 공개키 등록4-3) 서버에서 인증 테스트4-4) (자주 필요한) GitHub용 키 고정왜 이걸 해야하나?Step 5. Git clone / 첫 구조 / push까지 깔끔한 루틴5-1) 빈 레포면 clone 후 작업하면 끝5-2) 프로젝트 골격 만들기5-3) .gitignore 먼저 (매우 중요!)5-4) 첫 커밋/push왜 .gitignore가 먼저냐?Step 6. conda로 "실험 가능한 가상환경" 만들기 (서버에서)6-1) conda 명령이 항상 먹게 만들기6-2) 프로젝트용 env 생성 (권장: base 건드리지 않기)6-3) 필요한 패키지 설치 (예시)6-4) 실험 재현을 위해 환경 저장 (핵심!)6-5) "한 번 세팅하고 날리기" (env 삭제)왜 conda env가 중요한가?Step 7. VS Code Remote에서 conda env로 작업 루틴7-1) VS Code로 rose 접속7-2) 터미널에서 conda 활성화7-3) Python Interpreter도 nmsl로 지정7-4) Jupyter 노트북 실행실전 팁실전 체크리스트 (문제 발생 지점 빠르게 특정)A) VS Code가 rose 못 찾음B) 서버에서 git commit이 안 됨C) 서버에서 git clone/push가 안 됨D) 실험이 안 돌아감 / 패키지 충돌Conda를 사용하면 얻을 수 있는 이점1. 완벽한 격리(Isolation)2. 크로스 플랫폼 재현성3. 파이썬 버전까지 통제4. 비파이썬 패키지까지 관리5. 속도 최적화 (conda-forge)6. 롤백 가능Conda의 주요 기능 총정리환경 관리패키지 관리환경 내보내기/불러오기채널 관리캐시 정리롤백 및 히스토리정보 확인너한테 딱 맞춘 "권장 운영 방식" 요약접속 (로컬 맥)GitHub (서버)실험 (서버)재현성보너스: 한 단계 더 나아가기Makefile (setup/run/clean 명령 한 방)scripts/setup_env.sh (conda env 자동 구성)README.md 템플릿 (서버 접속/환경 구축/실험 실행까지)Conclusion: 배운 점과 다짐참고 자료

들어가며

연구실 서버에 처음 접속하려다 막혀본 경험 있으신가요? 😅
나는 처음 연구실 서버(rose, suzy)를 세팅할 때 정말 많은 시행착오를 겪었다. Permission denied (publickey), Could not resolve hostname, Author identity unknown... 에러 메시지만 봐도 당시의 답답함이 떠오른다.
가장 큰 문제는 **"어디서 막혔는지 모르겠다"**는 것이었다. SSH 설정 문제인지, GitHub 인증 문제인지, conda 환경 문제인지... 각각의 레이어를 구분하지 못하니 "콘다 문제를 SSH로 해결"하려는 헛수고를 반복했다.
그래서 이번 글에서는 "큰 그림"을 먼저 이해하고, 각 단계를 명확히 구분하여 연구 서버를 세팅하는 방법을 정리해보려 한다. 이 글을 읽는 분들은 나처럼 삽질하지 않으셨으면 좋겠다. 😊

큰 그림: 연결은 3층 구조다

서버 세팅이 헷갈리는 이유는 3개의 독립적인 레이어가 얽혀있기 때문이다.
┌─────────────────────────────────────────────────────────────┐ │ 1층: 로컬(맥) ↔ 서버 접속 (SSH) │ │ → VS Code Remote도 여기서 막힘 │ ├─────────────────────────────────────────────────────────────┤ │ 2층: 서버 ↔ GitHub 인증 (SSH 키) │ │ → git clone/push가 여기서 막힘 │ ├─────────────────────────────────────────────────────────────┤ │ 3층: 서버 내부 실행 환경 (conda env) │ │ → 실험 재현이 여기서 가능해짐 │ └─────────────────────────────────────────────────────────────┘
핵심 원칙: 각 층은 완전히 독립적이다.
층이 다르니, "콘다 문제를 SSH로 해결"하거나 "GitHub 인증을 git config로 해결"하려는 시도는 100% 헛수고다. 문제가 발생하면 어느 층에서 막혔는지 먼저 특정해야 한다.
그럼 이제 각 층을 차례대로 정복해보자!

Step 0. 용어/개념 먼저 정리 (실수 방지)

본격적인 세팅에 앞서, 자주 헷갈리는 개념들을 정리하고 가자.

SSH 키 (로컬 → 서버)

  • 용도: 네 맥에서 ssh rose 같은 접속을 편하게 하기 위한 것
  • 위치: 로컬 맥의 ~/.ssh/id_ed25519
  • 등록: 서버의 ~/.ssh/authorized_keys에 등록

SSH 키 (서버 → GitHub)

  • 용도: 서버에서 git clone git@github.com:... 할 때 "GitHub 인증"을 위한 것
  • 위치: 서버의 ~/.ssh/id_ed25519
  • 등록: GitHub Settings → SSH keys에 등록

git user.name / user.email

  • 용도: 커밋에 "누가 만들었는지" 기록하기 위한 메타데이터 (인증이 아님!)
  • 설정: git config --global user.name "ssum21"
  • 주의: SSH 키와는 완전히 별개

conda env

  • 용도: 패키지/파이썬 버전을 묶어 실험 재현성을 확보하는 실행 환경
  • 예시: conda create -n nmsl python=3.11
  • 재현: conda env export > env.yml로 환경 저장
🤔 이 4가지만 명확히 구분해도 90%의 삽질을 피할 수 있다!

Step 1. (로컬 맥) 서버 접속을 "ssh rose" 한 줄로 만들기

첫 번째 층: 로컬 맥에서 서버로 접속하는 설정이다.

1-1) 로컬 SSH 키 준비

맥 터미널에서:
ls -al ~/.ssh
id_ed25519 / id_ed25519.pub가 없으면 생성:
ssh-keygen -t ed25519 -C "sumin@mac" # 엔터 엔터 (기본 파일명 사용) # 패스프레이즈는 선택 (보안 강화하려면 설정)
왜 ed25519?
  • RSA보다 빠르고 안전함
  • GitHub도 공식 권장

1-2) 로컬 ~/.ssh/config에 서버 별명 등록

맥에서:
vim ~/.ssh/config
다음 내용 추가 (rose/suzy 모두):
Host rose HostName rose.kaist.ac.kr User ssum IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes Host suzy HostName suzy.kaist.ac.kr User ssum IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes
파일 권한 설정 (중요!):
chmod 700 ~/.ssh chmod 600 ~/.ssh/config chmod 600 ~/.ssh/id_ed25519

1-3) 동작 확인

ssh -v rose
성공하면 서버에 접속된다!

왜 이걸 해야하나?

ssh rose는 DNS가 아니라 로컬 SSH config의 "Host 별명" 기능이다.
많은 사람들이 착각하는데, rose는 실제 도메인이 아니라 네 맥의 ~/.ssh/config에서만 인식되는 별명이다.
VS Code Remote-SSH도 네 맥에서 SSH를 실행하므로, 맥의 config가 안 잡히면 VS Code도 똑같이 실패한다.

Step 2. (VS Code) Remote-SSH가 rose를 못 찾는 이유 해결

VS Code로 서버 접속을 시도했는데 이런 에러를 본 적 있는가?
Could not resolve hostname rose
이건 거의 항상 **"VS Code가 보는 SSH config에 Host rose가 없다"**는 뜻이다.

2-1) VS Code가 어떤 config를 보는지 확인

VS Code에서:
  1. Command Palette (⌘⇧P)
  1. Remote-SSH: Open SSH Configuration File 입력
  1. 열리는 파일에 Host rose가 있어야 함
만약 없다면, Step 1에서 작성한 내용을 복사해서 붙여넣기.

2-2) 터미널에서 확인

맥에서:
ssh -G rose | head -n 30
여기서 hostname rose.kaist.ac.kr가 뜨면 VS Code도 거의 99% 된다.

실전 팁

VS Code의 SSH config 파일은 보통 다음 중 하나:
  • ~/.ssh/config (맥의 기본 설정)
  • VS Code 자체 설정 파일
만약 VS Code가 다른 파일을 보고 있다면, 해당 파일에도 Host를 등록해야 한다.

Step 3. (서버) Git 커밋 에러 (Author identity unknown) 해결

두 번째 층으로 넘어가기 전, Git 메타데이터 설정부터 하자.
서버에 처음 접속하면 이런 에러를 볼 수 있다:
Author identity unknown

해결 방법

서버에서 한 번만 실행:
git config --global user.name "ssum21" git config --global user.email "ssum21@users.noreply.github.com"
확인:
git config --global --list | grep user

왜 이걸 해야하나?

Git은 커밋에 항상 작성자(name/email)를 기록해야 한다.
이건 "권한/인증"이 아니라 "커밋 기록" 문제라서 SSH로 해결이 안 된다. 많은 사람들이 "SSH 키를 등록했는데 왜 커밋이 안 되지?"라고 헷갈리는데, 이 둘은 완전히 별개다.
참고: @users.noreply.github.com은 GitHub가 제공하는 익명 이메일로, 실제 이메일을 공개하고 싶지 않을 때 사용한다.

Step 4. (서버) GitHub SSH 인증 (Permission denied publickey) 해결

이제 두 번째 층: 서버에서 GitHub로 인증하는 단계다.

전형적인 에러

git clone git@github.com:ssum21/my-repo.git
실행 시:
Permission denied (publickey)
이건 서버가 GitHub에 자신을 증명할 키가 없거나 못 쓰는 상태다.

4-1) 서버에 SSH 키 생성

서버(suzy나 rose)에서:
ssh-keygen -t ed25519 -C "ssum21@suzy" # 엔터 엔터 (파일 기본), 패스프레이즈는 선택
공개키 확인:
cat ~/.ssh/id_ed25519.pub
출력된 내용 전체를 복사 (ssh-ed25519로 시작하는 긴 문자열).

4-2) GitHub에 공개키 등록

  1. GitHub → Settings → SSH and GPG keys
  1. New SSH key 클릭
  1. Title: "suzy server" (구분 가능한 이름)
  1. Key: 복사한 공개키 붙여넣기
  1. Add SSH key 클릭

4-3) 서버에서 인증 테스트

ssh -T git@github.com
성공 메시지:
Hi ssum21! You've successfully authenticated, but GitHub does not provide shell access.
이제 git clone이 된다! 😊

4-4) (자주 필요한) GitHub용 키 고정

서버에서 ~/.ssh/config:
vim ~/.ssh/config
다음 내용 추가:
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes
권한 설정:
chmod 600 ~/.ssh/config

왜 이걸 해야하나?

git@github.com으로 clone/push 할 때는 HTTPS 로그인이 아니라 SSH 키 인증이 필요하다.
많은 사람들이 착각하는 부분:
  • ❌ "내 맥에서 GitHub 로그인했으니 서버에서도 되겠지?"
  • 서버는 서버 자신만의 SSH 키가 있어야 한다.
보안 팁: 서버가 여러 대면 "서버별로 키 1개씩 만들어 GitHub에 등록"하는 게 관리도 쉽고 보안도 안전하다. 나중에 특정 서버의 접근만 취소하려면 해당 키만 삭제하면 되니까.

Step 5. Git clone / 첫 구조 / push까지 깔끔한 루틴

이제 본격적으로 프로젝트를 시작해보자!

5-1) 빈 레포면 clone 후 작업하면 끝

서버에서:
git clone git@github.com:ssum21/NMSL_TimeSeries_AI.git cd NMSL_TimeSeries_AI

5-2) 프로젝트 골격 만들기

mkdir -p data/raw data/processed experiments models notebooks scripts src touch src/{__init__.py,dataset.py,train.py,eval.py} touch .gitignore requirements.txt
디렉토리 구조:
NMSL_TimeSeries_AI/ ├── data/ │ ├── raw/ # 원본 데이터 (git 제외) │ └── processed/ # 전처리된 데이터 (git 제외) ├── experiments/ # 실험 결과, 로그 ├── models/ # 학습된 모델 가중치 ├── notebooks/ # Jupyter 노트북 ├── scripts/ # 실험 실행 스크립트 ├── src/ # 소스 코드 │ ├── __init__.py │ ├── dataset.py │ ├── train.py │ └── eval.py ├── .gitignore └── requirements.txt

5-3) .gitignore 먼저 (매우 중요!)

cat > .gitignore <<'EOF' # Python __pycache__/ *.pyc *.pyo .ipynb_checkpoints/ # 환경 .env .venv/ venv/ env/ # 데이터 (용량 큰 파일 제외) data/raw/* data/processed/* !data/raw/.gitkeep !data/processed/.gitkeep # 실험 결과 experiments/ models/*.pth models/*.pt # OS .DS_Store Thumbs.db EOF
빈 디렉토리도 git에 올리려면:
touch data/raw/.gitkeep data/processed/.gitkeep

5-4) 첫 커밋/push

git add . git commit -m "Initialize project structure" git push origin main

.gitignore가 먼저냐?

데이터/캐시/환경 파일을 실수로 커밋하면 나중에 레포가 오염되고 정리 비용이 커진다.
특히 연구 레포는 raw 데이터는 커밋하지 않는 게 원칙이다. 데이터는 보통 GB 단위라서 GitHub에 올리면:
  • 레포가 무거워짐
  • clone 시간 폭발
  • GitHub 용량 제한 초과 가능
대신 데이터는 별도 스토리지(Google Drive, AWS S3 등)에 저장하고, README에 다운로드 링크를 남긴다.

Step 6. conda로 "실험 가능한 가상환경" 만들기 (서버에서)

세 번째 층: 서버 내부 실행 환경 설정이다.
여기서부터가 "실제로 실험이 되는" 단계다.

6-1) conda 명령이 항상 먹게 만들기

서버에서:
~/anaconda3/bin/conda init bash source ~/.bashrc conda --version
만약 conda: command not found가 뜨면, anaconda 경로를 확인:
which conda # 또는 ls ~/anaconda3/bin/conda ls ~/miniconda3/bin/conda

6-2) 프로젝트용 env 생성 (권장: base 건드리지 않기)

중요: base 환경은 건드리지 말자. 실험은 독립된 env에서 통제한다.
conda create -n nmsl python=3.11 -y conda activate nmsl python --version
출력 예시:
Python 3.11.x

6-3) 필요한 패키지 설치 (예시)

# conda로 기본 패키지 conda install -y numpy pandas scipy scikit-learn matplotlib tqdm ipykernel # pip 업그레이드 pip install -U pip # PyTorch (예시: CUDA 12.1) conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia # 추가 라이브러리 pip install wandb transformers datasets

6-4) 실험 재현을 위해 환경 저장 (핵심!)

conda env export -n nmsl --from-history > env.nmsl.yml
  • -from-history의 의미:
  • 네가 명시적으로 설치한 패키지만 저장 (의존성 제외)
  • OS/CPU 아키텍처에 무관하게 재현 가능
  • 파일이 훨씬 깔끔함
생성된 env.nmsl.yml:
name: nmsl channels: - pytorch - nvidia - conda-forge - defaults dependencies: - python=3.11 - numpy - pandas - pytorch - torchvision - pip - pip: - wandb - transformers
이 파일을 git에 올리면:
git add env.nmsl.yml git commit -m "Add conda environment file" git push
다른 서버에서 재현:
conda env create -f env.nmsl.yml -n nmsl conda activate nmsl

6-5) "한 번 세팅하고 날리기" (env 삭제)

실험 끝나면 env를 통째로 지워서 서버를 깨끗하게 유지:
conda deactivate conda env remove -n nmsl

왜 conda env가 중요한가?

실험은 파이썬 버전 + 패키지 버전이 바뀌면 결과가 달라질 수 있다.
예를 들어:
  • PyTorch 2.0과 2.1은 난수 생성 방식이 다를 수 있음
  • NumPy 버전에 따라 부동소수점 연산 결과가 미묘하게 다를 수 있음
env를 yml로 남기면:
  • 서버 바뀌어도 같은 실험 가능
  • 논문 리뷰어가 재현 요청해도 대응 가능
  • 6개월 후 "이 실험 환경이 뭐였더라?" 고민 안 해도 됨
필요 없으면 env를 통째로 지워서 서버 디스크 절약!

Step 7. VS Code Remote에서 conda env로 작업 루틴

이제 모든 세팅이 끝났으니, 실전 작업 루틴을 정리해보자.

7-1) VS Code로 rose 접속

  1. VS Code 실행
  1. Command Palette (⌘⇧P) → Remote-SSH: Connect to Host
  1. rose 선택
  1. 새 창에서 서버 연결됨

7-2) 터미널에서 conda 활성화

VS Code 터미널에서:
conda activate nmsl
프롬프트가 (nmsl) ssum@rose:~$ 형태로 바뀌면 성공.

7-3) Python Interpreter도 nmsl로 지정

VS Code 우하단 Python 버전 클릭 → nmsl 환경 선택
또는:
  1. Command Palette (⌘⇧P)
  1. Python: Select Interpreter
  1. Python 3.11.x ('nmsl') 선택

7-4) Jupyter 노트북 실행

# nmsl 환경을 Jupyter 커널로 등록 python -m ipykernel install --user --name nmsl --display-name "Python (nmsl)"
이제 Jupyter에서 Python (nmsl) 커널 선택 가능!

실전 팁

매번 conda activate nmsl 치기 귀찮다면?
~/.bashrc에 추가:
# 프로젝트 디렉토리 진입 시 자동 활성화 if [[ $PWD == */NMSL_TimeSeries_AI* ]] && [[ $CONDA_DEFAULT_ENV != "nmsl" ]]; then conda activate nmsl fi

실전 체크리스트 (문제 발생 지점 빠르게 특정)

문제가 생기면 다음 순서대로 체크하자.

A) VS Code가 rose 못 찾음

# 맥에서 ssh rose # 되냐? cat ~/.ssh/config # Host rose 있냐?

B) 서버에서 git commit이 안 됨

# 서버에서 git config --global user.name # 설정했냐? git config --global user.email # 설정했냐?

C) 서버에서 git clone/push가 안 됨

# 서버에서 ssh -T git@github.com # 성공하냐? cat ~/.ssh/id_ed25519.pub # 이 키를 GitHub에 등록했냐?

D) 실험이 안 돌아감 / 패키지 충돌

# 서버에서 conda info --envs # base가 아니라 nmsl 쓰고 있냐? conda list # 필요한 패키지가 설치되어 있냐? ls env.nmsl.yml # 재현 가능하게 남겼냐?

Conda를 사용하면 얻을 수 있는 이점

여기까지 따라왔다면 conda의 강력함을 체감했을 것이다. 하지만 conda의 진짜 장점은 더 있다.

1. 완벽한 격리(Isolation)

문제 상황:
  • 프로젝트 A: PyTorch 1.x 필요
  • 프로젝트 B: PyTorch 2.x 필요
  • 같은 서버에서 둘 다 돌려야 함
conda 없이:
pip install torch==1.13 # A 실행 # B 실행하려면... pip uninstall torch pip install torch==2.0 # 매번 재설치 😭
conda로:
conda create -n projectA python=3.9 pytorch=1.13 -c pytorch conda create -n projectB python=3.11 pytorch=2.0 -c pytorch # A 작업 conda activate projectA # B 작업 conda deactivate conda activate projectB
완벽히 독립적으로 관리!

2. 크로스 플랫폼 재현성

시나리오: 로컬 맥에서 실험 → 서버(Linux)에서 재현
conda 없이:
  • macOS용 패키지 vs Linux용 패키지 버전이 다를 수 있음
  • CUDA 버전 맞추기 지옥
conda로:
# 맥에서 conda env export --from-history > env.yml # 서버에서 conda env create -f env.yml
  • -from-history 덕분에 OS/아키텍처 무관하게 재현!

3. 파이썬 버전까지 통제

pip는 파이썬 버전 자체는 관리 못 한다. conda는 가능:
conda create -n py39 python=3.9 conda create -n py311 python=3.11
레거시 코드(Python 2.7)도:
conda create -n legacy python=2.7

4. 비파이썬 패키지까지 관리

conda는 C/C++ 라이브러리, 시스템 도구도 설치 가능:
conda install -c conda-forge ffmpeg # 동영상 처리 conda install -c conda-forge graphviz # 그래프 시각화 conda install -c conda-forge gcc # C 컴파일러
pip는 순수 파이썬 패키지만 가능한데, conda는 전체 실행 환경을 관리!

5. 속도 최적화 (conda-forge)

많은 패키지가 conda-forge 채널에서 미리 컴파일된 바이너리로 제공됨:
# pip: 소스 컴파일 → 10분 소요 pip install scipy # conda: 바이너리 다운로드 → 30초 conda install -c conda-forge scipy
특히 NumPy, SciPy, scikit-learn 같은 과학 컴퓨팅 라이브러리는 conda가 훨씬 빠름.

6. 롤백 가능

실수로 패키지를 잘못 업데이트했다면?
# 환경 히스토리 확인 conda list --revisions # 특정 revision으로 롤백 conda install --revision 2
타임머신처럼 환경을 이전 상태로 되돌릴 수 있다!

Conda의 주요 기능 총정리

환경 관리

# 환경 생성 conda create -n myenv python=3.11 # 환경 활성화/비활성화 conda activate myenv conda deactivate # 환경 목록 확인 conda info --envs conda env list # 환경 삭제 conda env remove -n myenv # 환경 복제 conda create -n myenv_copy --clone myenv

패키지 관리

# 패키지 설치 conda install numpy pandas conda install -c conda-forge scikit-learn # 특정 버전 설치 conda install numpy=1.23.0 # 패키지 업데이트 conda update numpy conda update --all # 패키지 삭제 conda remove numpy # 설치된 패키지 목록 conda list

환경 내보내기/불러오기

# 전체 환경 내보내기 (OS 종속적) conda env export > environment.yml # 명시적 패키지만 내보내기 (권장) conda env export --from-history > env.yml # 환경 불러오기 conda env create -f environment.yml

채널 관리

# 채널 추가 conda config --add channels conda-forge conda config --add channels pytorch # 채널 우선순위 확인 conda config --show channels # 특정 채널에서 설치 conda install -c nvidia cudatoolkit

캐시 정리

# 사용하지 않는 패키지 정리 conda clean --all # 특정 항목만 정리 conda clean --packages # 다운로드 캐시 conda clean --tarballs # 압축 파일

롤백 및 히스토리

# 환경 변경 히스토리 conda list --revisions # 특정 revision으로 복원 conda install --revision 2

정보 확인

# conda 정보 conda info # 환경 정보 conda info --envs # 패키지 검색 conda search numpy # 패키지 정보 conda info numpy

너한테 딱 맞춘 "권장 운영 방식" 요약

지금까지 배운 내용을 한눈에 정리해보자.

접속 (로컬 맥)

~/.ssh/configssh rose 별명 고정 ✅ VS Code Remote-SSH도 동일 config 사용

GitHub (서버)

✅ 서버별 SSH 키 생성 → GitHub 등록 (보안/관리 최적) ✅ git config --global로 커밋 메타데이터 설정

실험 (서버)

base 건드리지 말고 conda env로만 통제 ✅ env.nmsl.yml을 레포에 포함하여 재현성 확보

재현성

.gitignore로 데이터/캐시 제외 ✅ conda env export --from-history로 환경 저장 ✅ README에 환경 구축 방법 명시

보너스: 한 단계 더 나아가기

원한다면 다음 파일들로 워크플로우를 더 자동화할 수 있다.

Makefile (setup/run/clean 명령 한 방)

Makefile:
.PHONY: setup run clean setup: conda env create -f env.nmsl.yml -n nmsl conda run -n nmsl pip install -e . run: conda run -n nmsl python src/train.py clean: conda env remove -n nmsl find . -type d -name __pycache__ -exec rm -rf {} + find . -type f -name "*.pyc" -delete
사용:
make setup # 환경 구축 make run # 실험 실행 make clean # 정리

scripts/setup_env.sh (conda env 자동 구성)

scripts/setup_env.sh:
#!/bin/bash set -e ENV_NAME="nmsl" PYTHON_VERSION="3.11" echo "Creating conda environment: $ENV_NAME" conda create -n $ENV_NAME python=$PYTHON_VERSION -y echo "Installing packages..." conda install -n $ENV_NAME -c conda-forge numpy pandas scipy -y conda install -n $ENV_NAME -c pytorch pytorch torchvision -y echo "Installing additional packages via pip..." conda run -n $ENV_NAME pip install wandb transformers echo "Exporting environment..." conda env export -n $ENV_NAME --from-history > env.nmsl.yml echo "Setup complete! Activate with: conda activate $ENV_NAME"
실행:
chmod +x scripts/setup_env.sh ./scripts/setup_env.sh

README.md 템플릿 (서버 접속/환경 구축/실험 실행까지)

README.md:
# NMSL Time-Series AI ## 환경 구축 ### 1. 서버 접속 \\`\\`\\`bash ssh rose \\`\\`\\` ### 2. 레포 클론 \\`\\`\\`bash git clone git@github.com:ssum21/NMSL_TimeSeries_AI.git cd NMSL_TimeSeries_AI \\`\\`\\` ### 3. Conda 환경 생성 \\`\\`\\`bash conda env create -f env.nmsl.yml -n nmsl conda activate nmsl \\`\\`\\` ## 실험 실행 ### 학습 \\`\\`\\`bash python src/train.py --config configs/default.yaml \\`\\`\\` ### 평가 \\`\\`\\`bash python src/eval.py --checkpoint models/best.pth \\`\\`\\` ## 재현성 이 실험은 다음 환경에서 재현 가능합니다: - Python 3.11 - PyTorch 2.0 - CUDA 12.1 자세한 패키지 목록은 \\`env.nmsl.yml\\` 참고.

Conclusion: 배운 점과 다짐

처음 연구 서버를 세팅할 때는 정말 막막했다. SSH, Git, conda... 각각이 뭔지도 헷갈렸고, 에러 메시지를 봐도 어디서 막혔는지 알 수 없었다.
하지만 이제는 3층 구조를 명확히 구분할 수 있게 되었다:
1️⃣ 로컬 ↔ 서버 접속 (SSH): 맥의 ~/.ssh/config로 관리 2️⃣ 서버 ↔ GitHub 인증: 서버의 SSH 키를 GitHub에 등록 3️⃣ 서버 내부 실행 환경: conda env로 재현 가능한 환경 구축
특히 conda의 강력함을 제대로 알게 되었다:
  • 완벽한 환경 격리
  • 크로스 플랫폼 재현성
  • 파이썬 버전까지 통제
  • 롤백 가능한 안전성
앞으로는 새 프로젝트를 시작할 때마다:
  1. .gitignore 먼저 작성
  1. conda env 생성 및 env.yml 저장
  1. README에 재현 방법 명시
이 3가지를 습관화하려고 한다.
이 글이 나처럼 서버 세팅으로 고생하는 분들에게 도움이 되었으면 좋겠다. 삽질은 한 번이면 충분하니까. 😊
나도 이제부터라도 환경 관리에 더 신경 써야겠다!
감사합니다!

참고 자료