기술과 산업/언어 및 프레임워크

Spring Boot 시리즈 26편 – 운영 환경 로그 전략: Logback, 로그 분리, Cloud 환경 대응까지

B컷개발자 2025. 5. 5. 13:23
728x90
Spring Boot에서 Logback 기반의 로그 전략을 설계하는 방법을 설명합니다. 운영/스테이징 환경 로그 분리, 외부 로그 수집 시스템 연동, 클라우드 대응까지 실전 중심으로 정리했습니다.

 


 

Spring Boot 시리즈 26편 – 운영 환경 로그 전략: Logback, 로그 분리, Cloud 환경 대응까지

 

운영 중인 서비스에서 장애 원인을 파악하거나 사용자 행위를 추적하려면

정확하고 구조화된 로그 설계가 필요합니다.

이번 편에서는 Spring Boot 프로젝트에서의 로그 전략을 다음과 같은 구조로 설명합니다.

 

  1. Logback 설정 및 패턴 정리
  2. 로그 레벨 분리 (dev/staging/prod)
  3. 파일 로그 vs 콘솔 로그
  4. 로그 파일 롤링/보존 정책
  5. 클라우드 로그 전송 (CloudWatch, ELK, Grafana Loki 등)

 


 

📌 1. 기본 로그 시스템 – Logback

 

Spring Boot는 기본적으로 Logback을 로그 구현체로 사용합니다.

 

 

logback-spring.xml 위치

src/main/resources/logback-spring.xml

Spring Boot에서는 logback.xml 대신 반드시 logback-spring.xml을 사용해야

spring.profiles.active에 따라 설정 분기가 가능합니다.

 


 

✅ 2. 로그 패턴 설정 예시 (JSON, 컬러 포함)

<configuration>
    <property name="LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

 

  • %d, %thread, %logger, %msg 등으로 구성
  • dev 환경에서는 색상(ColorPatternLayout) 적용도 가능

 


 

⚙️ 3. 환경별 로그 레벨 분리 (Profile 분기)

<springProfile name="dev">
    <logger name="com.myapp" level="DEBUG"/>
    <root level="DEBUG"/>
</springProfile>

<springProfile name="prod">
    <logger name="com.myapp" level="INFO"/>
    <root level="WARN"/>
</springProfile>

 

  • 개발 환경은 최대한 상세히(DEBUG)
  • 운영 환경은 중요 경고(WARN) 이상만 출력

 


 

📁 4. 파일 로그 저장 및 롤링

<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</fileNamePattern>
        <maxHistory>14</maxHistory>
    </rollingPolicy>

    <encoder>
        <pattern>${LOG_PATTERN}</pattern>
    </encoder>
</appender>

 

  • 날짜별 로그 분할 (Rolling)
  • 최대 보존 기간 설정 (maxHistory)
  • 운영 환경에서는 file 로그 필수

 


 

☁️ 5. 클라우드 환경 로그 대응 전략

환경로그 처리 방식

AWS EC2 CloudWatch Agent → log file 수집
AWS ECS / Fargate FireLens, Fluent Bit → CloudWatch/ELK
GCP Cloud Run StackDriver에 자동 전송 (STDOUT)
K8s 환경 Loki + Promtail → Grafana 대시보드 연계
외부 연동 Fluentd / Logstash → Elasticsearch 저장 후 Kibana 시각화

 

 


 

📦 6. JSON 로그 출력 예시

 

외부 로그 분석 도구를 사용할 경우 구조화된 JSON 로그가 유리합니다.

<encoder class="net.logstash.logback.encoder.LogstashEncoder" />

Gradle 의존성:

implementation 'net.logstash.logback:logstash-logback-encoder:7.3'

출력 예시:

{
  "@timestamp": "2025-04-27T01:23:45.678Z",
  "level": "INFO",
  "logger_name": "com.myapp.api.UserController",
  "message": "유저 정보 조회 성공",
  "thread_name": "http-nio-8080-exec-3"
}

 

 


 

🧠 실무 설계 팁

항목전략

로그 위치 운영: /var/log/myapp/app.log, 개발: ./logs/
로그 용량 하루 1개 파일, 최대 7~14일 보관
민감 정보 로그에 이메일, 비밀번호 등 개인식별정보 기록 금지
검색성 JSON 포맷 + 인덱싱 시스템 (ELK, Loki 등) 적극 활용
실시간 모니터링 Grafana, Kibana로 대시보드 구성

 

 


 

✅ 마무리 요약

항목요약

기본 구현체 Logback 기반, logback-spring.xml 사용
출력 대상 콘솔, 파일, JSON 로그로 다중 설정
환경별 설정 springProfile으로 dev/prod 별 로그 분리
클라우드 전송 CloudWatch, StackDriver, Loki 등 연동 고려
확장 전략 외부 수집기(Fluentd)와 시각화 도구(Grafana) 결합

 

 


 

📌 다음 편 예고

 

Spring Boot 시리즈 27편: 다국어(i18n) 지원 전략 – 메시지 번들, 리소스 자동 로딩, 언어 감지까지

728x90