몽상실현개발주의

분산된 함수에서 에러 관리를 위한 중앙 집중식 에러 데이터 핸들링 전략 본문

Language/Javascript

분산된 함수에서 에러 관리를 위한 중앙 집중식 에러 데이터 핸들링 전략

migrationArc 2024. 2. 27. 15:22

AWS Lambda 함수에서 여러 파일에 걸쳐 있는 함수들이 작동 중 발생하는 에러를 중앙에서 관리하고 추적하는 방법은 여러가지가 있지만, 여기서는 공유 모듈을 사용하는 방법에 대해 설명하겠습니다. 이 접근 방식은 특히 각 함수가 서로 다른 파일에 분리되어 있을 때 유용합니다. 공유 모듈을 생성하여 해당 모듈 내에서 상태를 관리하고, 필요한 모든 파일에서 이 모듈을 import하여 사용합니다.

 

# 공유 에러 핸들러 모듈 생성

먼저, 에러 데이터 리스트를 관리하고, 에러를 추가하는 함수를 제공하는 errorHandler.js라는 공유 모듈을 만듭니다.

// errorHandler.js

// 에러 데이터 리스트를 관리할 배열 초기화
const errorDataList = [];

// 에러 데이터를 리스트에 추가하는 함수
const addErrorData = (errorData) => {
  errorDataList.push(errorData);
};

// 에러 데이터 리스트를 가져오는 함수
const getErrorDataList = () => errorDataList;

module.exports = { addErrorData, getErrorDataList };

 

 

# 각 함수 파일에서 공유 모듈 사용

각 함수가 정의된 파일에서 errorHandler.js 모듈을 import하고, 에러가 발생했을 때 addErrorData 함수를 호출하여 에러 정보를 추가합니다.

// first.js

const { addErrorData } = require('./errorHandler');

const first = () => {
  // ... some code
  try {
    // ... code that might throw an error
  } catch (error) {
    addErrorData({ function: 'first', error: error.message });
  }
};

module.exports = first;

 

 

# Lambda 핸들러에서 에러 데이터 리스트에 접근

Lambda 핸들러에서는 각 함수를 import하고 실행한 후, errorHandler.js를 통해 에러 데이터 리스트에 접근할 수 있습니다.

// lambdaHandler.js

const first = require('./first');
const second = require('./second');
const third = require('./third');
const { getErrorDataList } = require('./errorHandler');

exports.lambdaHandler = async (event, context) => {
  first();
  second();
  third();

  const errorDataList = getErrorDataList();

  return { statusCode: 200, body: JSON.stringify({ errorDataList }) };
};

 

 


 

이 방식을 사용하면, 여러 파일에 걸쳐 있는 함수들에서 발생하는 에러들을 한 곳에서 수집하고 관리할 수 있습니다. 각 함수는 필요할 때마다 공유 errorHandler 모듈의 addErrorData 함수를 호출하여 에러 정보를 추가하며, Lambda 핸들러는 언제든지 getErrorDataList 함수를 호출하여 모든 에러 데이터에 접근할 수 있습니다. 이러한 방식은 코드의 응집도를 높이고, 에러 관리를 더욱 효율적으로 만들어 줍니다.

Comments