오늘날 네이버를 가장 큰 밥줄... 광고 서비스....

여차 저차 네이버 광고 API를 개발할 일이 생겨 처음 접해 봤다.

 

처음 의뢰를 받았을 때는 뭐 API가 대단한게 있나.

 

그냥 대충 던지고 응답 받으면 대충 표현해 주면 되는거 아닌가

라고 단순하게 생각했다가 이번 작업에 두번째로 어려운 작업이 되었다.(가장 어려운 작업은 PHP 개발셋팅..)

 

네이버 광고 API는 https://naver.github.io/searchad-apidoc/#/guides 에 문서로 영어로 존재한다.(한국기업 아니였나..)

 

보통 API를 개발을 시작하면 아래와 같은 절차로 접근한다.

 

1. 무슨 데이터를 받아야 하나?

2. 무슨 API를 호출 해야 하나?

3. 호출 하기 위해서 어떤 데이터를 수집해서 전달할 것인가?

 

1번. 요건은 플레이스, 지역소상공인 클릭, 노출수 같은 정보를 보여 달라였다.

2번. 여기서 부터 막혔다. 고객이 원하는 데이터 모양으로 API doc 문서의 response다 뒤져봤는데

       막상보면 자료 양도 많고 게다가 영어라서 읽기가 일단 싫었다 ㅋㅋㅋ(게다가 광고 서비스의 이해도가 없으니 더 삽질을

       가속화하였다.)

3번. 데이터를 어떻게 가져와야 하나

 

결과만 말하면 내가 알고 있는건 customer Id -> 이걸로 캠페인 번호를 가져온다 -> 캠페인 번호로 활용하여 광고 타입을 구분하고 광고그룹 ID를 가져온다. -> 광고 그룹ID를 가지고 고객이 원하는 데이터를 가져온다.

 

제발 내가 네이버 api 구조를 잘 몰라서 저렇게 했다고 믿고 싶다.

/ncc/campaigns -> /ncc/adgroups -> /stats 이렇게 호출했다.

 

그래서 그냥 막무가내로 PHP로 코딩을 했다. 근데 잘 API가 호출이 안된다. GET method로 배열 및 객체를 담아서 그런가

파라메터를 인코딩으로해보고 전송해도 API를 실패했다. 이게 호출 방식이 문제인건지 데이터의 문제인건지가 판단이 안됐다.

 

API 관통 테스트를 API툴을 가지고 먼저했어야 하는데 바로 개발을 했다니 너무 우습게 생각했었나 싶었다.

 

그래서 다시 초심으로 돌아와서 POSTMAN으로 테스트 하고자 하였는데 네이버 API 인증은 아래와 같다.  

sha256-hmac ( API_SECRET, Milliseconds since Unix Epoch + "." + http method + "." + request uri )

 

아... 시간이 들어가는 구조인데 POSTMAN에서는 어떻게 만들어서 테스트를 하냐...

POSTMAN에서는 Pre Script라는 자바스크립트 기반으로 만들어 줄수 있었다.

 

function genBasicToken(clientAPIKey, contactAPIKey, username) {
    var time = new Date().getTime();
    var conKey = time + '.' +'GET'+ '.' +'/stats'

 

//인증 처리 부분
    var hmac = CryptoJS.HmacSHA256(conKey, clientAPIKey);
    var base64Hmac = CryptoJS.enc.Base64.stringify(hmac);
     phttp://m.globals.set("X-Signature", base64Hmac);
     phttp://m.globals.set("X-Timestamp", time);

   

//파라메터 인코딩 할 부분
    var fArr = encodeURI('["clkCnt","impCnt","salesAmt", "ctr", "cpc", "avgRnk"]');
    var fJsn = encodeURI('{"since":"2024-01-01","until":"2024-01-31"}');
    phttp://m.globals.set("fields", fArr);
    phttp://m.globals.set("timeRange", fJsn);
    return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(username + ":" + base64Hmac));
}

POSTMAN에서 스크립트가 동작되는 결과도 확인할 수 있는 콘솔이라는 창이 있다는 것도 처음 알았다.

이걸로 API 관통 테스트를 하고 PHP로 코딩을 맞게 해줬다. 이때 파라메터 인코딩을 애를 먹였다.

 

API 데이터 구조를 고객님한테 설명을 듣고 코딩을 끝내고 테스트를 완료하였다.

 

결국은 잘 끝냈지만 처음해보는 PHP 언어이며, API를 너무 쉽게 생각했다.

 

항상 사람이 겸손해야 한다.

겸손은

 

 

 

+ Recent posts