[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) 기능 구현에 대해 알아보았습니다.

참고문헌: