From 69d4dd340ff19adedeaac291df7a563fe3271c49 Mon Sep 17 00:00:00 2001 From: lee-hyeon-cheol Date: Tue, 22 Sep 2026 10:14:57 +0900 Subject: [PATCH] =?UTF-8?q?docs(tech):=20=EA=B3=A0=EA=B0=9D=EC=82=AC=20?= =?UTF-8?q?=EB=8B=A8=EC=9D=BC=20repo=20=EA=B5=AC=EC=A1=B0(abap-specgen/=20?= =?UTF-8?q?+=20code-assistant/)=20=C2=B7=20VM=20=EB=B0=B0=ED=8F=AC=20?= =?UTF-8?q?=EB=A3=A8=ED=8B=B4=20=C2=B7=20=EB=B0=98=EC=9E=85=20=EC=A0=88?= =?UTF-8?q?=EC=B0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- docs/tech/customer-repo-layout.md | 62 +++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 docs/tech/customer-repo-layout.md diff --git a/docs/tech/customer-repo-layout.md b/docs/tech/customer-repo-layout.md new file mode 100644 index 0000000..3cb86a3 --- /dev/null +++ b/docs/tech/customer-repo-layout.md @@ -0,0 +1,62 @@ +# 고객사 repo 구조 · 배포 루틴 (2026-09-22 정리) + +고객사(GHE, SAML)는 repo 를 **하나만** 줌. 우리 팀 프로젝트 둘(ABAP_OPENCODE, CODE_ASSISTANT)을 그 안에 폴더로 나눠 넣음. +로컬 개발 repo(sqnotes)는 그대로 각각 씀 — 고객사 repo 는 "배포용 사본". + +## 폴더 + +``` +/www/abap-ito/ ← -12·-13 VM 둘 다 여기로 clone (https, 계정+PAT 저장됨) + README.md + abap-specgen/ ← ABAP_OPENCODE 전부 (git mv 로 옮겨 히스토리 유지) + .gitignore ← 원래 루트 것이 그대로 따라옴. 경로 패턴은 이 폴더 기준 + web/deploy/bare/.env ← -13 설정 (bare 모드). git 밖 + web/deploy/bare/run.sh ← -13 기동/중지/상태. "자기 위치 3단계 위" = abap-specgen/ 이 ROOT + bin/ logs/ run/ workspace/ web/BE/code/.venv … ← 런타임(git 밖). ROOT 밑에 있어야 run.sh 가 찾음 + code-assistant/ ← CODE_ASSISTANT (zip 반입 → 우리 로컬 히스토리는 없음) + .gitignore + 5_django_backend/.env ← -12 설정. git 밖 + 5_django_backend/deploy.sh ← -12 배포 한 방 + 5_django_backend/.venv, opencode/wiki, opencode/.opencode/node_modules ← git 밖 +``` + +- `.env` 는 폴더마다 따로. 둘 다 gitignore. **커밋 전 `git status --short | grep '\.env$'` 가 비어야 함.** +- `-12`(code-assistant) 와 `-13`(abap-specgen) 은 서로 통신 안 함. 각자 GHE 만 봄. + +## 배포 루틴 + +| VM | 명령 | +|---|---| +| -12 (code-assistant, 포트 8914→8080) | `cd /www/abap-ito && git pull && cd code-assistant/5_django_backend && bash deploy.sh` | +| -13 (abap-specgen, 포트 8918) | `cd /www/abap-ito && git pull && bash abap-specgen/web/deploy/bare/run.sh restart` | + +-13 에서 `git pull` 이 "local changes would be overwritten" 로 막히면 서버에서 직접 고친 파일이 있는 것: +`git diff > /tmp/p.patch && git checkout -- . && git pull && git apply /tmp/p.patch`. + +## 로컬 → 고객사 repo 로 코드 넣는 법 (code-assistant) + +고객사 PC 는 우리 로컬 repo 에 못 붙음. 그래서 tracked 파일만 zip 으로 뽑아 덮어씀: + +```bash +# 이 PC (CODE_ASSISTANT 루트) +git archive -o ~/Desktop/code-assistant_repo.zip --prefix=code-assistant/ HEAD +cp ~/Desktop/code-assistant_repo.zip ~/Desktop/code-assistant_repo.txt # 메일이 .zip 막음 → .txt 로 +``` +```powershell +# 고객사 PC, repo 루트 (PowerShell — Git Bash 없음) +Rename-Item code-assistant_repo.txt code-assistant_repo.zip +Remove-Item -Recurse -Force code-assistant; Expand-Archive code-assistant_repo.zip -DestinationPath . -Force; Remove-Item code-assistant_repo.zip +git add -A; git status --short | Where-Object { $_ -match '\.env$' } # 비어야 함 +git commit -m "code-assistant: <뭐 바꿨나>"; git push +``` +그 다음 -12 배포 루틴. 앱(msi)은 별개 — `4_rust_tauri` 빌드 → msi 를 1.2MB `.txt` 조각 4개로 → `copy /b` 로 합침. + +## 2026-09-22 옮길 때 겪은 것 + +- Windows 에서 `git mv cline …` 이 "rename failed" 반복 → 폴더 잠금(탐색기/VS Code/백신). 재부팅 후 `.git/index.lock` 지우고 재시도. +- 한글 파일명 때문에 `git ls-tree` 출력이 `"\355…"` 로 나옴 → `git -c core.quotepath=false ls-tree`, PowerShell 은 `Test-Path -LiteralPath`. +- `git mv` 는 tracked 만 옮김. untracked(`.env`, venv, node_modules, logs)는 옛 자리에 남음 → 손으로 `cp -a` / `mv`. +- venv 스크립트(`.venv/bin/uvicorn` 등) shebang 에 옛 절대경로 박혀 있음 → `grep -rl 옛경로 .venv/bin | xargs sed -i 's#옛#새#g'`. +- 옛 프로세스가 포트(8080/8888/4096) 잡고 있어서 새 run.sh 가 "죽음" → `fuser -k 포트/tcp` 후 재기동. +- 고객사 메일이 `.zip` 첨부 자체를 막음 → 확장자만 `.txt` 로 바꾸면 통과(MD5 로 확인). +- GHE 가 SAML 이라 https clone 은 비밀번호 대신 PAT(`ghp_…`, Configure SSO → Authorize 필수). username 은 `~/.git-credentials` 에서 확인.