유저활동데이터를 수집하기위해 client script에서 Amazon API Gateway로 데이터를 전송할 때 SDK를 활용해보았다.
CORS 활성화 & 배포
SDK 다운로드
SDK를 S3에 퍼블릭으로 업로드
SDK를 로딩하여 데이터 전송하는 코드 작성
const loadScript = (url) => {
return new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = url;
script.onload = resolve;
script.onerror = () => reject(new Error(`Failed to load: ${url}`));
document.head.appendChild(script);
});
};
const loadDependencies = async () => {
const baseUrl = ;
const scripts = [
'lib/axios/dist/axios.standalone.js',
'lib/CryptoJS/rollups/crypto-js.js',
'lib/CryptoJS/rollups/sha256.js',
'lib/CryptoJS/components/enc-base64.js',
'lib/CryptoJS/components/hmac.js',
'lib/apiGatewayCore/sigV4Client.js',
'lib/apiGatewayCore/apiGatewayClient.js',
'lib/apiGatewayCore/simpleHttpClient.js',
'lib/apiGatewayCore/utils.js',
'lib/url-template/url-template.js',
'apigClient.js',
];
try {
for (const script of scripts) {
await loadScript(baseUrl + script);
console.log(`${script} 로드 완료`);
}
console.log('모든 라이브러리 로드 완료');
} catch (error) {
console.error('라이브러리 로드 실패:', error);
}
};
const callApi = async (body) => {
try {
const apigClient = apigClientFactory.newClient({
region: 'ap-northeast-2',
});
const response = await apigClient.rootPost(null, body);
console.log('API 호출 성공:', response);
} catch (error) {
console.error('API 호출 실패:', error);
}
};
await loadDependencies();
테스트 결과 확인
전송 코드 작성
const callApi2 = async (body) => {
const url = ;
const headers = {
'Content-Type': 'application/json',
};
try {
const response = await fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(body),
});
console.log('API 호출 성공:', response);
} catch (error) {
console.error('API 호출 실패:', error);
}
};
테스트 결과 확인
apigClient.invokeApi()
와 같은 추상화된 메서드를 사용합니다.axios
를 사용해 API 요청을 처리합니다. 이를 통해 안정적인 HTTP 통신이 가능합니다.axios
, crypto-js
, URL 템플릿 등 여러 라이브러리를 로딩하므로 번들 사이즈가 커질 수 있습니다.axios
같은 경량 HTTP 클라이언트를 사용해 요청을 보내면 추가적인 라이브러리 로딩 없이 API를 호출할 수 있습니다.요소 | SDK 사용 | 직접 요청 (Axios 등) |
---|---|---|
설정 및 초기화 | 복잡 (여러 라이브러리 필요) | 단순 (Axios 등으로 바로 구현 가능) |
성능 | 번들 사이즈 커짐 | 경량화 가능 |
서명 및 인증 처리 | 자동 처리 (SigV4 서명) | 직접 서명 처리 필요 |
보안 | IAM 자격 증명 노출 위험 | API 키 사용으로 보안 강화 가능 |
AWS 통합 | AWS와 쉽게 통합 | 수작업으로 AWS 통합 처리 |
제어 및 커스터마이징 | 추상화된 메서드 제공 | 완전한 제어 가능 |
유지보수 | SDK 업데이트 필요 | 코드 직접 관리 필요 |
유저활동데이터를 수집하는 로직은 아주 간단하게 요청만 보내면 되기때문에 여러 라이브러리를 로딩해야하는 SDK보다 직접 fetch로 요청보내는 것이 적절할 것 같다. 추후 인증을 적용할 때에 해당 코드를 모듈화하여 하면 될 듯 하다.
https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/how-to-generate-sdk.html