Skip to content

Gupuroom/log_module

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 

Repository files navigation

프로젝트 소개

log_moduleSpring Boot 기반 프로젝트의 로그 관리를 간소화하고, 환경별 설정, 일관된 로그 관리, 그리고 유지보수성 향상을 목표로 설계된 모듈입니다.

이 모듈은 다음과 같은 문제를 해결하는 데 초점을 맞춥니다:

  • 환경에 따른 로그 관리의 복잡성 해소
  • API 호출 추적 및 디버깅 편의성 증대
  • 초기 프로젝트 설정 효율성 강화

시스템 요구 사항:

Spring Boot 3 ⬆️, Java 17 ⬆️

📑 목차


1️⃣ 설치 및 적용

1. 서브모듈 설정

서브모듈은 다른 Git 저장소를 현재 프로젝트에 종속적으로 포함시키는 방법입니다.

log_module을 서브모듈로 설정하려면 아래 과정을 따릅니다.

git submodule add https://github.com/Gupuroom/log_module.git log_module
git submodule init
git submodule update

💡 참고: 다른 개발자가 이 프로젝트를 클론하면, 서브모듈 데이터가 포함되지 않을 수 있으니 아래 명령어를 실행해야 합니다.

git clone <repository_url> git submodule update --init --recursive

2. 멀티모듈 설정

멀티모듈 설정은 하나의 프로젝트가 아닌 여러 Module을 모아 구성한 프로젝트 구조를 말합니다.

여기서는 log_module을 Root 프로젝트에 모듈로서 포함하여, 의존성을 관리하고 log_module의 기능을 Root 프로젝트에서 활용할 수 있도록 설정하는 방법을 설명합니다.

1. settings.gradle 설정 추가

log_module을 프로젝트에 포함:

include ':log_module'

2. Root 프로젝트 build.gradle 설정 추가

allprojects {
    repositories {
        mavenCentral()  // 모든 모에서 Maven Central을 사용할 수 있게 설정
    }
}

dependencies {
    ...
    implementation project(':log_module') // log_module을 의존성에 추가
    ...
}

subprojects {
    apply plugin: 'java'  // Java 플러그인을 모든 서브모듈에 적용
    apply plugin: 'org.springframework.boot'  // Spring Boot 플러그인을 서브모듈에 적용
    apply plugin: 'io.spring.dependency-management'  // 의존성 관리를 위한 플러그인 적용
}

3. @SpringBootApplication 설정

멀티모듈 프로젝트에서는 @SpringBootApplication에서 각 모듈의 패키지를 스캔해야 합니다.

루트 프로젝트의 @SpringBootApplication을 아래와 같이 scanBasePackages를 정합니다:

@SpringBootApplication(scanBasePackages = {"com.example [본인 프로젝트 경로]", "com.log_module"})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

2️⃣ 로그 설정

application.yml 설정

이 모듈은 로깅 관련 설정을 YAML 파일을 통해 간편하게 구성할 수 있도록 지원합니다.

프로젝트의 루트 application.yml 파일에서 아래 설정값을 지정하여 로깅 동작을 제어할 수 있습니다.

값을 설정하지 않을 경우, **아래 값(기본값)**으로 동작합니다.

log-module:
  config:
    active: true # 동작 여부
    log-dir: logs # 로그 파일 저장 경로
    max-history: 30 # 로그 파일 저장 기한
    response-length-limit: 200 # ResponseBody 최대 길이

Spring Profiles 설정

이 모듈은 Spring Profiles를 통해 로깅 동작을 환경별로 제어할 수 있습니다.

Root 프로젝트의 application.yml에서 사용할 환경을 지정해야 하며,

1. profile 활성화 방법

Root 프로젝트의 application.yml에서 사용할 환경을 아래와 같이 지정합니다.

spring:
  profiles:
    active: local  # local, dev, real or prod 중 선택
  • 🔥지정하지 않을 경우: 기본적으로 콘솔 로깅만 동작합니다.
  • 지정할 수 있는 프로필: local, dev, real (또는 prod)

2. profile 별 로깅 동작

각 프로필에 따라 다음과 같이 로깅이 동작합니다.

상세 설정은 logback-spring.xml에서 확인할 수 있습니다.

local: [ 콘솔 로깅: ✅ 에러 로그 파일: ✅ API 로그 파일: ✅ ]

dev: [ 콘솔 로깅: ✅ 에러 로그 파일: ✅ API 로그 파일: ✅ 콘솔 로그 파일: ✅ ]

real OR prod : [ 에러 로그 파일: ✅ API 로그 파일: ✅ 콘솔 로그 파일: ✅ ]

3. 예시 설정

# Root 프로젝트의 application.yml
spring:
  profiles:
    active: dev  # dev 환경 활성화

log-module:
  config:
    active: true
    log-dir: logs
    max-history: 30
    response-length-limit: 200

3️⃣ 패키지 구조

log_module은 다음과 같은 패키지 구조입니다:

com.log_module
│
├── config
│   └── LoggingConfig                # Spring Boot 설정 클래스
│
├── logging
│   ├── filter
│   │   ├── ApiLogFilter          # API 로그 필터
│   │   ├── ErrorLogFilter        # ERROR 로그 필터
│   │   ├── RequestWrapperFilter  # Request Wrapper 필터
│   │   └── ResponseWrapperFilter # Response Wrapper 필터
│   ├── interceptor
│   │   └── LoggingInterceptor      # 로그 인터셉터
│   ├── type
│   │   └── MDCKey              # MDC Key 정의
│   └── wrapper
│       └── CustomHttpRequestWrapper  # 커스텀 HTTP 요청 래퍼
│       └── CustomHttpResponseWrapper # 커스텀 HTTP 응답 래퍼

4️⃣ 특징

log_module은 다양한 환경과 요구 사항에 맞춰 유연하게 설계된 모듈로, 다음과 같은 주요 특징을 제공합니다:

1. 환경별 설정

  • local, dev, real 환경에 따라 로그 출력
    • local: Console 출력
    • dev/real: Api 로그, Error 로그, Console 로그를 각각 별도의 파일로 분리 기록

2. Error 및 Api 로그 관리

  • Error 로그와 Api 로그를 분리하여 저장
    • Error 로그는 별도 파일에 기록하여 디버깅과 문제 추적이 용이
    • API 로그는 traceId를 포함해 호출 흐름을 명확히 추적 가능

3. 효율적인 로그 파일 관리

  • 로그 파일을 일별로 분리하고, 자동으로 압축 및 보관일 설정
  • 기본적으로 30일간 보관하며, yml 파일에서 보관 기간 변경 가능

4. 최소한의 의존성

  • Spring Boot 프로젝트에서 별도의 복잡한 설정 없이 손쉽게 적용 가능
  • 단순한 구조로 설계되어, 다른 프로젝트에서도 재사용 가능

5. 추적 가능한 API 호출

  • 각 API 호출 시 traceId를 기록하여 디버깅 및 에러 발생 시 관련 로그 검색 용이
  • 에러 발생 시 traceId를 통해 연관된 로그 추적

6. 테스트 지원

  • 기본적으로 제공되는 TestController 를 통해, 모듈 테스트 및 검증이 용이

이 모듈은 단순히 로그를 기록하는 기능뿐 아니라, 개발 및 운영 환경에서 로그 관리를 체계적으로 할 수 있도록 설계되었습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages