9.스프링 부트 내 의존성 변경 이슈
1. 스프링 부트가 기본으로 설치하여 제공하는 라이브러리
스프링 부트는 웹 개발에 필요한 여러 의존성들 및 각각에 대한 구현체를 직접 선택하여 기본으로 제공하고 있음
1-1. 데이터베이스 커넥션 풀 라이브러리 - HikariCP
그 외에 커넥션 풀에 대한 다른 라이브러리 - Apache DBCP 등
1-2. 로깅 라이브러리 - Logback
그 외 로깅에 대한 다른 라이브러리 - Log4j2
1-3. JSON, XML 등의 직렬화를 위한 마샬링/언마샬링(Marshalling, UnMarshalling) 라이브러리 - Jackson
그 외 직렬화에 대한 다른 라이브러리 - Gson
1-1. 스프링 부트가 기본으로 설치한 로깅 라이브러리
스프링 부트가 기본으로 설치한 라이브러리들은 IntelliJ IDE 내 External Libraries에서 확인 가능
의존성 폴더 구조
Maven: ch.qos.logback:logback-classic:1.2.11/
logback-core-1.2.11.jar/
META-INF/
maven.ch.qos.logback.logback-classic/
pom.xml
Maven: org.springframework.boot:spring-boot-starter-logging:2.7.6
// ...logback-classic 내부의 pom.xml을 열어보면 아래와 같은 코드를 확인할 수 있음
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-parent</artifactId>
<version>1.2.11</version>
</parent>
<artifactId>logback-classic</artifactId>
<packaging>jar</packaging>
<name>Logback Classic Module</name>
<description>logback-classic module</description>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-ext</artifactId>
<version>${slf4j.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.cal10n.plugins</groupId>
<artifactId>maven-cal10n-plugin</artifactId>
<version>${cal10n.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<type>test-jar</type>
<version>${slf4j.version}</version>
<scope>test</scope>
</dependency>
</dependencies>2. 구현체를 변경해야 하는 요구사항
2-1. 요구사항
이처럼 스프링 부트에서는 로깅에 대한 구현체로 Logback을 기본으로 제공하고 있는데, 만약 팀 개발간 요구사항에 의해 Logback이 아닌 Log4j2 구현체로 변경해야 할 경우 어떻게 해야할지?
2-2. 해결 방법
- spring-boot-starter-logging 의존 관계에서 배제(Exclude) 후 Log4j2 스타터 의존 관계를 추가
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>- log4j2.xml 파일 생성 후 설정 파일을 기반으로 동작하는지 테스트
log4j2 구현체를 사용한 로깅 처리 옵션 설정 파일은 log4j2.xml도 가능하지만 스프링에서는 내부적으로 log4j2-spring.xml을 우선적으로 참고하기 때문에 스프링 부트 애플리케이션에서 사용하는 경우에는 log4j2-spring.xml을 사용하는 것을 권장하고 있음
3. 추가 실습
application.properties나 application.yml 파일을 이용하여 아래의 로깅 옵션들을 추가하여, 애플리케이션이 추가한 옵션들 동작하도록 적용 및 테스트
3-1. 로그의 출력 포맷을 변경할 수 있는 옵션 추가 후 테스트
출력 포맷은 자유롭게 작성
3-2. 로그를 파일 형태로 출력할 수 있도록 옵션 추가 후 테스트
3-3. 로그 파일이 생성되는 디렉토리 경로를 별도로 지정하는 옵션 추가 후 해당 경로에 로그 파일이 생성되는지 테스트
3-4. 로그 롤링(Log rolling)에 대해 검색 후 적절한 로그 파일의 사이즈(size)와 파일의 보관 기간 등에 대해 생각해보기
Last updated on