11---
22layout : post
3- title : " Spring Boot 멀티 모듈에서 logback 환경별 설정하기 "
3+ title : " 1편. Spring Boot 환경의 Multi Module에서 logback 환경별 설정하기 "
44categories : SpringBoot
55author : devFancy
66---
@@ -9,12 +9,15 @@ author: devFancy
99
1010## Prologue
1111
12- * 멀티 모듈 프로젝트로 전환하면서 환경별 로그 설정의 필요성을 절실히 느꼈다 .
12+ * 멀티 모듈 프로젝트로 전환하면서 환경별 로그 설정의 필요성을 절실히 느꼈습니다 .
1313
14- * 운영 환경에서는 로그의 형식과 수준이 서비스 안정성과 직결되기 때문에 더욱 중요하다 .
14+ * 운영 환경에서는 로그의 형식과 수준이 서비스 안정성과 직결되기 때문에 더욱 중요합니다 .
1515
16- * 이번 글은 실제 운영 환경에서 적용하는 것 보다는 멀티 모듈 구조에서 환경별로 ` logback.xml ` 을 구성한 경험을 공유하기 위해 작성했다 .
16+ * 이번 글은 실제 운영 환경에서 적용하는 것 보다는 멀티 모듈 구조에서 환경별로 ` logback.xml ` 을 구성한 경험을 공유하기 위해 작성했습니다 .
1717
18+ > 관련 포스팅
19+
20+ * [ 2편. Spring Boot에서 요청 흐름 추적: Logging Filter와 traceId 적용기] ( https://devfancy.github.io/SpringBoot-Logging-Filter/ )
1821
1922---
2023
@@ -23,7 +26,7 @@ author: devFancy
2326
2427> 이 글에서 다루는 모든 코드는 [ Github] ( https://github.com/devFancy/kotlin-java-playground/tree/main/springboot-java-practice ) 에서 확인하실 수 있습니다.
2528>
26- > 멀티 모듈 구성에 대한 자세한 설명은 [ README.md] ( https://github.com/devFancy/kotlin-java-playground/blob/main/springboot-java-practice/README.md ) 를 참고해 주시면 감사하겠습니다 .
29+ > 멀티 모듈 구성에 대한 자세한 설명은 [ README.md] ( https://github.com/devFancy/kotlin-java-playground/blob/main/springboot-java-practice/README.md ) 를 참고해 주시기 바랍니다 .
2730
2831### 기술 스택
2932
@@ -34,15 +37,40 @@ author: devFancy
3437
3538### 멀티 모듈 구조
3639
37- * ` core:core-api ` : 애플리케이션 실행 및 API 계층을 담당하는 메인 모듈이다. 다른 내부 모듈들과 연결되어 실제 서비스를 구동한다.
40+ (시간이 지남에 따라 모듈 구조가 변할 수 있습니다)
41+
42+ * ` core:core-api ` : 애플리케이션 실행 및 API 계층을 담당하는 메인 모듈입니다. 다른 내부 모듈들과 연결되어 실제 서비스를 구동합니다.
43+
44+ * ` core:core-enum ` : core-api 전반에서 공통으로 사용하는 Enum(열거형) 을 정의한 모듈입니다. 도메인 간 중복을 방지하고 일관된 값을 유지하기 위해 별도로 분리하여 관리합니다.
45+
46+ * ` support:logging ` : 공통적인 로깅 설정을 담당하는 모듈이다. 공통적인 로깅 설정을 담당하는 모듈입니다. 여러 서비스에서 일관된 로그 포맷을 적용할 수 있으며, 필요 시 Sentry 연동도 고려할 수 있습니다.
47+
48+ ### 모듈 연동 설정
49+
50+ 멀티 모듈 프로젝트에서 ` support:logging ` 모듈의 설정을 core-api 모듈에 적용하기 위해 다음 설정이 필요합니다.
51+
52+ ` core-api ` 모듈의 ` resources/application.yml ` 에 ` logging.yml ` 을 import 합니다.
3853
39- * ` core:core-enum ` : core-api 전반에서 공통으로 사용하는 Enum(열거형) 을 정의한 모듈이다. 도메인 간 중복을 방지하고, 일관된 값을 유지하기 위해 별도 분리하여 관리한다.
54+ ``` yaml
55+ spring :
56+ config :
57+ import :
58+ - logging.yml
59+ ` ` `
4060
41- * ` support:logging ` : 공통적인 로깅 설정을 담당하는 모듈이다. 여러 서비스에서 일관된 로그 포맷을 적용할 수 있으며, 필요 시 Sentry 연동도 고려할 수 있다.
61+ 그리고 core-api 모듈의 build.gradle에 support:logging 모듈을 의존성으로 추가합니다.
62+
63+ ` ` ` groovy
64+ dependencies {
65+ implementation project(":support:logging")
66+ }
67+ ```
68+
69+ 이렇게 설정하면 ` support:logging ` 모듈에서 정의한 ` logback.xml ` 파일이 core-api 모듈에서 적용됩니다.
4270
4371## logback.xml 구성
4472
45- 환경별 로깅 설정은 다음과 같이 별도의 XML 파일로 분리되어 있다 .
73+ 환경별 로깅 설정은 다음과 같이 별도의 XML 파일로 분리되어 있습니다 .
4674
4775> 배포 단계 흐름: ` local ` (개인 개발) -> ` dev ` (통합 개발) -> ` staging ` (운영 전 최종 점검) -> ` live ` (=prod, 실제 서비스 운영)
4876
@@ -54,26 +82,26 @@ support/logging/src/main/resources/logback/
5482└── logback-staging.xml
5583```
5684
57- 그리고 ` logging.yml ` 파일에서 다음처럼 설정되어 있어, ` spring.profiles.active ` 에 따라 자동으로 해당 설정 파일을 불러오게 된다 .
85+ 그리고 ` logging.yml ` 파일에서 다음처럼 설정되어 있어, ` spring.profiles.active ` 에 따라 자동으로 해당 설정 파일을 불러오게 됩니다 .
5886
5987``` yaml
6088logging.config : classpath:logback/logback-${spring.profiles.active}.xml
6189` ` `
6290
63- 이 구조를 통해 각 환경의 로그 패턴, 출력 대상(Appender), 로깅 레벨 등을 유연하게 관리할 수 있다 .
91+ 이 구조를 통해 각 환경의 로그 패턴, 출력 대상(Appender), 로깅 레벨 등을 유연하게 관리할 수 있습니다 .
6492
6593
6694## logback.xml 구체적으로 살펴보기
6795
6896### 공통 구조
6997
70- 모든 환경은 아래 공통 구성을 따른다 .
98+ 모든 환경은 아래 공통 구성을 따릅니다 .
7199
72100` ` ` xml
73101<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
74102```
75103
76- * Spring Boot가 제공하는 기본 색상 설정과 변수(%clr, ${level:-%5p} 등)를 포함한다 .
104+ * Spring Boot가 제공하는 기본 색상 설정과 변수(%clr, ${level:-%5p} 등)를 포함합니다 .
77105
78106``` xml
79107<appender name =" STDOUT" class =" ch.qos.logback.core.ConsoleAppender" >
@@ -86,11 +114,11 @@ logging.config: classpath:logback/logback-${spring.profiles.active}.xml
86114
87115* 콘솔 출력용 Appender
88116* UTF-8 인코딩 사용
89- * 각 환경에서 동일한 패턴을 사용하며 Appender만 다르게 구성할 수도 있다 .
117+ * 각 환경에서 동일한 패턴을 사용하며 Appender만 다르게 구성할 수도 있습니다 .
90118
91119### 로그 출력 패턴 예시
92120
93- 아래는 ` logback-local.xml ` 에서 사용한 로그 출력 패턴이다 .
121+ 아래는 ` logback-local.xml ` 에서 사용한 로그 출력 패턴입니다 .
94122
95123``` xml
96124<pattern >
@@ -105,36 +133,36 @@ logging.config: classpath:logback/logback-${spring.profiles.active}.xml
105133</pattern >
106134```
107135
108- * ` %clr(...) ` : Spring Boot에서 지원하는 색상 강조 기능으로 ` <include ...logback/defaults.xml> ` 을 통해 정의된다 .
136+ * ` %clr(...) ` : Spring Boot에서 지원하는 색상 강조 기능으로 ` <include ...logback/defaults.xml> ` 을 통해 정의됩니다 .
109137
110- * ` {faint} ` : 회색빛(faint) 으로 출력되며, 로그 가독성을 높이기 위한 장식적 용도이다. 중요도가 낮은 항목 (예: 시간, 구분자 등)에 자주 사용된다 .
138+ * ` {faint} ` : 회색빛(faint) 으로 출력되며, 로그 가독성을 높이기 위한 장식적 용도이다. 중요도가 낮은 항목 (예: 시간, 구분자 등)에 자주 사용됩니다 .
111139
112- * ` %d{HH:mm:ss.SSS} ` : 로그 발생 시간 (시:분:초.밀리초). 운영 환경에서는 날짜를 생략했다 .
140+ * ` %d{HH:mm:ss.SSS} ` : 로그 발생 시간 (시:분:초.밀리초). 운영 환경에서는 날짜를 생략했습니다 .
113141
114- * ` ${level:-%5p} ` : 로그 레벨(DEBUG, INFO, WARN, ERROR 등) 을 왼쪽 정렬 기준으로 ** 최소 너비 5칸** 으로 출력한다 . 가장 긴 로그 레벨인 ERROR(5자)에 맞춰 가독성을 높이기 위해 보통 5자 폭으로 설정한다 .
142+ * ` ${level:-%5p} ` : 로그 레벨(DEBUG, INFO, WARN, ERROR 등) 을 왼쪽 정렬 기준으로 ** 최소 너비 5칸** 으로 출력합니다 . 가장 긴 로그 레벨인 ERROR(5자)에 맞춰 가독성을 높이기 위해 보통 5자 폭으로 설정합니다 .
115143
116- * ` %X{traceId}, %X{spanId} ` : MDC에 저장된 ` traceId ` 와 ` spanId ` 를 각각 32칸, 16칸 너비로 출력한다. 값이 없을 경우 빈 값으로 대체된다 .
144+ * ` %X{traceId}, %X{spanId} ` : MDC에 저장된 ` traceId ` 와 ` spanId ` 를 각각 32칸, 16칸 너비로 출력한다. 값이 없을 경우 빈 값으로 대체됩니다 .
117145 주로 Spring Cloud Sleuth, Zipkin 등과 연동할 때 사용되며, 분산 트레이싱을 위한 정보로 활용된다.
118146
119- * ` %logger{39} ` : 로그를 발생시킨 클래스명을 최대 39자까지 출력한다 . 너무 긴 클래스명은 생략되고, 필요한 경우 패키지명 없이 ` logger{0} ` 과 같이도 설정할 수 있다 .
147+ * ` %logger{39} ` : 로그를 발생시킨 클래스명을 최대 39자까지 출력합니다 . 너무 긴 클래스명은 생략되고, 필요한 경우 패키지명 없이 ` logger{0} ` 과 같이도 설정할 수 있습니다 .
120148
121- * ` %m%n ` : 로그 메시지를 출력하고 줄 바꿈을 수행한다 .
149+ * ` %m%n ` : 로그 메시지를 출력하고 줄 바꿈을 수행합니다 .
122150
123- * ` %wEx ` : 예외가 있을 경우, 간략한 요약 정보만 1~ 2줄로 출력한다. 전체 stack trace는 출력하지 않아 운영 환경에서 로그를 깔끔하게 유지하는 데 유리하다 .
151+ * ` %wEx ` : 예외가 있을 경우, 간략한 요약 정보만 1~ 2줄로 출력한다. 전체 stack trace는 출력하지 않아 운영 환경에서 로그를 깔끔하게 유지하는 데 유리합니다 .
124152
125153## 실행 및 로그 확인
126154
127- ` local ` 환경에서 애플리케이션을 실행하면, 아래와 같은 로그를 확인할 수 있다 .
155+ ` local ` 환경에서 애플리케이션을 실행하면, 아래와 같은 로그를 확인할 수 있습니다 .
128156
129157> 실행 결과 예시
130158
131159![ ] ( /assets/img/springboot/springboot-multi-module-logback-xml.png )
132160
133- 위 로그에서 traceId, spanId 값이 비어 있는 이유는 ** Spring Cloud Sleuth 등 분산 추적 라이브러리를 적용하지 않았기 때문** 이다 .
161+ 위 로그에서 traceId, spanId 값이 비어 있는 이유는 ** Spring Cloud Sleuth 등 분산 추적 라이브러리를 적용하지 않았기 때문** 입니다 .
134162
135- 이 값을 출력하고 싶다면 Sleuth 또는 Micrometer Tracing 등의 설정이 필요하다 .
163+ 이 값을 출력하고 싶다면 Sleuth 또는 Micrometer Tracing 등의 설정이 필요합니다 .
136164
137- 또한 ` /api/log ` API 요청을 통해 다양한 로그 레벨의 로그를 출력해볼 수 있다 .
165+ 또한 ` /api/log ` API 요청을 통해 다양한 로그 레벨의 로그를 출력해볼 수 있습니다 .
138166
139167> ExamplePostController
140168
@@ -162,11 +190,13 @@ public class ExamplePostController implements ExamplePostControllerDocs {
162190
163191## Summary
164192
165- * 이번 글에서는 멀티 모듈 기반의 Spring Boot 프로젝트에서 환경별 ` logback.xml ` 을 어떻게 구성하고 적용할 수 있는지 정리했다.
193+ 이번 글에서는 멀티 모듈 기반의 Spring Boot 프로젝트에서 환경별 ` logback.xml ` 을 어떻게 구성하고 적용할 수 있는지 정리해보았습니다.
194+
195+ 특히 ` %clr ` , ` ${level:-%5p} ` , ` %X{traceId} ` 등 로그 패턴 설정에 사용되는 문법을 하나씩 설명하고, 실제 로그 출력 결과를 통해 그 효과를 확인하실 수 있었습니다.
166196
167- * 특히 ` %clr ` , ` ${level:-%5p} ` , ` %X{traceId} ` 등 로그 패턴 설정에 사용되는 문법을 하나씩 설명하고, 실제 로그 출력 결과를 통해 그 효과를 확인했다 .
197+ 다음 포스팅에서는 Spring Filter를 활용한 HTTP 요청/응답 로그 수집에 대해 작성해볼 예정입니다 .
168198
169- * 다음 글에서는 Spring Filter를 활용한 HTTP 요청/응답 로그 수집과, 이를 기반으로 Sentry 혹은 Grafana 등 외부 모니터링 도구와 연동하는 방법을 이어서 소개할 예정이다 .
199+ 지금까지 읽어주셔서 감사합니다 .
170200
171201## References
172202
0 commit comments