숑숑이의 개발일기
article thumbnail

프로젝트 생성

https://start.spring.io/에서 아래의 사진과같이 프로젝트를 생성한다.

주의할것은 Pakaging 부분이다. JSP를 사용하지 않기 때문에 JAR를 사용하는 것이 좋다. JAR를 사용하게 되면 항상 내장 서버(톰캣 등)를 사용하고, webapp 경로도 사용하지 않는다. 최근에는 주로 이 방식을 사용한다.

 

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

 

그리고 LOMBOK 사용을위해 ctrl+alt+s를 눌러 (Settings) Annotation 검색, 맨 상단 Enable antotation processing에 체크해준다.

 

Welcome 페이지 생성

스프링 부트 + Jar 를 사용하면 /resources/static/ 위치에 index.html 파일을 두면 자동으로 Welcome 페이지로 처리해준다. (스프링 부트가 지원하는 정적 컨텐츠 위치에 /index.html 이 있으면 된다.

 

 

로깅

운영 시스템에서는 System.out.println()과 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하는게 아니라, 별도의 로깅 라이브러리를 활용해 로그를 출력한다.

 

기본적으로 스프링부트를 사용하면 스프링 부트 로깅 라이브러리(spring-boot-starter-logging)이 함께 포함되어 있다. 스프링 부트 로깅 라이브러리는 기본으로 아래의 로깅 라이브러리를 사용한다.

SLF4J는 인터페이스이고, 구현체로 Logback과 같은 로그 라이브러리를 사용하면 된다. 실무에서는 스프링 부트가 기본으로 제공하는 Logback 라이브러리를 대부분 사용한다.

 

로그 사용시 장점은 아래와 같다.

  • 쓰레드 정보, 클래스 이름과 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다.
  • 현재 서버에따라 로그를 상황에 맞게 조절할 수 있다.(개발서버-debug, 운영서버-info)
  • 콘솔에만 출력하는 것이 아닌, 파일이나 네트워크 등 로그를 별도의 위치에 남길 수 있다. 
    특히, 파일로 남길 때에는 일별 혹은 특정 용량에 따라 로그를 분할하는 것도 가능함.
  • Syetem.out 보다 성능이 좋다.(내부 버퍼링, 멀티쓰레드)

위의 이유로 실무에서는 꼭 로그를 사용해야한다.

 

사용방법

먼저 로그를 선언한다.

private final Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(Xxx.class);

 

그리고 클래스 레벨에 @Slf4j 어노테이션을 붙여주면 된다.

 

로그 레벨 설정은 application.properties에 아래의 코드로 설정할 수 있다.

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

#hello.springmvc 패키지와 그 하위 로그 레벨 설정
logging.level.hello.springmvc=debug

 

 

스프링부트가 제공하는 로그 기능은 아래의 사이트를 참고한다.

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-bootfeatures.html#boot-features-logging

 

로그를 올바르게 출력하기 위해서는 문자 더하기 연산이 아닌 아래의 방식으로 사용한다.

// 틀린 예)
log.trace("trace log=" + name);

// 옳은 예)
log.trace("trace log={}", name);

 

첫번째의 경우, 로그 출력자체에는 문제가 없으나 해당 로그가 출력되지 않더라도 더하기 연산은 수행된다.

두번째의 경우, SLF4J의 치환문자를 사용하여 불필요한 연산이 발생하지 않는다.

 

@RequestMapping("/log-test")
    public String logTest() {
        String name = "Spring";
        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";
    }

 

위 글은 김영한 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술의 일부 내용을 정리한 것입니다.
profile

숑숑이의 개발일기

@숑숑-

풀스택 개발자 준비중입니다