[스프링] 스프링 MVC - 기본기능 (1) 로깅

2025. 9. 3. 17:08·스프링

스프링 애플리케이션을 개발하다 보면 정보를 출력해야 하는 경우가 많다.
이때 System.out.println() 으로 직접 콘솔에 출력하기보다는 로깅 라이브러리를 사용하는 것이 일반적이다.

 

1. System.out.println() 대신 로깅을 사용하는 이유

운영 시스템에서 System.out.println() 을 그대로 사용하는 것은 적절하지 않다.

  • 로그 레벨을 지정할 수 없다.
  • 불필요한 출력이 섞여 유지보수가 어렵다.
  • 성능에 불리하다.

따라서 운영 환경에서는 반드시 로깅 라이브러리를 사용해야 한다.

 

2. 스프링 부트 로깅 라이브러리

스프링 부트는 기본적으로 spring-boot-starter-logging 을 제공한다.

  • SLF4J: 로깅 인터페이스
  • Logback: 기본 구현체

SLF4J는 단순히 인터페이스를 제공하고, 실제 로깅은 구현체인 Logback이 담당한다.
실무에서는 별도의 설정을 하지 않는 이상 기본으로 제공되는 Logback을 그대로 사용한다고 한다.

 

3. 로그 선언

로그는 보통 다음과 같이 선언한다.

private Logger log = LoggerFactory.getLogger(getClass());

롬복을 사용할 경우 @Slf4j 애너테이션으로 더 간단히 선언할 수 있다.

@Slf4j
public class LogTestController {
}

 

4. 로그 호출

log.trace("trace log={}", name);
log.debug("debug log={}", name);
log.info("info log={}", name);
log.warn("warn log={}", name);
log.error("error log={}", name);

System.out.println("hello") 대신 로그 메서드를 호출한다.

로그를 사용하면 다음과 같은 장점이 있다.

  • 로그 레벨에 따라 출력 여부를 조절할 수 있다.
  • 시간, 쓰레드, 클래스명 등의 부가 정보를 자동으로 확인할 수 있다.
  • 콘솔뿐 아니라 파일, 네트워크 등 다양한 경로에 기록할 수 있다.
  • 성능적으로도 더 효율적이다.

5. 예제 코드

@Slf4j
@RestController
public class LogTestController {

    @RequestMapping("/log-test")
    public String logTest() {
        String name = "Spring";

        System.out.println("name = " + name); // 권장하지 않음

        log.trace("trace log={}", name);
        log.debug("debug log={}", name);
        log.info("info log={}", name);
        log.warn("warn log={}", name);
        log.error("error log={}", name);

        // 잘못된 로그 사용법 (문자열 연산 발생)
        log.debug("String concat log=" + name);

        return "ok";
    }
}

 

6. 로그 레벨 설정

로그 레벨은 application.properties 파일에서 지정할 수 있다.

# 전체 로그 레벨 (기본값: info)
logging.level.root=info

# 특정 패키지 로그 레벨 조정
logging.level.hello.springmvc=debug
  • 개발 환경: debug 레벨까지 출력
  • 운영 환경: info 이상만 출력

즉 환경에 따라 로그를 다르게 볼 수 있는 것이 큰 장점이다.

 

7. 올바른 로그 사용법

// 잘못된 사용
log.debug("data=" + data);

// 올바른 사용
log.debug("data={}", data);

첫 번째 방식은 로그 레벨이 맞지 않아도 문자열 연산이 발생한다. (연산이 발생 한 후 출력될지 말지 판단 되는 것)
두 번째 방식은 로그 레벨이 조건에 맞지 않으면 실행조차 되지 않는다.

 

마무리하며

로그는 단순한 출력이 아니라 운영에 꼭 필요한 도구다.
스프링 부트는 SLF4J와 Logback을 기본 제공하므로 별도 설정 없이도 사용할 수 있고, 환경에 따라 로그 레벨을 조정해 개발과 운영을 구분할 수 있다.
올바른 사용법만 익혀두면 학습 단계에서는 기본기를 다지고, 실무에서는 안정적인 운영까지 이어갈 수 있을 것이다.

 

감사합니다.

'스프링' 카테고리의 다른 글

[스프링] 스프링 MVC - 기본기능 (마지막) HTTP 요청 메시지: text와 JSON  (1) 2025.09.03
[스프링] 스프링 MVC - 기본기능 (2) 요청 파라미터  (0) 2025.09.03
[스프링] 컬렉션 조회 최적화  (4) 2025.07.31
[스프링] 지연 로딩과 조회 성능 최적화  (3) 2025.07.27
[스프링] DTO가 필요한 이유  (3) 2025.07.27
'스프링' 카테고리의 다른 글
  • [스프링] 스프링 MVC - 기본기능 (마지막) HTTP 요청 메시지: text와 JSON
  • [스프링] 스프링 MVC - 기본기능 (2) 요청 파라미터
  • [스프링] 컬렉션 조회 최적화
  • [스프링] 지연 로딩과 조회 성능 최적화
0kingki_
0kingki_
자바 + 스프링 웹 개발
  • 0kingki_
    0kingki_
    0kingki_
  • 전체
    오늘
    어제
    • 분류 전체보기 (134)
      • 코딩 테스트 (54)
      • 자바 (21)
      • 스프링 (27)
      • 타임리프 (16)
      • 스프링 데이터 JPA (8)
      • 최적화 (2)
      • QueryDSL (4)
      • AWS (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다형성
    LocalDateTime
    객체지향
    Java
    BFS
    쿼리
    재귀
    fetch join
    코딩 테스트
    코딩테스트
    타임리프
    최적화
    백준
    쿼리dsl
    컬렉션
    예외 처리
    spring
    dfs
    불변객체
    스프링 컨테이너
    thymeleaf
    QueryDSL
    mvc
    스프링
    SpringDataJpa
    예외처리
    SOLID
    자바
    스프링 데이터 JPA
    JPA
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
0kingki_
[스프링] 스프링 MVC - 기본기능 (1) 로깅
상단으로

티스토리툴바