2025-12-07_동적항모_통합배포_성공보고서
Root
동적 항모와 전투기 데브옵스 (DevOps) 성공 보고서
작업 일자: 2025-12-07 작업 목표: Next.js (동적 항모)와 정적 앱 (전투기: AgriBot, Skin Clinic)의 통합 및 안정적 배포
1. 달성 내용
- 어그리봇(AgriBot) 안정판 배포: 로컬에서 개발된 최신 버전을 서버의
/robot-control및/agribot경로에 성공적으로 탑재했습니다. - Next.js 라우팅 충돌 해결:
Link컴포넌트가 정적 파일 경로를 인식하지 못해 발생한 404 문제를<a>태그로 교체하여 해결했습니다. - 좀비 프로세스 퇴치: 포트 3000번을 점유하던 유령 프로세스를
fuser -k로 제거하여 서버를 정상화했습니다. - 배포 자동화:
배포준비.bat스크립트를 통해 실수 없이 깔끔한 배포 패키지를 생성하도록 만들었습니다.
2. 핵심 전략: 항모와 전투기
이 프로젝트는 거대한 동적 항모(Next.js) 위에 **날렵한 전투기(Static Apps)**를 싣고 다니는 구조입니다.
⛴️ 동적 항모 (Next.js Dashboard)
- 역할: 전체 사이트의 뼈대(Header, Sidebar)와 인증, 서버 API(Gemini 연결)를 담당합니다.
- 위치:
D:\1v\Cursor\Projects\dashboard_ui - 중요 파일:
src/components/Shell.tsx(네비게이션),next.config.js
✈️ 전투기 (AgriBot, Skin Clinic)
- 역할: 실제 사용자에게 보여지는 핵심 기능(음성 제어, 예약 등)입니다.
- 개발 장소:
D:\1v\Antigravity(여기가 바로 **"정비소"**입니다) - 탑재 장소:
D:\1v\Cursor\Projects\dashboard_ui\public(여기가 **"갑판"**입니다)
3. 배포 워크플로우 (요약)
1단계: 정비 (개발)
피부과_정비.bat또는어그리봇_정비.bat를 켜서 뚝딱뚝딱 개발합니다. (Hot Reload 지원)
2단계: 완성품 탑재 (빌드)
- 개발이 끝나면
npm run build로 완성품(dist)을 만듭니다. - 완성품을 항모의 갑판(
public/폴더)으로 복사합니다.
3단계: 출격 (배포)
배포준비실행:deploy_ready폴더 생성.- 서버 업로드: 서버의
Dashboard_UI폴더 덮어쓰기. - 서버 재기동:
npm install npm run build pm2 delete all (혹시 모를 충돌 방지) pm2 start npm --name "dashboard_ui" -- start pm2 save
4. 트러블슈팅 매뉴얼
Q. 서버에 올렸는데 옛날 화면이 나와요!
A. 좀비 프로세스 때문입니다.
sudo fuser -k 3000/tcp # 3000번 포트 강제 해방
pm2 restart dashboard_ui
Q. 메뉴를 눌렀는데 404가 떠요!
A. Next.js가 정적 파일을 무시해서 그렇습니다.
Shell.tsx에서 해당 메뉴의Link태그를<a>태그로 바꿔주세요. (새로고침이 발생하더라도 안전합니다)
Q. 빌드 에러 (EACCES, errno -4094)
A. 파일이 잠겨있거나 권한 문제입니다.
- 로컬:
동적홈_복구.bat실행 (캐시 청소) - 서버:
sudo chown -R ubuntu:ubuntu .로 권한 재설정
보고자: Antigravity (Google DeepMind Agent)