카테고리 없음

로그에 대한 간단한 정리

책다니엘 2025. 3. 28. 17:58

실무용 로그 전략 핵심 요약

 

전략 목적
로그 레벨 분리 정보 vs 문제를 명확히 구분
로그 포맷 통일 로그 분석 도구와 연동 가능하게
요청 단위 추적 한 요청의 흐름을 모두 추적
민감 정보 제거 개인정보 보호 및 보안
외부 전송 (ELK 등) 중앙 로그 수집 및 검색
파일 회전 및 압축 디스크 절약 + 이력 보존

 

🔹 1. 로그 레벨 전략

레벨 사용 예시
TRACE 진짜 미세한 디버깅 (루프 내부 등)
DEBUG 내부 상태 확인 (요청 파라미터, 쿼리 등)
INFO 정상 흐름 기록 (로그인 성공, 주문 완료 등)
WARN 문제 가능성 (재시도 발생, 응답 지연 등)
ERROR 예외 발생, 서비스 실패 등 (장애 분석의 핵심)

🧠 운영 환경에서는 INFO, WARN, ERROR 중심으로 사용
📦 로그 분석 도구에서 레벨별 필터링 가능해야 함


🔹 2. 공통 로그 포맷 지정 (JSON, 텍스트 등)

예시 포맷 (텍스트)

[2025-03-28 10:12:45.678] [INFO ] [OrderService] [orderId=12345 userId=7] 주문 생성 완료

예시 포맷 (JSON)

{
  "timestamp": "2025-03-28T10:12:45.678Z",
  "level": "INFO",
  "service": "order-service",
  "message": "주문 생성 완료",
  "orderId": 12345,
  "userId": 7,
  "traceId": "abc123"
}

💡 ELK, CloudWatch, Datadog 등과 연동하려면 **구조화된 로그(JSON)**가 유리합니다.


🔹 3. 요청 단위 추적 (트레이싱, Mapped Diagnostic Context)

  • 하나의 요청이 어떤 로그들을 남겼는지 추적하려면 TraceId, RequestId, userId 같은 걸 로그에 포함시켜야 함
  • Spring Boot에서는 [MDC (Mapped Diagnostic Context)]를 사용해서 해결 가능
import org.slf4j.MDC;

MDC.put("traceId", "abc123");
log.info("상품 조회 요청");
MDC.clear(); // 꼭 지워줘야 다른 요청에 영향 X

📌 Spring Cloud Sleuth, Zipkin, OpenTelemetry 등을 함께 쓰면 자동 추적 가능!


🔹 4. 민감 정보 로깅 금지

절대 로그에 담으면 안 되는 정보:

  • 비밀번호, 주민번호, 카드번호, 계좌번호
  • 인증 토큰, 세션 ID, 쿠키

✅ 가능하면 로그 필터 설정 (LogFilter, AOP 등)으로 필터링 처리


🔹 5. 로그 파일 전략 (회전 + 압축 + 보관)

Logback 설정 예:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>
  • 매일 새 파일 생성
  • 압축 보관 (.zip)
  • 30일 지나면 삭제

🔹 6. 중앙 로그 수집 (ELK, CloudWatch, Grafana Loki)

서버 여러 대의 로그를 하나의 대시보드에서 검색, 분석

  • ELK (Elasticsearch + Logstash + Kibana) → 실시간 분석
  • Grafana Loki → 로그 중심 시각화
  • AWS CloudWatch Logs → 클라우드 환경에 적합
  • 로그는 Logstash, Fluentd, Filebeat로 수집

🔹 7. AOP 기반 요청-응답 로그 남기기

@Around("execution(* com.myapp.controller..*(..))")
public Object logRequest(ProceedingJoinPoint joinPoint) throws Throwable {
    String traceId = UUID.randomUUID().toString();
    MDC.put("traceId", traceId);

    log.info("→ {} called with {}", joinPoint.getSignature(), Arrays.toString(joinPoint.getArgs()));
    Object result = joinPoint.proceed();
    log.info("← {} returned {}", joinPoint.getSignature(), result);

    MDC.clear();
    return result;
}

 


✅ 실무용 로그 전략 정리 표

항목 전략
로그 레벨 개발은 DEBUG, 운영은 INFO 이상
포맷 통일된 포맷 (JSON 또는 표준 텍스트)
요청 추적 traceId, MDC, Sleuth, Zipkin
보안 민감 정보 로그 금지, 마스킹
저장 로그 파일 회전 + 압축 + 보관 기간 설정
분석 ELK, Grafana, CloudWatch 연동
자동화 AOP로 HTTP 요청/응답 자동 로그 남기기