반응형
express로 이루어진 프로젝트에서 발송 관련된 기능들을 nestJs 기반으로 분리하는 작업을 하고 있는데 하다가 aws-sdk3이 나왔단 사실을 알고 뜯어보고 비교할 것없이 바로 이번 플젝에 적용시키고자 한다.
- 일단 AWS 피셜 달라진 점 한줄 요약 :
- 최상급 Typescript 지원, 새로운 미들웨어 스택 및 각 서비스에 대해 개별 패키지를 갖추고 있는 모듈식 아키텍쳐가 적용되었다.
- 개별 패키지로 모듈화 되었단 것 때문에 이번에 바로 적용시키고자 함. 이번에 특히 세팅 중인 발송 관련된 서버는 aws-sdk에서 SES, SNS 밖에 안 쓰고 있기 때문에 전부 가져올 필요가 없었다. 너무 커.. aws-sdk
> 모듈은 '@aws-sdk/client-' 뒤에 기존에 자신이 aws-sdk에서 사용하던 모듈 서비스를 넣으면 된다. 그래서 난 SES, SNS를 넣어서 해당 aws-sdk 모듈만 요로코롬 패키지에 넣어줬고 해줬다.

> 근데 그러면서 기존에 사용하던 SNS 방식이랑 좀 바뀐거같다.. 기존이 좀 옛날 버전이기도 했는데.. 이거말곤 문제 없는 듯?
> credentials을 어떻게 처리해줄지가 고민이다.. 환경변수 관리 규칙 정리해야할듯
> 발송된다. 달라진 점은 aws-sdk의 config안에 region, credentials을 넣어주던 방식에서 (이렇게 하면 aws-sdk 모듈 전역으로 관리가 되고) aws-sdk 내부에서 필요한 모듈만 package에 넣어주고 import해서 생성되는 ~~Client 안에 region과 credentials을 넣어주는 방식으로 바뀜 (aws-sdk 모듈 별로 관리 가능)
import { Injectable } from '@nestjs/common';
import { SNSClient, PublishCommand } from '@aws-sdk/client-sns';
const client = new SNSClient({
region: 'ap-northeast-2',
credentials: {
accessKeyId: 'aaaaa111122223333',
secretAccessKey: 'dummySecretAccessKey',
}
});
async sendTextMessage(body: { phone: number; type: string }) {
try {
const params = {
// 이건 aws에서 계정별로 생성하여 받는 TopicArn값
TopicArn,
// 이게 사실 제일 납득이 안감 왜 이렇게 보내야 가는지 모르겠다. 이거 느낌이 이전에 다른 개발자분이 이렇게 받도록 설정해놓은거 같은데 이건 더 뜯어봐야할 듯
Message: JSON.stringify({ phone: body.phone, contents: '???????' }) /* required */,
MessageAttributes: {
// 여기에 넣는 값은 그냥 optional로 사용하는 설정값들 (우린 aws 서버에서 여기 property로 받아서 분기쳐주는게 좀 더 있어서 넣어줌)
// 안쓰면 MessageAttributes 는 아예 빼도 된다.
....
},
};
// 발송 부분
const data = await client.send(new PublishCommand(params));
/**
* 발송
*/
console.log('Success, message published. MessageID is ' + data.MessageId);
} catch (err) {
console.error(err, err.stack);
// error handling.
}
}
반응형
'Backend 언어 > JS&TS' 카테고리의 다른 글
[이펙티브 타입스크립트] 몽키 패치보다는 안전한 타입을 사용하기 (0) | 2022.03.01 |
---|---|
2021 ECMAScript (ES12) 신규 변경점 (0) | 2021.09.09 |
[nestjs] nestjs를 시작하며 (0) | 2021.05.14 |
Jest 'JavaScript heap out of memory'에서 시작된 리팩토링 - (1) (0) | 2021.04.30 |
[jest] expect를 정리해보자 (0) | 2021.04.24 |