-
Spring Boot 시리즈 26편 – 운영 환경 로그 전략: Logback, 로그 분리, Cloud 환경 대응까지기술과 산업/언어 및 프레임워크 2025. 5. 5. 13:23728x90
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'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
NestJS 마스터 시리즈 10화. 미들웨어와 인터셉터 – 요청 흐름을 설계하는 법 (0) 2025.05.05 FastAPI 시리즈 6화 - Path, Query, Header, Cookie 파라미터 제대로 다루기 (0) 2025.05.05 전자정부 표준프레임워크 시리즈 4화 – 프로젝트 생성기 구조 분석: 자동 생성된 코드의 의미와 설계 철학 (1) 2025.05.05 Python 마스터 시리즈 5화 – 반복문 for, while 구조와 실전 패턴 (0) 2025.05.04 NestJS 마스터 시리즈 9화. 예외 처리 전략 – 오류는 숨기지 말고 설계하라 (0) 2025.05.04