기술과 산업/언어 및 프레임워크
Spring Boot 시리즈 26편 – 운영 환경 로그 전략: Logback, 로그 분리, Cloud 환경 대응까지
B컷개발자
2025. 5. 5. 13:23
728x90
Spring Boot에서 Logback 기반의 로그 전략을 설계하는 방법을 설명합니다. 운영/스테이징 환경 로그 분리, 외부 로그 수집 시스템 연동, 클라우드 대응까지 실전 중심으로 정리했습니다.
Spring Boot 시리즈 26편 – 운영 환경 로그 전략: Logback, 로그 분리, Cloud 환경 대응까지
운영 중인 서비스에서 장애 원인을 파악하거나 사용자 행위를 추적하려면
정확하고 구조화된 로그 설계가 필요합니다.
이번 편에서는 Spring Boot 프로젝트에서의 로그 전략을 다음과 같은 구조로 설명합니다.
- Logback 설정 및 패턴 정리
- 로그 레벨 분리 (dev/staging/prod)
- 파일 로그 vs 콘솔 로그
- 로그 파일 롤링/보존 정책
- 클라우드 로그 전송 (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