Backend 언어/JS&TS

[aws-sdk] aws sdk 3이 나왔다.

민초부 2021. 5. 14. 17:18
반응형

 

express로 이루어진 프로젝트에서 발송 관련된 기능들을 nestJs 기반으로 분리하는 작업을 하고 있는데 하다가 aws-sdk3이 나왔단 사실을 알고 뜯어보고 비교할 것없이 바로 이번 플젝에 적용시키고자 한다. 

 

 

  • 일단 AWS 피셜 달라진 점 한줄 요약 :
    • 최상급 Typescript 지원, 새로운 미들웨어 스택 및 각 서비스에 대해 개별 패키지를 갖추고 있는 모듈식 아키텍쳐가 적용되었다. 
    • 개별 패키지로 모듈화 되었단 것 때문에 이번에 바로 적용시키고자 함. 이번에 특히 세팅 중인 발송 관련된 서버는 aws-sdk에서 SES, SNS 밖에 안 쓰고 있기 때문에 전부 가져올 필요가 없었다. 너무 커.. aws-sdk

 

 > 모듈은 '@aws-sdk/client-' 뒤에 기존에 자신이 aws-sdk에서 사용하던 모듈 서비스를 넣으면 된다. 그래서 난 SES, SNS를 넣어서 해당 aws-sdk 모듈만 요로코롬 패키지에 넣어줬고 해줬다.

이렇게 package.js에도 들어간다.

> 근데 그러면서 기존에 사용하던 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.
    }
}
반응형