ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링MVC - 1편] 스프링 MVC 기본기능 - 프로젝트 생성 및 로그
    스프링&스프링부트 2025. 1. 28. 13:22

    스프링부트 프로젝트 생성

    https://start.spring.io/

     

     

    Packaging - Jar

    JSP를 사용하지 않기 때문에 Jar 사용하는 것이 좋다

    Jar를 사용하면 항상 내장 서버(톰캣등)를 사용하고, webapp 경로도 사용하지 않는다

    내장 서버 사용에 최적화되어 있는 기능이다

    Packaging - War

    War를 사용하면 내장 서버도 사용가능 하지만, 주로 외부 서버에 배포하는 목적으로 사용한다

     

     

    Welcome 페이지

    스프링 부트에 Jar 사용하면 /resources/static/ 위치에 index.html 파일을 두면 Welcome 페이지로 처리해준다

     

     

     

    로깅

    로그 라이브러리는 Logback, Log4J, Log4J2 등등 수 많은 라이브러리가 있는데,

    그것을 통합해서 인터페이스로 제공하는 것이 바로 SLF4J 라이브러리

    쉽게 이야기해서 SLF4J 인터페이스이고, 구현체로 Logback 같은 로그 라이브러리를 선택하면 된다

     

     

     

    LogTestController

    @RestController
    public class LogTestController {
        private final Logger log = LoggerFactory.getLogger(getClass());
    
        @RequestMapping("/log-test")
        public String logTest() {
            String name = "String";
    
            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);
    
            return "ok";
        }
    
    }

    로그가 출력되는 포맷확인- 시간, 로그 레벨, 프로세스 ID, 쓰레드 , 클래스명, 로그 메시지

    LEVEL - TRACE > DEBUG > INFO > WARN > ERROR

    개발 서버는 debug 출력, 운영 서버는 info 출력

     

     

    @RestController

    @Controller 반환 값이 String이면 이름으로 인식된다 그래서 뷰를 찾고 뷰가 랜더링된다

    @RestController 반환 값으로 뷰를 찾는 것이 아니라, HTTP 메시지 바디에 바로 입력한다 따라서 실행 결과로 ok 메세지를 받을 있다

     

     

    @Slf4j

    @Slf4j
    @RestController
    public class LogTestController {
        @RequestMapping("/log-test")
        public String logTest() {
            String name = "String";
    
            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);
    
            return "ok";
        }
    }

    로그 선언 없이 @Slf4j 롬복 사용 가능하다

     

     

    로그 레벨 설정 - application.properties

    spring.application.name=springmvc
    
    #전체 로그 레벨 설정(기본 info)
    logging.level.root=info
    #hello.springmvc 패키지와 그 하위 로그 레벨 설정
    logging.level.hello.springmvc=debug

     

     

     

    올바른 로그 사용법

    log.debug("data="+data)

    로그 출력 레벨을 info 설정해도 해당 코드에 있는 "data="+data 실제 실행이 되어 버린다

    결과적으로 문자 더하기 연산이 발생한다

    log.debug("data={}", data)

    로그 출력 레벨을 info 설정하면 아무일도 발생하지 않는다 따라서 앞과 같은 의미 없는연산이 발생하지 않는다

     

     

     

    로그 사용시 장점

    1. 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께   있고, 출력 모양을 조정할  있다
    2.  로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고운영서버에서는 출력하지 않는  로그를 상황에 맞게 조절할  있다
    3. 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 , 로그를 별도의 위치에 남길  있다 특히 파일로 남길 때는 일별, 특정 용량에 따라 로그 분할이 가능하다
    4. 성능도 일반 System.out보다 좋다 (내부 버퍼링멀티 쓰레드 등등그래서 실무에서는  로그를 사용해야 
    728x90
Designed by Tistory.