IT/작업기록

[작업 기록] NAS 원격개발 → 로컬개발 전환 기록

aram 2026. 8. 4. 09:21

1. 발단 — NAS 메모리 부족 반복 이슈

  • 지난 메모리 진단 글에서 확인했듯, VS Code Remote-SSH로 NAS에 직접 붙어서 개발하는 방식 자체가 호스트에 상시 1.9GB+를 물려두는 구조였다
  • 컨테이너별 메모리 제한과 watchdog으로 1차 대응은 했지만, 근본적으로는 "개발자가 NAS에 접속해 있는 동안 호스트 메모리를 계속 깔고 있는" 구조 자체를 바꿔야 한다는 결론

2. 결정 — 로컬 개발 + push 기반 배포로 전환

  • 로컬 PC에서 개발 → dev 서버로 push → 테스트 OK → prod로 push
  • VS Code Remote-SSH로 NAS에 들어가 편집하는 방식은 완전히 중단
  • SSH 자체(키, 서버, config)는 유지 — git push가 SSH 프로토콜을 그대로 사용하기 때문. VS Code의 "원격 접속 편의 기능"과 "git이 쓰는 SSH 프로토콜"은 별개라는 점이 핵심

3. NAS 홈 디렉터리(~) 정리 기준

지워도 안전 (캐시/이력성): .cache, .npm, .bash_history, .python_history, .viminfo, .wget-hsts, .claude.json.tmp.*, .claude.lock(빈 폴더 확인 후), .copilot, .dotnet, #recycle, .config/Code, .config/procps

지우면 안 됨 / 확인 후 판단:

  • .ssh/ — git push용 키, 원격 호스트 alias 설정 포함. 절대 삭제 금지
  • .gitconfig — NAS에서 여전히 git 명령 실행하므로 유지
  • .config/git — global gitignore 규칙 포함, 유지
  • .claude — Claude Code 세션 히스토리 + 메모리. 로컬로 백업 완료 확인 후에만 삭제
  • 홈 최상위 authorized_keys(.ssh/ 밖) — .ssh/authorized_keys와 내용 비교 후 판단, 확실치 않으면 보류
  • .local, Drive — 내용 직접 확인 후 판단 (스크립트/동기화 폴더일 수 있음)

4. Claude Code 세션 기록 로컬 이전

  • 저장 위치: ~/.claude/projects/<프로젝트경로를 하이픈으로 인코딩한 폴더명>/
  • 프로젝트 폴더 안의 .claude/(settings.local.json만 있음)와는 별개 — 세션 기록은 홈 디렉터리 안에 있음
  • 로컬 이전 시 폴더명은 로컬 프로젝트 절대경로 기준으로 다시 인코딩 필요 (경로가 다르면 폴더명도 다르게)

5. git push 기반 dev/prod 배포 설정

기존 구조: NAS 안에서 직접 편집 → prod bare repo(로컬 경로) push, dev는 별도 저장소 없이 편집 중인 워킹카피 자체.

로컬 전환 후 설정:

# NAS dev 서버 디렉터리에서 1회 실행 — 워킹카피에 직접 push해도 파일이 갱신되도록
cd /volume1/docker/django/<project>-dev/<project>
git config receive.denyCurrentBranch updateInstead

# 로컬 PC에서 remote 등록 (기존 로컬경로 remote를 SSH경로로 전환)
git remote add dev <nas-host>:/volume1/docker/django/<project>-dev/<project>
git remote set-url origin <nas-host>:/volume1/docker/git_repos/<project>-prod.git

실제 배포 흐름:

로컬 커밋 → git push dev master (dev 서버 즉시 반영, 테스트) → 이상 없으면 → git push origin master (prod)

새 bare 저장소를 따로 만들 필요 없이, 기존에 쓰던 "개발 후 괜찮으면 바로 prod로 복사"하던 흐름을 git push로 그대로 대체.

6. VS Code Remote-SSH 잔재 정리

  • File > Open Recent에 남아있는 원격 프로젝트 항목은 마우스 오버 시 나오는 X 아이콘으로 개별 삭제 (전체 삭제는 File: Clear Recently Opened, 다른 항목도 다 지워지므로 비추천)
  • SSH 연결 자체를 완전히 막고 싶다면 로컬 PC의 ~/.ssh/config에서 해당 Host 블록을 지우거나 주석 처리하면 Remote-SSH 확장의 SSH Targets 목록에서도 사라짐
  • 다만 이번 경우엔 Host 블록은 삭제하지 않고 유지 — git push 시 이 alias를 그대로 사용하기 때문

7. git 커밋 이메일 분리

  • GitHub 계정에서 "Keep my email addresses private" 활성화 → 숫자+아이디@users.noreply.github.com 형식의 noreply 이메일 발급됨. + 포함 전체 문자열을 그대로 사용
  • git config --global user.email "숫자+아이디@users.noreply.github.com" → GitHub에 올라가는 프로젝트들의 기본 이메일
  • 회사 서버(NAS)에만 올라가는 프로젝트는 --global 없이 로컬 설정으로 회사 이메일 사용:
    git config user.email "회사이메일@company.com"
    
    로컬 설정이 global보다 우선 적용되므로, 프로젝트별로 다른 이메일 사용 가능

 


기껏 private로 설정해두고는 정작 로컬 프로젝트에선 회사 이메일을 그대로 쓰고 있었다는 걸 뒤늦게 깨달음. (물론 회사 서버에만 올라가는 프로젝트라 문제는 없었지만...)