제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
스프링 정리를 위한 포스팅입니다.
해당 포스팅은 @Slf4j 정리입니다.
로그가 뭐야?
로그(Log)는 애플리케이션이 실행되면서 발생하는 이벤트, 오류, 상태 정보 등을 기록하는 중요한 데이터입니다.
프로그램의 실행 흐름을 추적하고, 문제 발생 시 원인을 분석하는 데 필수적인 요소입니다.
로그가 중요한 이유
- 디버깅 & 문제 해결
- 애플리케이션에서 오류가 발생했을 때, 로그를 통해 원인을 분석하고 해결할 수 있습니다.
- 예를 들어, 사용자가 API 요청을 보냈을 때 응답이 늦거나 실패하는 경우 로그를 확인하면 어느 단계에서 문제가 발생했는지 파악할 수 있습니다.
- 운영 모니터링 & 시스템 분석
- 운영 중인 서비스의 성능을 추적하고, 장애 발생 가능성을 미리 감지할 수 있습니다.
- 로그 데이터는 시스템의 상태를 분석하고 최적화하는 데 중요한 역할을 합니다.
- 보안 & 감사(Audit Logging)
- 사용자 활동 기록(로그인, 결제, 데이터 변경 등)을 남겨 보안 감사(Audit) 및 문제 발생 시 추적할 수 있습니다.
- 보안 로그는 악의적인 접근을 감지하고, 사이버 공격을 방어하는 데 사용됩니다.
로그를 남기는 방법
- Java에서는 System.out.println()을 사용하여 로그를 출력할 수 있지만, 이는 성능 저하 및 유지보수 어려움 등의 단점이 있습니다.
- 대신, Slf4j와 같은 로깅 프레임워크를 활용하면 효율적이고 확장성 있는 로깅 시스템을 구축할 수 있습니다.
Slf4j란?
Slf4j(Simple Logging Facade for Java)는 Java 애플리케이션에서 로깅을 위한 추상화 인터페이스입니다.
쉽게 말해, 특정 로깅 프레임워크(Logback, Log4j 등)에 종속되지 않고 Slf4j를 통해 원하는 로깅 시스템을 선택하여 사용할 수 있도록 도와주는 역할을 합니다.
💡 Slf4j는 로깅을 위한 "추상화 인터페이스"이며, 실제 로깅은 Logback, Log4j와 같은 구현체가 수행합니다.
Slf4j와 Logback 관계
Slf4j | 로깅 추상화 인터페이스 (로깅 방식만 제공, 직접 로그 출력 X) |
Logback | Slf4j의 기본 로깅 구현체 (Spring Boot 기본 제공) |
Log4j | 별도의 로깅 프레임워크 (Slf4j와 함께 사용할 수 있음) |
Slf4j를 사용하는 이유
- 특정 로깅 프레임워크에 종속되지 않음
- Slf4j를 사용하면 코드 수정 없이 Logback, Log4j 등 원하는 로깅 프레임워크를 쉽게 교체할 수 있습니다
- System.out.println()보다 성능 우수
- System.out.println()은 단순한 콘솔 출력이지만, Slf4j는 다양한 출력 대상(파일, DB, 원격 서버 등)에 기록할 수 있습니다
- System.out.println()은 실행 속도가 느리지만, Slf4j는 비동기 로깅 및 레벨 제어가 가능하여 성능 최적화에 유리합니다.
- 로그레벨 지원
- Slf4j는 로그의 중요도에 따라 TRACE, DEBUG, INFO, WARN, ERROR 등의 로그 레벨을 제공하여 필요한 정보만 기록할 수 있도록 합니다.
로그 레벨설명
로그 레벨 | 설명 |
TRACE | 가장 상세한 디버깅 로그 |
DEBUG | 개발 시 필요한 디버깅 정보 |
INFO | 운영 시 중요한 정보 로그 |
WARN | 경고 로그 (문제 가능성 존재) |
ERROR | 심각한 오류 발생 로그 |
Slf4j 사용법
Lombok에서는 @Slf4j를 지원하여 간편하게 사용할 수 있습니다.
@Slf4j는 AOP(Aspect-Oriented Programming) 기능을 활용하여 자동으로 Logger 객체를 생성해줍니다.
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Slf4j // Logger 객체 자동 생성
@RestController
public class LogController {
@GetMapping("/log")
public String logExample(@RequestParam String message) {
log.info("INFO 로그: {}", message);
log.warn("WARN 로그: {}", message);
log.error("ERROR 로그: {}", message);
return "로그 출력 완료!";
}
}
결과


Slf4j는 Spring Boot에서 로깅을 더욱 유연하고 효율적으로 관리할 수 있도록 도와주는 필수적인 라이브러리입니다.
로깅은 디버깅, 모니터링, 보안, 성능 분석 등 여러 측면에서 필수적인 요소이므로, 올바르게 활용하는 것이 중요합니다.
이제 프로젝트에서 Slf4j를 적극 활용하여 가독성 높은 로그 관리를 해보세요!
코드
'spring > 어노테이션 정리' 카테고리의 다른 글
[Spring] 직렬화, 역직렬화 관련 어노테이션 정리 (0) | 2025.03.11 |
---|---|
[Spring] @Controller @Service @Repository에 대해 알아보자! (1) | 2024.11.25 |
[Spring] @Lombok에 대해 알아보자! (0) | 2024.11.24 |