Skip to Content
Suffering builds character
아카이브20.spring Hateoas스프링부트3.스프링 부트 핵심 특징9.스프링 부트 내 의존성 변경 이슈

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. 해결 방법
  1. 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>
  1. 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