[Project/AWS] KinesisClient

Sang Young Ha·2022년 7월 8일
post-thumbnail

FOR

  • 사이트 개발에 있어 사용자들이 특정 페이지 (주문 페이지, 제품 상세 페이지 등)에 접근을 하고, 특정 버튼(공유하기 버튼, 장바구니 담기버튼) 을 누르는 action 이 발생 시, 로그를 저장하기 위해 KinesisClient를 사용 했다.

Steps taken

  • 일단 처음, KinesisClient 를 설치하고 initialize 하는데서 부터 애를 좀 먹었다.
const kinesis_client = new KinesisClient({
  region: process.env.AWS_REGION,
  credentials: {
    accessKeyId: process.env.AWS_ACCESS_KEY,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  },
});

위와 같이 kinesisClient를 initialize 해줘야 사용 할 수 있는데, .env.local 에 저장한 엑세스 키라던지 등이 제대로 불러와 지지 않았다.
StackOverflow 를 열심히 찾아본 결과, 아래와 같이 next.config.js 에 module.exports 를 추가 해 주니 값이 잘 들어오는 것을 확인할 수 있었다.

module.exports = {
  env: {
    AWS_ACCESS_KEY: process.env.AWS_ACCESS_KEY,
    AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
    AWS_REGION: process.env.AWS_REGION,
    KAKAO_KEY: process.env.KAKAO_KEY,
    GOOGLE_ANALYTICS: process.env.GOOGLE_ANALYTICS,
  }
};
  • sendLogData 라는 global function 을 다음과 같이 만들어 로그 데이터를 보내야 하는 페이지들에서 가져와 사용 할 수 있도록 했다.
export async function sendLogData(
  session_id,
  identifier,
  user_agent,
  device_kind,
  referer,
  page_name,
  event_type,
  object,
  object_with,
  object_container,
  customjson
) {
  const happyNewYear = new Date();
  const year = happyNewYear.getFullYear();
  const month = happyNewYear.getMonth() + 1;
  const date = happyNewYear.getDate();
  const p_date_str = `${year}-${month >= 10 ? month : "0" + month}-${
    date >= 10 ? date : "0" + date
  }`;

  // YYYY-MM-DD hh:mm:ss.zzzZ
  // 현재시간
  const today = new Date();

  // 현재시간에서 9시간 추가
  const addHours = today.setHours(today.getHours() + 9);

  // 출력형식변경
  const setUpTime = today.toISOString().replace("T", " ").replace("Z", "");

  const params = {
    StreamName: "client-log-data-stream",
    Data: Buffer.from(
      JSON.stringify({
        created_at: setUpTime,
        session_id: session_id,
        identifier: identifier,
        user_agent: user_agent,
        device_kind: device_kind, //D00:dweb D01:mweb
        app_version: API.app_version,
        referer: referer,
        page_name: page_name,
        event_type: event_type,
        object: object,
        object_with: object_with,
        object_container: object_container,
        customjson: customjson,
        p_date: p_date_str,
      })
    ),
    PartitionKey: "p_date",
  };

  try {
    const data = await kinesis_client.send(new PutRecordCommand(params));
  } catch (error) {
    console.log(error);
  }
}
  • 파라미터 데이터 중 하나인 session_id 를 구현 하기 위해서도 많은 노력을 기울였는데, 이에 대해서는 다음 글을 할애해서 기록해야 할것 같다.

0개의 댓글