[Spring Boot] 로그 파서 + 통계 API 구현 (Spring Batch & 정규식)

Nolrimbo·2025년 8월 25일

포트폴리오

목록 보기
9/21

📂 개요

이번에는 로그 파일을 정규식으로 파싱 → DB 저장 → 통계 API 제공까지 한 번에 구현했습니다.
Spring Boot 3.3.x + Spring Batch 5.x + JPA + MariaDB 기반으로 진행했으며, 실제 로그를 통계/모니터링할 수 있도록 확장할 수 있습니다.


⚙️ 기술 스택

  • Spring Boot 3.3.x
  • Spring Batch 5.x
  • Spring Data JPA
  • MariaDB
  • Lombok
  • Swagger (springdoc-openapi)

🏗️ 주요 기능

  1. 정규식 기반 로그 파싱

    • FlatFileItemReader + 커스텀 LogLineMapper
    • 2025-08-25 19:42:11.123 INFO [...] ... 형태 로그를 엔티티로 변환
  2. Batch Job 구성

    • Reader → Processor → Writer → DB 저장

    • @StepScope + JobParameters 활용해 파일 경로/앱명/호스트명 동적 주입

    • 수동 실행:

      POST /batch/trigger?file=C:/logs/app.log&app=core&host=devpc
  3. DB 저장

    • LogEntry 엔티티 설계
    • 로그 시간(ts), 레벨(level), 스레드명, 로거명, 메시지, 에러코드, 상세정보 저장
  4. 통계 API

    • 레벨별 건수: /api/stats/levels
    • 일자별 건수: /api/stats/daily
    • Top-N 에러코드: /api/stats/top-errors
  5. 날짜 파라미터 유연성

    • 2025-08-25 또는 2025-08-25T00:00:00 둘 다 허용되도록 공용 파서 적용

🖼️ Swagger 확인


📊 실행 예시

로그 샘플

2025-08-25 19:42:11.123 INFO [main] c.d.l.SampleService - Start processing
2025-08-25 19:42:12.987 WARN [worker-1] c.d.l.Parser - Slow response code=R001 msg=Too slow
2025-08-25 19:42:15.555 ERROR [worker-2] c.d.l.Parser - Parsing failed code=E400 msg=Bad token

Batch 실행

POST http://localhost:8080/batch/trigger?file=C:/logs/app.log&app=core&host=devpc

통계 API

GET /api/stats/levels?from=2025-08-25&to=2025-08-26
응답: { "INFO": 1, "WARN": 1, "ERROR": 1 }

🚀 확장 아이디어

  • 스택트레이스 멀티라인 묶기
  • 파일 중복 방지(해시/오프셋 기록)
  • 스케줄링 (매일 자동 실행)
  • 프론트 대시보드 (Recharts 등으로 시각화)

✨ 마무리

Spring Batch 5.x에서는 JobBuilderFactory, StepBuilderFactory가 사라졌고,
JobRepository/StepBuilder/@StepScope 기반으로 작성해야 하는 점이 인상적이었습니다.

실무에서 로그 모니터링/통계를 직접 만들어보니 확장성이 큰 패턴이라,
앞으로 다른 배치성 처리에도 적용할 수 있을 것 같습니다.


✅ 참고

profile
Java 개발자 | 사이드 프로젝트 마니아 | GPT 기반 자동화 툴 연구 중 기술 리뷰, 개발일지

0개의 댓글