Spring에서 로깅이 필요한 이유와 SLF4J, Logback, Lombok 정리
Spring 기반 애플리케이션을 개발할 때는 System.out.println() 대신 로깅 프레임워크를 사용하는 것이 일반적입니다.
로깅이 필요한 이유
1. 운영 환경에서 디버깅
- 'System.out.println()'은 개발 중에는 간편하지만, 운영 서버에서는 로그 수준 조절, 저장, 관리가 어렵습니다.
- print와 log의 성능 수준도 매우 크게 차이가 나기 때문에 성능에도 큰 영향을 미칩니다.
- 로깅 프레임워크는 애플리케이션의 동작 흐름을 파악하고 문제를 분석하는 데 필수적입니다.
2. 로그 레벨 제어
- TRACE, DEBUG, INFO, WARN, ERROR 등 다양한 로그 레벨을 제공
- 환경에 따라 로그 수준을 조절할 수 있어 불필요한 로그를 줄이고 필요한 로그만 출력할 수 있습니다
3. 파일 저장 및 로그 관리
- 로그를 파일로 저장하거나 날짜별로 분할하여 관리할 수 있음
- 모니터링 도구와 연동하여 운영 상태를 시각화하는 데도 활용됩니다
4. 성능 최적화
- 고성능 로깅 프레임워크는 비동기 처리, 버퍼링 등을 통해 성능 저하를 최소화합니다
SLF4J란?
SLF4J(Simple Logging Facade for Java)는 로깅의 추상화 계층을 제공합니다.
SLF4J 자체는 로깅을 출력하지 않으며, Logback이나 Log4j 같은 실제 로깅 구현체와 연동됩니다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
private static final Logger log = LoggerFactory.getLogger(MyService.class);
public void process() {
log.info("Processing started");
log.debug("Debug details here");
log.error("An error occurred");
}
}
Lombok을 사용한 코드 예시
@Slf4j
@Service
public class NoteService {
public void saveNote(String content) {
log.info("Saving note: {}", content);
log.debug("Note content length: {}", content.length());
}
}
log.info("Saving note: " + content) 형식이 아닌 log.info("Saving note: {}" + content) 형식을 사용해야합니다.
log.info("Saving note: " + content) 형식을 사용하게 되면,
"Saving note: " 문자열에 content가 연산이 되는 과정이 포함되어버리기 때문에
오버헤드가 발생할 수 있으니 주의해야합니다.
'BackEnd' 카테고리의 다른 글
데이터베이스와 CRUD (JPA 개념) (0) | 2025.04.04 |
---|---|
스프링 빈(Spring Bean)과 의존성 주입(DI: Dependency Injection) (0) | 2025.03.31 |
디자인 패턴과 패키지 구조 (0) | 2025.03.29 |
API의 구현과 API 명세서-2 (1) | 2025.03.25 |
API의 구현과 API 명세서-1 (2) | 2025.03.21 |