💻본 포스팅은 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 김영한'님의 강의를 듣고 작성되었습니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의
웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -
www.inflearn.com
[로깅]
- System.out.println과 같은 출력문을 사용하게 될 때는 로그가 모두 출력이 되기 때문에 로그 폭탄을 받게 된다. 이를 해결하기 위해서 우리는 출력문이 아닌 로깅 라이브러리를 사용해서 로그 폭탄을 막고 필요한 부분을 로그로 찍어내도록 한다.
- 로그 라이브러리(현재 실무에서 많이 사용하는 기준)
- SLF4J - 인터페이스
- Logback- 구현체
[로그 선언과 호출]
- 로그 선언
private final Logger log = LoggerFactory.getLogger(getClass());
private static final Logger log = LoggerFactory.getLogger(Xxx.class);
@Slf4j
- 로그 호출
log.info("hello");
System.out.println("hello");//비추
[실제 로그 사용 코드]
[일반적인 로그 선언을 사용한 로그 사용법]
package hello.springmvc.basic;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LogTestController {
private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest(){
String name = "Spring";
log.trace("info log = {} ",name);
log.debug("info log = {} ",name);
log.info("info log = {} ",name);
log.warn("info log = {} ",name);
log.error("info log = {} ",name);
return "ok";
}
}
[애노테이션을 사용한 방법]
package hello.springmvc.basic;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LogTestController {
//private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest(){
String name = "Spring";
log.trace("info log = {} ",name);
log.debug("info log = {} ",name);
log.info("info log = {} ",name);
log.warn("info log = {} ",name);
log.error("info log = {} ",name);
return "ok";
}
}
[@RestController]
@RestController | @Controller |
반환 값이 String이면 String을 HTTP 메시지 바디에 바로 입력시킨다.(이때는 뷰로 반환하지 않기 때문에 해당 이름의 뷰를 찾아 렌더링 시키지 않는다.) | 반환 값이 String이면 뷰 이름으로 인식해서 뷰를 반환 값으로 돌려주며 이때 해당 String에 뷰를 찾아 뷰가 렌더링 된다. (즉 반환값을 모두 뷰로 돌려 해당 이름을 가진 뷰를 찾아 렌더링 해준다는 의미다.) |
[로그 level]
- 로그 레벨 설정을 변경해서 출력 결과 바꿀 수 있다.
- LEVEL: TRACE > DEBUG > INFO > WARN > ERROR
- 개발 서버는 debug 출력
- 운영 서버는 info 출력
- application.properties에서 로그 레벨을 설정할 수 있다.
[로그 사용의 장점]
- 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다.
- 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그를 상황에 맞게 조절할 수 있다.
- 시스템 아웃 콘솔에만 출력하는 것이 아니라, 파일이나 네트워크 등, 로그를 별도의 위치에 남길 수 있다. 특히 파일로 남길 때는 일별, 특정 용량에 따라 로그를 분할하는 것도 가능하다.
- 성능도 일반 System.out보다 좋다. (내부 버퍼링, 멀티 쓰레드 등등) 그래서 실무에서는 꼭 로그를 사용해야 한다.
'Back-End > Spring' 카테고리의 다른 글
[Spring MVC][HTTP 요청] - 1. 기본, 헤더 조회 (0) | 2022.03.29 |
---|---|
[Spring MVC][스프링MVC 기본 기능] - 요청 매핑 (0) | 2022.03.23 |
[Spring MVC][스프링MVC 구조] - 스프링 MVC (0) | 2022.03.18 |
[Spring MVC][서블릿, JSP, MVC 패턴] - 서블릿, JSP, MVC 패턴 (0) | 2022.03.09 |
[Spring MVC][서블릿/Servlet] - 2. HttpServletResponse (0) | 2022.03.04 |