제품 JSON 데이터를 가공하여 필터링 → 변환 → 네이버 쇼핑 API 이용해 TSV 포맷으로 저장 → S3 업로드까지 자동화하는 파이프라인을 구축했습니다.
파이썬으로 작성하였고, Cloud Functions 에 배포하여 매일 S3 Bucket에 업로드하는 걸 목표로 진행하였습니다.
ikea_raw.csv
파일을 S3에 업로드했더니 브라우저에서는 잘 열리지만,
Excel에서 열었을 때 인코딩 깨짐 현상이 발생하고 경고 문구가 뜸.
csv
저장 시 UTF-8
인코딩은 Excel이 잘 인식하지 못함utf-8-sig
로 인코딩해 저장해서 해결했지만,with open("raw.tsv", "w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=..., delimiter="\t")
네이버 카테고리 매핑 시 일부 제품은 카테고리 경로가 매핑되지 않아
기본 카테고리 ID로 처리되는 비율이 많았음
주방/조리도구>후라이팬/웍
vs 주방/조리도구>후라이팬/웍
등normalize_category_string()
함수를 별도로 구현s = s.replace("/", "/").replace(">", ">").replace(":", ":").replace("\u3000", "")
s = s.replace("\u00a0", "").replace(" ", "").lower()
로컬에서는 정상적으로 업로드되던 boto3
코드가 Cloud Functions에선 Access Denied
오류
AWS_ACCESS_KEY
, AWS_SECRET_KEY
)이 누락됨--set-env-vars
플래그로 환경변수를 잘못 전달함.env
파일에 키를 저장하고, dotenv
로 로컬과 공통 처리gcloud functions deploy export-ikea-products \
--runtime python310 \
--trigger-http \
--entry-point export_ikea_products \
--source . \
--allow-unauthenticated \
--set-env-vars AWS_ACCESS_KEY=xxx,AWS_SECRET_KEY=xxx,AWS_REGION=ap-northeast-2
S3에는 최신 TSV가 올라갔는데,
CloudFront URL에서는 여전히 이전 파일이 보임
boto3
를 사용해 CloudFront 캐시 무효화 자동화 함수 추가client.create_invalidation(
DistributionId=DISTRIBUTION_ID,
InvalidationBatch={
"Paths": {"Quantity": 1, "Items": ["/ikea_naver_ep.tsv"]},
"CallerReference": str(time.time())
}
)