반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Eclipse
- 자바스크립트
- 단위테스트
- 자바
- list
- js
- input
- Java
- Array
- 정규식
- 자바문법
- Visual Studio Code
- 인텔리제이
- math
- 배열
- 이클립스
- IntelliJ
- javascript
- 문자열
- java테스트
- string
- json
- vscode
- junit5
- 테스트자동화
- CSS
- ArrayList
- html
- HashMap
- junit
Archives
- Today
- Total
어제 오늘 내일
[Spring Boot] 로깅(Logging) 구조 한눈에 이해하기 본문
개발을 하다 보면 System.out.println() 대신 로그(Log)를 남겨야 한다는 말을 자주 듣게 됩니다. 왜 그럴까요? 그리고 스프링 부트는 내부적으로 어떤 원리로 로그를 찍는 걸까요? 5분 만에 완벽히 이해해 봅시다!
1. 왜 println이 아니라 '로깅'인가요?
- 성능: 로그는 비동기적으로 처리하거나 파일로 남길 수 있어 서비스 성능에 영향을 덜 줍니다.
- 레벨 제어: 운영 중에는 중요한 정보만 보고, 개발 중에는 상세한 정보를 보는 등 출력 수준을 조절할 수 있습니다.
- 관리: 날짜별로 파일을 나누거나, 특정 용량이 넘으면 압축하는 등의 관리가 자동화됩니다.
2. 스프링 부트 로깅의 핵심 구조 (SLF4J와 Logback)
스프링 부트를 쓰면 별도의 설정 없이도 로그가 찍히는 이유는 spring-boot-starter-logging이 기본으로 포함되어 있기 때문입니다. 여기서 두 가지만 기억하세요!
- SLF4J (Simple Logging Facade for Java): "껍데기(인터페이스)"입니다. 로깅 라이브러리를 갈아끼울 수 있게 해주는 표준 가이드라인이에요.
- Logback: "알맹이(구현체)"입니다. SLF4J의 가이드대로 실제로 로그를 기록하는 엔진이며, 스프링 부트의 기본 선택입니다.
3. 로그 레벨 (Logging Level)
로그에는 '중요도'가 있습니다. 아래로 갈수록 심각한 단계입니다.
| 레벨 | 설명 |
| TRACE | 가장 상세한 정보 (경로 추적 등) |
| DEBUG | 디버깅을 위한 정보 |
| INFO | 운영상 필요한 주요 정보 (기본값) |
| WARN | 경고 (문제가 될 수 있는 잠재적 상황) |
| ERROR | 에러 (시스템에 심각한 문제 발생) |
Tip: 설정한 레벨보다 높은 단계의 로그만 출력됩니다.
(예: INFO로 설정하면 DEBUG는 안 보이고, INFO/WARN/ERROR만 보임)
4. 한눈에 보는 로깅 흐름도
코드에서 로그를 찍었을 때, 어떤 과정을 거쳐 우리 눈에 보일까요?
- Logger: 개발자가 코드에서 로그를 생성합니다. (
log.info(...)) - Filter: 설정된 레벨(Level)에 맞는지 확인합니다.
- Appender: 로그를 어디에 출력할지 결정합니다. (콘솔, 파일, DB 등)
- Layout/Encoder: 로그를 어떤 모양(날짜, 메시지 형태 등)으로 출력할지 디자인합니다.
5. 설정 방법 (application.properties)
복잡한 설정 파일 없이도 간단하게 제어할 수 있습니다.
# 전체 로그 레벨 설정
logging.level.root=info
# 특정 패키지만 상세하게(DEBUG) 보고 싶을 때
logging.level.com.myapp.controller=debug
# 로그를 파일로 저장하고 싶을 때
logging.file.name=logs/mylog.log
💡 마치며
스프링 부트 로깅은 SLF4J라는 약속을 Logback이라는 일꾼이 수행하는 구조입니다.
이 구조 덕분에 우리는 코드 한 줄로 안전하고 체계적으로 시스템의 상태를 기록할 수 있는 것이죠!
반응형
'IT > SpringBoot' 카테고리의 다른 글
| Liquibase checksum 오류가 발생하는 경우 (변경사항 없는 경우 포함) (1) | 2025.05.07 |
|---|---|
| [SpringBoot] h2 db 설정, h2 콘솔 접속하기 (0) | 2024.05.04 |
| [Spring] 등록 된 모든 Bean 목록 출력하기 (2) | 2024.04.08 |
| [Spring Boot] @RequestParam 어노테이션 사용법 (0) | 2023.12.20 |
| [Spring Boot / 에러] Name for argument of type [java.lang.String] not specified, and parameter name information not found in class file either (0) | 2023.12.19 |
Comments
