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 함수를 호출하여 모든 에러 데이터에 접근할 수 있습니다. 이러한 방식은 코드의 응집도를 높이고, 에러 관리를 더욱 효율적으로 만들어 줍니다.