[javascript] 클로저를 활용한 로깅 및 감사(log and audit) 기능 구현하기
클로저를 이용하여 로깅(log) 및 감사(audit) 기능을 구현하는 방법을 알아보겠습니다.
클로저란 무엇인가요?
클로저는 함수와 그 함수가 선언된 렉시컬 환경(lexical environment)을 포함한 것을 가리킵니다. 클로저를 통해 외부 변수에 접근할 수 있는 함수를 만들 수 있습니다.
function outerFunction() {
let outerVariable = 'I am outer';
function innerFunction() {
console.log(outerVariable);
}
return innerFunction;
}
const logOuterVariable = outerFunction();
logOuterVariable(); // 출력: I am outer
위 예제에서 innerFunction
은 클로저로서 outerVariable
에 접근할 수 있습니다.
로깅 및 감사 기능 구현하기
이제 클로저를 사용하여 간단한 로깅(log) 및 감사(audit) 기능을 구현해 보겠습니다.
function createLogger(moduleName) {
return function(message) {
console.log(`[${moduleName}] ${message}`);
};
}
const logToConsole = createLogger('MyModule');
logToConsole('This is a log message'); // 출력: [MyModule] This is a log message
위 예제에서 createLogger
함수는 클로저를 반환합니다. 그리고 반환된 클로저는 외부에서 전달된 moduleName
을 기반으로 로그 메시지를 출력합니다.
클로저를 활용한 감사 로깅(Audit Logging)
감사 로그는 시스템의 중요 이벤트를 기록하는 데 사용됩니다. 클로저를 이용하여 감사 로깅을 구현해 봅시다.
function createAuditLogger(username) {
return function(action) {
console.log(`[${new Date().toLocaleString()}] User ${username} performed action: ${action}`);
};
}
const auditLog = createAuditLogger('Alice');
auditLog('Logged in'); // 출력: [현재 시간] User Alice performed action: Logged in
위 예제에서 createAuditLogger
함수는 사용자 이름을 받아 감사 로그를 기록하는 클로저를 반환합니다. 반환된 클로저는 외부에서 전달된 사용자 이름과 수행된 작업을 기록합니다.
마무리
클로저는 외부 상태를 기억하고 이를 활용하여 다양한 기능을 구현할 수 있도록 해줍니다. 로깅과 감사 로깅 외에도 클로저를 활용하여 다른 유용한 기능을 구현할 수 있습니다.
이상으로 클로저를 활용한 로깅(log) 및 감사(audit) 기능 구현에 대해 알아보았습니다.
참고문헌:
- https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures