Node.JS : Naver API Papago 번역 인증 오류?

2021. 4. 13. 02:30Issue & Solution

팝하고.. 너 외 않되..

 

#파파고 인증 오류 (feat. error 024, 등록되지 않은 client ID, axios)

영어를 못하는 인생은 참 힘들다.. 각박한 세상..

영어로 된 강의자료 pdf파일을 읽다가 너무 읽기 싫어서.. 잔머리를 굴려, pdf를 넣으면 그걸 번역해서 한글로 된 pdf로 만들어주는(디자인은 안하고) Node JS 서버를 만들어볼까 하다가 갑자기 꽂혀서 만들어 봤는데,

pdf파일 읽기 성공, pdf파일 쓰기 성공 등 전부 구현 해 놨는데 생각지도 못한 papago api의 인증 문제가 발생했다.

캡쳐를 못해놨지만, 대략 024 에러, 즉 Naver API의 Client ID가 존재하지 않는다는 에러가 계속 떴다.

물론 당연히 Application 등록은 해놨고, 올바른 ID와 Key를 입력했다.

네이버에서 제공하는 Node.JS의 레퍼런스는 아래와 같다.

var express = require('express');
var app = express();
var client_id = 'YOUR_CLIENT_ID';
var client_secret = 'YOUR_CLIENT_SECRET';
var query = "번역할 문장을 입력하세요.";
app.get('/translate', function (req, res) {
   var api_url = 'https://openapi.naver.com/v1/papago/n2mt';
   var request = require('request');
   var options = {
       url: api_url,
       form: {'source':'ko', 'target':'en', 'text':query},
       headers: {'X-Naver-Client-Id':client_id, 'X-Naver-Client-Secret': client_secret}
    };
   request.post(options, function (error, response, body) {
     if (!error && response.statusCode == 200) {
       res.writeHead(200, {'Content-Type': 'text/json;charset=utf-8'});
       res.end(body);
     } else {
       res.status(response.statusCode).end();
       console.log('error = ' + response.statusCode);
     }
   });
 });
 app.listen(3000, function () {
   console.log('http://127.0.0.1:3000/translate app listening on port 3000!');
 });

에러가 뜰 때의 코드는 아래와 같았다.

const axios = require("axios");

...

const translate_papago = async() => {
  const options = {
          url : "https://openapi.naver.com/v1/papago/n2mt",
          form : {
              source,
              target,
              text
          },
          headers : {
              'X-Naver-Client-Id': CLIENT_ID, 
              'X-Naver-Client-Secret': CLIENT_SECRET
          }
      };

  const result = await axios.post(options);
}

일단 나는 레퍼런스와 다르게 express 대신 Koa 프레임워크와, api Post를 위한 request 대신 axios를 사용했는데, url 옵션을 잘못 줘서 수정해서 post를 했다.

const axios = require("axios");

...

const translate_papago = async() => {
  const url = "https://openapi.naver.com/v1/papago/n2mt",
  const options = {
          form : {
              source,
              target,
              text
          },
          headers : {
              'X-Naver-Client-Id': CLIENT_ID, 
              'X-Naver-Client-Secret': CLIENT_SECRET
          }
      };

  const result = await axios.post(url, options);
}

 

이번에는 인증 에러가 떴는데, 여기서 얼마나 삽질을 했는지 모르겠다. 별의 별 방법을 다 써보다가 queryString을 이용하여 아래와 같이 해봤다.

const axios = require("axios");
const qs = require("queryString");

...

const translate_papago = async() => {
    const url = "https://openapi.naver.com/v1/papago/n2mt",
    const params = qs.stringify({
          source,
          target,
          text
      });

    const options = {
        headers : {
            'X-Naver-Client-Id':CLIENT_ID, 
            'X-Naver-Client-Secret': CLIENT_SECRET
        }
    };
    
    const result = await axios.post(url, params, options);
}

그런데 이것도 처음엔 안됐다. 근데 어느 순간 갑자기 되더라.. 아무튼 결론은

axios.post할 때 인자 3개 넣어서 하던가, 아니면 url + params를 해서 post를 해보자.

 

아무튼 삽질 끝

영어공부를 열심히하자