3.1 KiB
3.1 KiB
MNG 서버 ↔ 로컬 데이터 동기화 가이드
적용 범위: MNG 프로젝트(
/home/aweso/sam/mng)에만 해당 API 프로젝트는 별도 환경이므로 이 가이드를 적용하지 않습니다.
핵심 원리
서버 ↔ 로컬 데이터 이동은 3단계:
1. 원본에서 데이터 추출 (DB → JSON, 파일 → base64)
2. 전송 (SSH/curl 경유)
3. 대상에 저장 (JSON → DB, base64 → 파일)
왜 이 방식인가?
| 제약 사항 | 우회 방법 |
|---|---|
서버 storage는 www-data 소유 → SSH(pro)로 직접 접근 불가 |
public/에 임시 PHP 스크립트 → curl로 실행 (www-data 권한) |
| 로컬 앱은 Docker 컨테이너 안에 있음 | docker exec sam-mng-1 php artisan tinker로 DB 조작 |
| SCP로 storage 디렉토리에 직접 쓰기 불가 | base64 인코딩 → PHP Storage::put()으로 저장 |
MNG 환경 정보
| 항목 | 값 |
|---|---|
| 서버 SSH | pro@114.203.209.83 |
| 서버 MNG 경로 | /home/webservice/mng |
| 서버 웹 도메인 | https://mng.codebridge-x.com |
| 서버 PHP 실행 | nginx + php8.4-fpm (www-data) |
| 로컬 Docker 컨테이너 | sam-mng-1 |
| 로컬 Storage 경로 | /var/www/mng/storage/app/private/ |
| 서버 Storage 경로 | /home/webservice/mng/storage/app/private/ |
프롬프트 템플릿
서버 → 로컬 (서버 데이터를 로컬로 가져오기)
서버(mng.codebridge-x.com)의 [테이블명/기능명]에서 [조건]에 해당하는 데이터를
로컬 Docker(sam-mng-1)로 복사해줘.
절차:
1. 서버에서 tinker로 DB 데이터 추출 (JSON)
2. 파일이 있으면 public/에 임시 PHP로 base64 export → curl로 다운로드
3. 로컬 Docker에 파일 복사 (docker cp) 후 tinker로 DB INSERT
4. 임시 파일 모두 삭제
로컬 → 서버 (로컬 데이터를 서버로 올리기)
로컬 Docker(sam-mng-1)의 [테이블명/기능명]에서 [조건]에 해당하는 데이터를
서버(mng.codebridge-x.com)로 복사해줘.
절차:
1. 로컬 Docker에서 tinker로 DB 데이터 추출 (JSON)
2. 파일이 있으면 docker cp로 호스트로 꺼내기 → base64로 서버 /tmp에 전송
3. 서버 public/에 임시 PHP 작성 → curl로 실행 (base64 디코딩 + Storage::put + DB INSERT)
4. 임시 파일 모두 삭제
사용 예시
# 템플릿 동기화 (DB + PDF 파일)
서버의 esign_field_templates에서 name='영업파트너 계약서(단체용)'인
템플릿과 관련 items, PDF 파일을 로컬로 복사해줘.
# 여러 건 동기화
로컬의 esign_field_templates에서 ID 4,5,6번 템플릿 3개와
관련 items, PDF 파일을 서버로 복사해줘.
# DB만 동기화 (파일 없음)
서버의 tenant_prospects 테이블 전체 데이터를 로컬 DB로 동기화해줘.
주의사항
- 작업 후
public/의 임시 PHP 스크립트는 반드시 삭제 (보안) - ID는 서버/로컬이 다를 수 있으므로 이름/조건 기반으로 매칭
- 관계 테이블(FK)이 있으면 부모 먼저 생성 후 자식 INSERT
- 대량 데이터는 트랜잭션(
DB::beginTransaction)으로 원자성 보장