좋아, 그럼 “카페24 기본 FTP(d.cafe24.com) + Admin API + 구글만으로 자동화” 기준으로
바로 v0.1.0 실전 코드/구조까지 한 번에 올려줄게.
(너는 Sheets만 채우고, Drive에 원본 넣으면, 배치가 자동으로 올리는 그림)
아래는 바로 Cloud Run에 올려서 쓰는 형태로 짰어.
v0.1.0 전체 구조(파일 트리)
0) 사전 준비(딱 1번만)
A. 카페24 개발자센터에서 앱 생성 & OAuth
-
Admin API는 OAuth2 인증 필수. Cafe24 Developers+1
-
access token 2시간, refresh token 14일 유효. Cafe24 Developers+1
처음 1번만 사람이 하는 일
-
카페24 개발자센터 → App 생성(Web)
-
Redirect URI 지정(예:
https://YOUR_RUN_URL/oauth/callback) -
권한(scope)에
mall.read_product,mall.write_product등 상품 관련 scope 포함 -
브라우저로 인증 → authorization code 발급
-
/oauth/callback이 code 받아서 토큰 발급 & 저장
이 이후부터는 refresh token으로 자동 갱신되니까
사람이 다시 할 일 거의 없음(14일 안에서 계속 갱신되도록 배치가 돌기 때문).
B. 카페24 기본 FTP 계정 준비
-
관리자 → 디자인 → 웹FTP/디자인FTP에서 계정 확인
-
이미지 업로드 URL 규칙:
/web/upload/...→https://{mallid}.cafe24.com/web/upload/...카페24 고객센터+1
C. 구글 쪽
-
Sheets 1개(상품 마스터)
-
GCP 프로젝트
-
Cloud Run + Cloud Scheduler
-
Secret Manager(토큰/FTP 비번 저장)
1) Google Sheets 컬럼(최소 MVP)
| 컬럼명 | 설명 |
|---|---|
| product_code | 내부 상품코드(폴더/파일 규칙의 기준) |
| product_name | 상품명 |
| category_no | 카테고리 번호 |
| price | 판매가 |
| supply_price | 원가(선택) |
| stock | 재고(선택) |
| main_image_drive_path | 드라이브 파일 경로(또는 파일ID) |
| add_images_drive_paths | 추가이미지 경로들(쉼표 구분) |
| detail_template_id | 상세 템플릿 ID |
| detail_extra_json | 상세에 넣을 추가데이터(JSON 문자열) |
| status | draft / uploaded / failed |
| cafe24_product_no | 업로드 후 자동 기입 |
| last_error | 실패 사유 |
2) 코드
app/config.py
app/cafe24_client.py
app/ftp_uploader.py
app/sheets_client.py
app/detail_builder.py
app/main.py
app/utils.py
requirements.txt
Dockerfile
3) Cloud Scheduler로 배치 돌리기
-
매일 밤 11시 같은 시간에
POST /run-batch호출 -
limit으로 한 번에 50개씩 올리고, 더 많으면 스케줄러 2~3번 연속 호출
4) 지금 버전에서 너가 당장 할 일
-
Sheets 컬럼 맞춰서 상품 데이터 채우기
-
Drive 파일을 FILE_ID로 넣기(경로 대신 ID)
-
GCP 서비스계정 JSON을 Secret로 넣고
/secrets/service-account.json마운트 -
Cloud Run 배포
-
/oauth/start한 번 실행해서 토큰 저장 -
/run-batch호출 → 상품 자동 등록 시작
다음 단계(v0.2.0에서 바로 할 개선)
-
Drive “경로”를 넣어도 찾아 다운로드하도록 개선
-
이미지 리사이즈/워터마크/파일명 규칙 자동화
-
옵션/세트/중량 JSON 자동 변환 로직
-
실패 재처리 버튼(Apps Script UI)
원하면 네 실제 Sheets 샘플(컬럼/옵션 방식) 기준으로
payload 구성(옵션/세트/배송비/과세/원산지)을 v0.2.0에 맞춰 정교하게 바꿔줄게.
지금 쓰는 상품시트 구조만 한 번 캡쳐/텍스트로 던져줘.