어제 오늘 내일

[Spring Boot] 로깅(Logging) 구조 한눈에 이해하기 본문

IT/SpringBoot

[Spring Boot] 로깅(Logging) 구조 한눈에 이해하기

hi.anna 2026. 1. 29. 00:11

 

개발을 하다 보면 System.out.println() 대신 로그(Log)를 남겨야 한다는 말을 자주 듣게 됩니다. 왜 그럴까요? 그리고 스프링 부트는 내부적으로 어떤 원리로 로그를 찍는 걸까요? 5분 만에 완벽히 이해해 봅시다!

1. 왜 println이 아니라 '로깅'인가요?

  • 성능: 로그는 비동기적으로 처리하거나 파일로 남길 수 있어 서비스 성능에 영향을 덜 줍니다.
  • 레벨 제어: 운영 중에는 중요한 정보만 보고, 개발 중에는 상세한 정보를 보는 등 출력 수준을 조절할 수 있습니다.
  • 관리: 날짜별로 파일을 나누거나, 특정 용량이 넘으면 압축하는 등의 관리가 자동화됩니다.

 

2. 스프링 부트 로깅의 핵심 구조 (SLF4J와 Logback)

스프링 부트를 쓰면 별도의 설정 없이도 로그가 찍히는 이유는 spring-boot-starter-logging이 기본으로 포함되어 있기 때문입니다. 여기서 두 가지만 기억하세요!

  1. SLF4J (Simple Logging Facade for Java): "껍데기(인터페이스)"입니다. 로깅 라이브러리를 갈아끼울 수 있게 해주는 표준 가이드라인이에요.
  2. Logback: "알맹이(구현체)"입니다. SLF4J의 가이드대로 실제로 로그를 기록하는 엔진이며, 스프링 부트의 기본 선택입니다.

 

3. 로그 레벨 (Logging Level)

로그에는 '중요도'가 있습니다. 아래로 갈수록 심각한 단계입니다.

레벨 설명
TRACE 가장 상세한 정보 (경로 추적 등)
DEBUG 디버깅을 위한 정보
INFO 운영상 필요한 주요 정보 (기본값)
WARN 경고 (문제가 될 수 있는 잠재적 상황)
ERROR 에러 (시스템에 심각한 문제 발생)

Tip: 설정한 레벨보다 높은 단계의 로그만 출력됩니다.
(예: INFO로 설정하면 DEBUG는 안 보이고, INFO/WARN/ERROR만 보임)

 

4. 한눈에 보는 로깅 흐름도

코드에서 로그를 찍었을 때, 어떤 과정을 거쳐 우리 눈에 보일까요?

  1. Logger: 개발자가 코드에서 로그를 생성합니다. (log.info(...))
  2. Filter: 설정된 레벨(Level)에 맞는지 확인합니다.
  3. Appender: 로그를 어디에 출력할지 결정합니다. (콘솔, 파일, DB 등)
  4. Layout/Encoder: 로그를 어떤 모양(날짜, 메시지 형태 등)으로 출력할지 디자인합니다.

 

5. 설정 방법 (application.properties)

복잡한 설정 파일 없이도 간단하게 제어할 수 있습니다.

# 전체 로그 레벨 설정
logging.level.root=info

# 특정 패키지만 상세하게(DEBUG) 보고 싶을 때
logging.level.com.myapp.controller=debug

# 로그를 파일로 저장하고 싶을 때
logging.file.name=logs/mylog.log

 

 

💡 마치며

스프링 부트 로깅은 SLF4J라는 약속을 Logback이라는 일꾼이 수행하는 구조입니다.

이 구조 덕분에 우리는 코드 한 줄로 안전하고 체계적으로 시스템의 상태를 기록할 수 있는 것이죠!

 

반응형
Comments