우리는 CGV 영화 데이터를 정기적으로 크롤링하는 자동화된 시스템을 개발했다. 크롤링 스케줄링 기능을 구현한 후 다음 단계로 시스템의 성능과 상태를 실시간으로 모니터링 시스템을 통합하기로 결정했다. Logback과 SLF4J를 통한 로깅 기능 강화는 크롤링 및 스케줄링 과정의 모니터링을 효과적으로 수행하게 할 것이며, 이 글에서는 로깅 시스템 도입 이유와 Logback과 SLF4J를 선택한 이유와 이들이 어떻게 통합적으로 구현되어 우리의 시스템에서 작동하는지 설명한다.
로깅은 시스템의 동작 상태를 기록하고, 예상치 못한 문제 또는 예외 상황을 신속하게 파악할 수 있게 해준다. 특히, 웹 크롤링과 같이 외부 시스템에 의존적인 작업을 자동화할 때, 로깅은 작업의 성공 여부, 에러 발생 시점 및 원인 분석에 필수적이다. 따라서, 로깅 시스템을 효과적으로 구현하는 것은 운영의 효율성을 높이고, 시스템 유지보수 비용을 절감하는 데 크게 기여한다.
Logback은 SLF4J의 네이티브 구현으로, 성능과 유연성이 뛰어나며, SLF4J는 Java의 다양한 로깅 프레임워크 간의 호환성을 제공한다. 이 조합은 다음과 같은 이유로 선택되었다:
로깅 구성 설정
logback.xml
)에서 로거, 어펜더, 필터 등을 정의하여, 로그의 출력 레벨 및 형식을 설정한다. 예를 들어, DEBUG 레벨에서는 시스템의 상세한 동작을 로깅하고, ERROR 레벨에서는 예외 상황만 로깅한다.크롤링 작업 로깅
Quartz 스케줄러 로깅
줄링된 작업의 시작과 종료, 작업 실패 등을 로그로 남겨 시스템의 안정성을 감시한다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* LogbackConfig는 메시지 로깅을 위한 유틸리티 메서드를 제공합니다.
*/
public class LogbackConfig {
// LoggerFactory를 사용하여 com.topflix.config.LogbackConfig 클래스에 대한 Logger 인스턴스를 생성합니다.
private static final Logger logger = LoggerFactory.getLogger(LogbackConfig.class);
/**
* 정보 수준 메시지를 기록합니다.
* @param message 기록할 메시지
*/
public static void logInfo(String message) {
// 정보 수준(info)의 메시지를 기록합니다.
logger.info(message);
}
/**
* 예외가 있는 오류 수준 메시지를 기록합니다.
* @param message 기록할 메시지
* @param t 기록할 예외
*/
public static void logError(String message, Throwable t) {
// 예외와 함께 오류 수준(error)의 메시지를 기록합니다.
logger.error(message, t);
}
}
이 프로젝트를 통해 구축한 로깅 시스템은 크롤링과 스케줄링 작업의 투명성과 추적 가능성을 크게 향상시켰다. 앞으로도 이 시스템을 지속적으로 개선하여, 보다 신뢰할 수 있는 데이터 수집 환경을 구축해 나가겠다.