AI E-Commerce Automation Master Guide
이커머스 자동화 완벽 가이드: 파이썬 개발 환경 구축부터 스마트스토어·쿠팡 API 자동 등록까지
왕초보를 위한 VS Code 세팅, API 키 발급, 파이썬 통합 소스코드, 실무 주의사항 총정리
이커머스 자동화 파이프라인 구축을 희망하지만 코딩 경험이 없어 시작을 주저하고 계신가요? 본 가이드에서는 파이썬(Python)과 VS Code 설치부터 시작하여, 이미지 가공·상세페이지 생성·마진 산출 파이프라인을 구축하고, 최종적으로 네이버 스마트스토어 및 쿠팡 API를 통해 상품을 자동 등록하는 전체 프로세스를 초보자 눈높이에 맞춰 완벽하게 정리해 드립니다.
[Part 1] 왕초보를 위한 파이썬 개발 환경 구축 5단계
프로그램이 동작할 수 있는 환경을 내 컴퓨터에 세팅하는 기초 단계입니다.
-
1단계: 파이썬(Python) 엔진 설치
공식 홈페이지(python.org/downloads) 접속 후 설치 파일을 실행합니다. [★필수] 설치 창 하단의Add Python 3.x to PATH체크박스를 반드시 선택하고Install Now를 진행합니다. -
2단계: VS Code 에디터 설치 및 한글화
공식 사이트(code.visualstudio.com)에서 VS Code를 설치합니다. 실행 후 좌측 사각형 4개 아이콘(Extensions)에서Korean을 검색하여 한글 언어 팩을 적용합니다. -
3단계: 작업 폴더 및 HTML 템플릿 파일 생성
바탕화면에my_automation폴더를 만들고 VS Code로 엽니다. 폴더 안에template.html파일을 생성한 뒤 동적 상세페이지 소스코드를 입력해 둡니다. -
4단계: 파이썬 소스코드 작성 및 라이브러리 설치
main.py및publisher.py파일을 생성합니다. VS Code 상단 [터미널] ➡️ [새 터미널]에서pip install requests Pillow Jinja2 pandas를 입력하여 필수 도구를 다운로드합니다. -
5단계: 첫 코드 실행 및 결과 확인
터미널에python main.py명령어를 입력해 마진 산출 계산식 및 HTML 자동 생성 파일(output.html)이 정상 작동하는지 확인합니다.
📄 Jinja2 동적 HTML 템플릿 (template.html)
<div style="max-width: 800px; margin: 0 auto; text-align: center;">
<h1 style="font-size: 28px; color: #333;">{{ seo_title }}</h1>
<div style="background-color: #f8f9fa; padding: 20px;">
{% for point in summary_list %}
<p style="font-size: 16px; color: #555;">✔ {{ point }}</p>
{% endfor %}
</div>
<div class="detail-images">
{% for img_url in detail_images %}
<img src="{{ img_url }}" style="width: 100%; display: block;" />
{% endfor %}
</div>
</div>
[Part 2] 오픈마켓 API 키 발급 및 인증 방식
API 키는 사람이 ID/PW로 로그인하는 대신, 파이썬 프로그램이 서버에 접속할 수 있도록 허가해 주는 암호화 열쇠입니다.
| 마켓명 | 발급 경로 및 절차 | 확인 필수 데이터 |
|---|---|---|
| 네이버 스마트스토어 | 네이버 커머스 API 센터 접속 ➡️ 애플리케이션 등록 ➡️ API 권한(상품, 배송, 이미지) 체크 | • Client ID • Client Secret |
| 쿠팡 Wing | 쿠팡 Wing 접속 ➡️ [판매자정보] ➡️ [추가판매자정보] ➡️ Open API 키 발급 클릭 | • Access Key • Secret Key • Vendor ID(업체코드) |
[Part 3] 이커머스 API 자동 등록 및 CSV 변환 파이썬 소스코드
스마트스토어, 쿠팡 API 직접 전송 모듈과 API 코딩이 까다로운 경우를 위한 플레이오토/샵마인용 CSV 자동 변환기가 모두 포함된 통합 코드입니다.
📌 publisher.py 통합 소스코드
import os
import json
import time
import hmac
import hashlib
import requests
import pandas as pd
from datetime import datetime
# 1. 네이버 스마트스토어 API 연동 클래스
class NaverCommerceAPI:
def __init__(self, client_id, client_secret):
self.client_id = client_id
self.client_secret = client_secret
self.access_token = None
def get_access_token(self):
url = "https://api.commerce.naver.com/external/v1/oauth2/token"
data = {
"grant_type": "client_credentials",
"client_id": self.client_id,
"client_secret": self.client_secret,
"type": "SELF"
}
response = requests.post(url, data=data)
if response.status_code == 200:
self.access_token = response.json().get("access_token")
return self.access_token
else:
raise Exception(f"네이버 토큰 발급 실패: {response.text}")
def create_product(self, product_data):
if not self.access_token:
self.get_access_token()
url = "https://api.commerce.naver.com/external/v2/products"
headers = {
"Authorization": f"Bearer {self.access_token}",
"Content-Type": "application/json"
}
payload = {
"originProduct": {
"statusType": "SALE",
"name": product_data["title"],
"leafCategoryId": product_data["category_id"],
"detailContent": product_data["detail_html"],
"images": {"representativeImage": {"url": product_data["main_image_url"]}},
"salePrice": product_data["selling_price"],
"stockQuantity": 999,
"deliveryInfo": {
"deliveryType": "DELIVERY",
"deliveryAttributeType": "NORMAL",
"deliveryCompany": "CJGLS",
"deliveryFee": {"deliveryFeeType": "PAID", "baseFee": 3000}
}
}
}
return requests.post(url, headers=headers, json=payload).json()
# 2. 쿠팡 Wing API 연동 클래스
class CoupangWingAPI:
def __init__(self, access_key, secret_key, vendor_id):
self.access_key = access_key
self.secret_key = secret_key
self.vendor_id = vendor_id
self.domain = "https://api-gateway.coupang.com"
def _generate_signature(self, method, path):
datetime_str = datetime.utcnow().strftime('%y%m%dT%H%M%SZ')
message = f"{datetime_str}{method}{path}"
signature = hmac.new(
self.secret_key.encode('utf-8'),
message.encode('utf-8'),
hashlib.sha256
).hexdigest()
return f"CEA algorithm=HmacSHA256, access-key={self.access_key}, signed-date={datetime_str}, signature={signature}"
def create_product(self, product_data):
path = "/v2/providers/seller_api/apis/api/v1/marketplace/seller-products"
url = self.domain + path
headers = {
"Content-Type": "application/json;charset=UTF-8",
"Authorization": self._generate_signature("POST", path)
}
payload = {
"displayCategoryCode": int(product_data["coupang_category_id"]),
"sellerProductName": product_data["title"],
"vendorId": self.vendor_id,
"saleStartedAt": "2026-01-01T00:00:00",
"saleEndedAt": "2099-12-31T23:59:59",
"displayObjectName": product_data["title"],
"brand": "자체제작",
"generalVendorDeliveryHelpConnector": {"deliveryCompanyCode": "CJGLS", "deliveryChargeType": "FREE", "deliveryCharge": 0},
"items": [{
"itemName": product_data["title"],
"originalPrice": product_data["selling_price"],
"salePrice": product_data["selling_price"],
"maximumBuyCount": 999,
"maximumBuyForPerson": 0,
"outboundShippingTimeDay": 1,
"maximumBuyForPersonPeriod": 1,
"unitCount": 0,
"adultOnly": "EVERYONE",
"taxType": "TAX",
"parallelImported": "NOT_PARALLEL_IMPORTED",
"images": [{"imageOrder": 0, "imageType": "REPRESENTATIVE", "cdnPath": product_data["main_image_url"]}],
"contents": [{"contentsType": "HTML", "contentDetails": [{"content": product_data["detail_html"]}]}]
}]
}
return requests.post(url, headers=headers, json=payload).json()
# 3. 노코드 대체안: 대량등록 솔루션용 CSV 자동 변환기
def export_to_playauto_csv(product_list, output_filename="playauto_upload.csv"):
csv_data = []
for item in product_list:
csv_data.append({
"상품명": item["title"],
"판매가": item["selling_price"],
"카테고리코드": item["category_id"],
"대표이미지URL": item["main_image_url"],
"상세설명HTML": item["detail_html"],
"재고수량": 999,
"배송비": 3000
})
df = pd.DataFrame(csv_data)
df.to_csv(output_filename, index=False, encoding="utf-8-sig")
print(f"✅ 대량등록용 CSV 파일 생성 완료: {output_filename}")
# 4. 실행 메인 루틴
if __name__ == "__main__":
test_products = [{
"product_id": "PROD_001",
"title": "[SEO최적화] 프리미엄 방수 백팩",
"category_id": "50000150",
"coupang_category_id": "78123",
"main_image_url": "https://your-domain.com/images/main_1000.jpg",
"detail_html": "프리미엄 방수 백팩
",
"selling_price": 18900
}]
# CSV 파일 자동 생성 실행 (API 키 없이 작동)
export_to_playauto_csv(test_products)
# API 키 발급 후 아래 주석 제거하여 사용
# naver = NaverCommerceAPI(client_id="YOUR_ID", client_secret="YOUR_SECRET")
# print("네이버 등록:", naver.create_product(test_products[0]))
[Part 4] 실무 운영 시 반드시 체크해야 할 3가지 노하우
1. API 호출 제한(Rate Limit) 방지
마켓 서버에 짧은 시간 동안 너무 많은 요청을 보내면 IP 차단을 당합니다. 코드 내부 반복문 안에 time.sleep(1) 명령어를 추가하여 1초 간격을 두고 전송하는 안정화 작업이 필수적입니다.
2. 외부 웹 이미지 URL 규격 사용
로컬 컴퓨터 경로(예: C:\image.jpg)는 오픈마켓 서버가 읽을 수 없습니다. 이미지는 반드시 웹상에 공개된 이미지 호스팅 서버나 CDN 주소(https://...) 형태로 전달해야 합니다.
3. 예외 처리 및 에러 로그 기록 (Error Handling)
금지 키워드 포함이나 카테고리 매핑 오류 등으로 등록이 실패하더라도 프로그램 전체가 중단되지 않도록 try-except 구문을 적용하고, 실패 원인을 DB나 CSV 일기장에 남겨두어야 합니다.
API 연결이 처음에는 어렵게 느껴진다면 먼저 CSV 파일 자동 변환 모듈을 통해 플레이오토나 샵마인 같은 대량등록 프로그램에 올려보세요! 단계별로 시스템을 확장해 나가면 무인 자동화 쇼핑몰 운영이 현실이 됩니다.

댓글
댓글 쓰기