ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 비인증 결제 백엔드 개발할 때 만난 이슈와 삽질 기록
    기타 2022. 12. 29. 17:59

    이걸 이제야 업로드하네...

     


    기존에는 사용자가 CMS나 계좌이체를 통해 납부하면 운영자가 납부 확인과 정산을 하는 시스템이었다. 이를 개선하기 위해 PG 연동을 통해 사용자가 직접 결제를 할 수 있도록 개발을 진행했고(서비스에 도입되려면 좀 더 걸릴 것 같지만) 그 과정에서 겪은 이슈와 소소한 삽질을 기록하려 한다. 참고로 PG는 NICEPAY였고, 아래 내용은 NICEPAY API와 관련된 내용이다. (즉 다른 PG사의 케이스에는 다를 거라는 것)
     

     

    1. Request 패키지를 사용하기 싫어 Axios 패키지로 HTTP request

    전달받은 개발 문서에 포함되어있는 테스트 코드를 확인해보니 모든 요청이 request 패키지를 통해 이루어져 있었다. 그러나 나는 request 보다 axios를 사용하고 싶었다. 이유를 나열해보면 아래와 같다.
     
    1) 기존 서비스에서 axios를 사용하여 http request를 하는데 굳이 request 패키지를 설치해야 하는가
    2) request 패키지는 promise 기반이 아니기에 async/await 문법을 사용하려면 별도 패키지 설치 필요
    3) request 패키지는 2020년 2월에 deprecated 되어 더 이상 새로운 기능이 추가 안됨


    이러한 이유로 request 패키지가 아닌 axios 패키지를 이용하기로 했다 (삽질의 서막)

     

    axios 패키지를 이용해 요청했을 때 응답값이 알 수 없는 문자열로 반환되었다. 제공받은 테스트 코드를 보니 request post 요청 시 파라미터 값을 form type으로 전달하는데, 내가 작성한 코드는 요청 파라미터가 form type이 아니라 에러가 발생하는 건가 싶었다. 방법을 찾기 위해 axios npm 문서를 확인했고 response 타입을 설정할 수 있다는 걸 알게 되었다. 애초에 요청 파라미터의 문제였으면 에러가 발생하거나 응답이 안 왔을 거라는 생각이 들었고, 응답 타입 설정을 했더니 정상적으로 식별 가능한 응답 값을 확인할 수 있었다.

    // 예시 
    axios({
      method: 'get',
      url: '요청 경로',
      responseType: 'json' // 옵션값은 arraybuffer, document, json, text, stream이 있으며 디폴트값은 json임
    })

     

     

    2. 인코딩 문제

    응답값 중 응답 메시지 값이 깨져서 보이는 이슈가 있었는데 이는 응답값에 한글이 포함되어 있는 게 원인이었다. node.js 패키지 중 iconv라는 패키지가 인코딩 문제를 해결할 수 있게 해 주기 때문에 즉시 설치를 진행했고 문제를 해결했다.
    https://www.npmjs.com/package/iconv

     

    iconv

    Text recoding in JavaScript for fun and profit!. Latest version: 3.0.1, last published: a year ago. Start using iconv in your project by running `npm i iconv`. There are 333 other projects in the npm registry using iconv.

    www.npmjs.com

     

     

    3. 개발 외 이슈

    • 기존 서비스와 신규 서비스에 대한 계약 차이 
    • 기존 서비스와 신규 서비스에서 제공하고 있는 기능 차이

     
    위 2개는 개발 외 이슈이나 개발에 영향을 줄 수 있는 문제이므로, 사전 체크가 필요했다. 두 번째 사항은 미리 체크를 해서 답을 받았고 이에 대한 내용을 전사에 공유했다. 그러나 첫 번째 사항은 계약적인 부분이 얽혀있었고 이 영역은 내가 담당하지 않아 체크를 못했다. 결과적으로 신규 서비스를 이용하여 개발한 코드를 버리고 기존 서비스를 이용하는 방향으로 다시 수정을 해야 했지만 생각보다 빨리 개발을 진행해 일정에 큰 문제는 없었다. 고생은 했지만 다음에 비슷한 작업을 할 때 어떤 것을 챙겨야 할지 알게 되어 오히려 좋다.
     


     
     

    삽질 결과: 수확은 있었다!

     


     


    참고 문서

     

    댓글

jaejade's blog ٩( ᐛ )و