쿠팡상품 자동 노출 완벽 적용 방법 목록(카테고리) 페이지용

쿠팡상품 자동 노출 완벽 적용 방법 목록(카테고리) 페이지용

쿠팡상품 자동 노출을 내 블로그에 직접 구현하고 싶다면, 구글 앱스 스크립트(GAS)를 활용하는 것이 가장 간편하고 안전한 선택입니다. 블로그 목록 페이지에 상품을 보여주는 방법부터 쿠팡 API 연동까지 초보자도 이해하기 쉽게 풀어서 정리해 드립니다.

쿠팡상품 자동 노출 기능을 블로그에 적용하면 일일이 링크를 걸지 않아도 수익을 낼 수 있고, 방문객에게 유용한 쇼핑 정보를 제공할 수 있습니다.

하지만 단순히 홍보용 자바스크립트 코드를 본문에 붙여넣는 방식은 관리가 어렵고 보안상 위험할 수 있습니다.
왜 구글 앱스 스크립트(GAS)를 사용해야 할까요?

이 글에서는 내 블로그 카테고리나 목록 페이지에 맞춰 상품을 보여주는 블로그 자동화 프로그램의 기초가 되는 GAS 활용법을 알려드립니다. 어려운 전문 용어 대신 일상적인 설명으로 준비했으니 천천히 따라와 보세요.

구글 앱스 스크립트(GAS)는 복잡한 설치 없이 브라우저에서 바로 코드를 짜는 도구입니다. “내 블로그에 직접 코드를 넣으면 되는데 왜 굳이 구글 서버를 거쳐야 할까?”라는 궁금증이 생길 수 있습니다.

하지만 GAS는 단순한 코드 실행기가 아닙니다. 서버처럼 작동하는 도구이기 때문에, 내 블로그가 직접 하기 힘든 까다로운 작업들을 구글 서버가 대신 처리해서 안전하게 전달해 줍니다.

구글 앱스 스크립트를 활용하는 이유

구글 앱스 스크립트를 활용한 쿠팡 파트너스 API 자동화 서버리스 연동 개념

1. 별도의 서버 비용 없이 API처럼 활용 가능

  • 일반 웹사이트는 데이터를 불러오기 위해 외부 서버가 필요하지만, GAS는 자바스크립트 함수를 나만의 전용 주소(URL)로 만들어 제공합니다.
  • 예: https://script.google.com/macros/s/앱ID/exec?keyword=검색어

2. 중요한 정보(API 비밀 키 등)를 안전하게 보호

  • HTML에 직접 코드를 넣으면 누구나 내 소스 코드를 볼 수 있지만, GAS는 서버에서 실행되므로 키값이 외부에 노출되지 않습니다.
  • 예: 쿠팡 파트너스 API 키를 서버 내부에 숨기고 안전하게 중계 가능

3. 구글 서비스(엑셀 등)와 자연스러운 연동

  • GAS는 구글 스프레드시트, 지메일 등과 쉽게 연결됩니다.
  • 예: 엑셀 시트에 저장된 상품 데이터를 블로그 화면에 맞게 가공해서 보여주기

4. 운영 비용이 들지 않는 무료 서비스

  • 별도의 호스팅 없이 구글 클라우드에서 실행되므로 비용 부담이 없습니다.
  • 트래픽이 아주 많지 않은 개인 블로그라면 무료로 충분히 사용할 수 있습니다.

구글 앱스 스크립트는 단순한 도구가 아니라, 서버 없이도 상품 정보를 가져와 내 입맛에 맞게 보여주는 강력한 조력자입니다.

특히 쿠팡 파트너스 수익 자동화나 엑셀 데이터를 블로그에 불러올 때 가장 합리적인 선택이 됩니다.

상품을 자동으로 보여주고 검색 키워드에 맞는 물건을 추천해 주는 기능을 구현할 때 유용하게 활용할 수 있습니다.

이 기능을 제대로 쓰려면 구글 클라우드 환경이 필요한데, 구글 앱스 스크립트 사용법에 대한 자세한 기초 단계는 이 안내 글(쿠팡 파트너스 상품 자동 등록으로 블로그 수익화하기)을 참고하세요.

설정을 마치셨다면 아래의 코드를 적용하면 됩니다. 본인의 정보에 맞게 몇 가지만 수정한 후 전체 코드를 복사해서 붙여넣으시면 끝납니다.

쿠팡 상품 자동화 적용 시 수정할 부분

// ==== 설정값 (본인의 정보로 변경) ====
// 쿠팡 API Access Key 입력
const COUPANG_ACCESS_KEY = "본인의 액세스 키";
// 쿠팡 API Secret Key 입력
const COUPANG_SECRET_KEY = "본인의 시크릿 키";
// 쿠팡 파트너스 ID (예: AF1234567)
const COUPANG_AFFILIATE_ID = "본인의 ID";

GAS 전용 서버 사이드 전체 코드

// ==== 설정값 (본인의 정보로 변경) ====
const COUPANG_ACCESS_KEY = "ACCESS_KEY_입력"; 
const COUPANG_SECRET_KEY = "SECRET_KEY_입력"; 
const COUPANG_AFFILIATE_ID = "AF1234567"; 

const COUPANG_API_BASE_URL = "https://api-gateway.coupang.com";
const PRODUCT_SEARCH_API_PATH = "/v2/providers/affiliate_open_api/apis/openapi/products/search";

function getCoupangApiDate() {
 const date = new Date();
 const year = date.getUTCFullYear().toString().substring(2);
 const month = (date.getUTCMonth() + 1).toString().padStart(2, '0');
 const day = date.getUTCDate().toString().padStart(2, '0');
 const hours = date.getUTCHours().toString().padStart(2, '0');
 const minutes = date.getUTCMinutes().toString().padStart(2, '0');
 const seconds = date.getUTCSeconds().toString().padStart(2, '0');
 const datetime = `${year}${month}${day}T${hours}${minutes}${seconds}Z`;
 return datetime;
}

function generateCoupangSignature(method, uri, secretKey, accessKey) {
 const parts = uri.split('?');
 const path = parts[0];
 const query = (parts.length === 2) ? parts[1] : '';
 const datetime = getCoupangApiDate();
 const stringToSign = `${datetime}${method}${path}${query}`;
 const signatureBytes = Utilities.computeHmacSha256Signature(stringToSign, secretKey);
 const signatureHex = bytesToHex(signatureBytes);
 return `CEA algorithm=HmacSHA256, access-key=${accessKey}, signed-date=${datetime}, signature=${signatureHex}`;
}

function bytesToHex(bytes) {
 return Array.from(bytes, b => ('0' + (b & 0xFF).toString(16)).slice(-2)).join('');
}

function fetchCoupangProducts(limit = 10, keyword = null) {
 if (!keyword) throw new Error("검색 키워드가 필요합니다.");
 const method = 'GET';
 const encodedKeyword = encodeURIComponent(keyword);
 const uri = `${PRODUCT_SEARCH_API_PATH}?keyword=${encodedKeyword}&limit=${limit}`;
 const url = COUPANG_API_BASE_URL + uri;
 const options = {
 method: method,
 headers: { 'Authorization': generateCoupangSignature(method, uri, COUPANG_SECRET_KEY, COUPANG_ACCESS_KEY) },
 muteHttpExceptions: true
 };
 const response = UrlFetchApp.fetch(url, options);
 return JSON.parse(response.getContentText());
}

function doGet(e) {
 try {
 const keyword = e.parameter.keyword;
 const limit = parseInt(e.parameter.limit) || 10;
 if (!keyword) return createJsonResponse({ error: "검색 키워드 필요" });
 return createJsonResponse(fetchCoupangProducts(limit, keyword));
 } catch (error) {
 return createJsonResponse({ error: error.message });
 }
}

function createJsonResponse(data) {
 return ContentService.createTextOutput(JSON.stringify(data)).setMimeType(ContentService.MimeType.JSON);
}

위의 코드를 구글 스크립트에 저장하고 배포하면, 상품 정보를 불러올 수 있는 전용 주소(URL)가 생성됩니다. 이제 이 주소를 가지고 내 블로그 스킨이나 본문에 적용하면 됩니다.

보여줄 상품 개수도 코드 안에서 숫자로 쉽게 조절할 수 있습니다.

  • 수정할 부분: GAS 웹앱 주소(URL)
  • 노출할 상품 개수 조절

블로그 상품 노출을 위해 수정할 코드

<script>
 const API_URL_POST = '여기에 구글 스크립트 주소를 붙여넣으세요';
 const LIMIT_POST = 3;
</script>

이 코드는 글 내용이 있는 페이지에서만 상품이 나타나도록 작성되었습니다. 기능을 분리해 두어야 나중에 관리하기가 훨씬 수월하기 때문입니다.

마치 비빔밥처럼 한꺼번에 섞는 것이 아니라, 재료를 따로 관리하는 국밥처럼 코드를 용도별로 나누어 두는 것이 유지보수에 더 유리합니다.

기본 노출 위치는 소제목(h3 태그) 하단으로 설정되어 있으며, 필요에 따라 위치를 변경하실 수 있습니다.

콘텐츠 본문에 적용할 코드

<script>
 const API_URL_H3 = '본인의 GAS 주소';
 const LIMIT_H3 = 3;
 // ... (본문의 JavaScript 로직 적용) ...
</script>

목록(카테고리) 페이지에 적용할 코드

<script>
 const API_URL_POST = '본인의 GAS 주소';
 const LIMIT_POST = 3;
 // ... (본문의 JavaScript 로직 적용) ...
</script>

적용 태그 예시 ⬇ 상품이 잘 나오는지 확인해 보세요!

<p class="shoptag">짜장면</p>

자동화 기능을 넣었는데 상품이 검색 결과에 안 나오면 어떻게 하나요?

내 글이 잘 수집되고 있는지 확인하려면 구글 서치콘솔의 ‘URL 검사’ 기능을 활용해 보세요. ‘실제 페이지 테스트’를 눌러 로봇이 내 글을 읽었을 때 최종 HTML에 상품 정보가 포함되어 있는지 체크해야 합니다. 만약 상품이 안 보인다면 구글 스크립트의 권한 설정이 ‘모든 사용자(Anyone)’로 되어 있는지 확인해 보시기 바랍니다

검색 엔진이 자바스크립트로 만든 상품 링크를 읽어갈 수 있나요?

요즘 구글 같은 검색 엔진은 자바스크립트를 해석해서 내용을 읽어갑니다. 다만 페이지 로딩이 너무 느리거나 코드에 오류가 있으면 수집이 생략될 수 있습니다. 따라서 페이지 로딩 속도를 최적화하고 API 응답이 지연되지 않도록 관리하는 것이 중요합니다.

너무 광고처럼 보여서 블로그 점수가 깎이지는 않을까요?

단순히 물건만 나열하는 게 아니라, 글의 주제와 연관된 상품이 나오도록 키워드를 정밀하게 설정하는 것이 핵심입니다. 소제목 아래처럼 자연스러운 위치에 배치하고, 방문객의 체류 시간을 유지할 수 있는 정성스러운 정보를 함께 담는다면 블로그 건강에도 긍정적인 영향을 줍니다.

댓글 남기기