하루에 5분씩만 투자해서 함께 공부해요~ 댓글은 개별 포스트 클릭하면 작성가능합니다~

AWS API-GATEWAY에서 우리쪽 서버가 발생시킨 에러코드를 그대로 전달하는 방법

  • API-GATEWAY를 사용하다 보면 에러 응답 코드라던가, 응답 형식 등을 JSON으로 규정할 수 있음을 알 수 있습니다.
  • 이러다 보니까 우리가 사용하고 있는 에러 응답 코드들을 일일이 JSON으로 다 정의해서 올려야 하는건가? 하고 의구심이 들텐데요.
    • 안정적이고 다양한 확장 가능성이 있는 “좋은” 방법입니다만, “효율적”인 방법인지는 잘 모르겠네요.
    • 왜냐면 AWS가 제공하는 대시보드 전반의 불편한 UI 때문에, 이러한 JSON 입력도 상당히 까다롭기 때문입니다.
    • 저는 그래서 간단하게 PROXY만 제공하고 싶다면 아래와 같은 방법을 추천합니다.
광고를 클릭해주시면 블로그운영에 큰 힘이 됩니다.
  • 먼저 해당하는 메소드에서 통합요청탭의 편집 버튼을 클릭해주세요.
    • alt text
  • 그런다음 아래처럼 HTTP 프록시 통합을 체크하면 끝!
    • alt text

파이선에서 다른 가상환경을 이용하는 스크립트를 실행하기

  • 종종 다른 의존성 라이브러리를 사용하는 파이선 코드를 또 다른 파이선 코드 내부에서 실행해야 하는 경우가 있습니다.
  • 다음과 같은 상황을 가정해 봅시다.
    • a.py라는 파이선 프로그램은 conda activate a_config로 가상환경을 지정하고 실행했습니다.
    • 이때 conda activate b_config로 가상환경을 지정하고 실행해야 하는 b.py를, a.py 내부에서 실행시키고 싶습니다.
    • 어떻게 해야 할까요? 아래 코드를 참고하시면 됩니다.
  • 먼저 b.py를 실행시키는 쉘스크립트 b.sh를 만듭니다.
  • 경로는 사용하시는 값으로 지정하셔야 합니다! b.sh는 b.py가 있는 경로에 만들겠습니다.
#!/bin/bash
PATH=$PATH:${conda가 설치된 경로}/anaconda3/envs/b_config/bin
cd ${b.py가 존재하는 경로}
python b.py
  • 그리고 나서 a.py에서 아래처럼 b.sh를 실행해 주세요.
import subprocess

try:
    b_path = "b.py가 있는 경로"
    conda_path = "b_config가 설치된 경로"
    python_version = "b_config가 사용하는 파이선 버전 ex:python3.10"
    os.chdir(b_path)
    new_env = {
        "PATH": b_path,
        "PYTHONPATH": "%s/lib/%s/site-packages" % (conda_path python_version),
    }
    subprocess.run(["b.sh", 필요한 인자값들...], env=new_env)    
except Exception as e:
    print(e)
  • 인자값들이 필요하면 쉼표로 구분하면서 이어 넣으면 됩니다.

NodeJS 서버에서 애플 인앱결제 유효성 검증을 하는 방법

  • 지난 시간에 구글 안드로이드 인앱결제 유효성 검증을 알아봤습니다.
  • 오늘은 애플 아이폰용 앱에서 인앱결제를 했을 경우에, 결제정보의 유효성 검증을 알아보겠습니다.
  • 2024년 5월 현재, 지금 소개하는 방법은 사용가능한 것입니다.
  • 사전에 처리해야 하는 과정은 생략할게요, 그 부분은 다른데서 검색하셔도 됩니다.
  • 저는 iap 패키지를 이용했습니다.
const iap = require('iap')

const platform = 'apple';
const payment = {
    receipt: "애플로부터 받은 pay receipt",
    productId: "애플에 등록해둔 상품ID",
    packageName: '앱 패키지 네임',
    excludeOldTransactions: true,
};
try {
    const resp = await new Promise((resolve, reject) => {
        iap.verifyPayment(platform, payment, (err, response) => {
            if (err) {
                reject(err)
            }
            resolve(response)
        })
    })
    if (resp.transactionId === "애플에서 보내온 결제ID") {
        return true
    }
} catch (e) {
    console.error(e)
}
  • secret을 넣으라고 되어 있는 글들이 있던데요, 제가 확인한 바로는 오히려 에러가 납니다.
  • iap 패키지의 함수가 async/await을 지원하지 않아서 직접 구현했습니다.