728x90
스프링 MVC - 기본기능
“Welcome 페이지 만들기”
스프링 부트에 ‘Jar’를 사용하면 ‘/resources/static/index.html’ 위치에 ‘index.html’ 파일을 두면 Welcome 페이지로 처리해준다.
“로깅이란”
운영 시스템에서는 ‘System.out.println()’같은 시스템 콘솔을 사용하여 필요한 청보를 출력하지 않고, 별도의 로깅 라이브러리를 사용하여 출력한다.
로그 관련 라이브러리가 상당히 방대하기 때문에 사용방법만 간단히 알아보려고 한다.
- SLF4J : 인터페이스
- Logback : 인터페이스의 구현체
로그 라이브러리는 Logback, Log4J, Log4J2 등등 수 많은 라이브러리가 존재한다.
**@RestController** // RestController 가 붙은 메서드는 string 그 자체를 반환한다.
public class LogTestController {
private final Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/log-test")
public String logTest() {
String name = "Spring";
System.out.println("name = " + name);
log.info("info log = {}", name);
return "ok";
}
}
// 실행콘솔
2023-03-28T22:06:40.807+09:00 TRACE 34380 --- [nio-8080-exec-3] h.springmvc.basic.LogTestController : trace log=Spring
2023-03-28T22:06:40.810+09:00 DEBUG 34380 --- [nio-8080-exec-3] h.springmvc.basic.LogTestController : debug log =Spring
2023-03-28T22:06:40.810+09:00 INFO 34380 --- [nio-8080-exec-3] h.springmvc.basic.LogTestController : info log=Spring
2023-03-28T22:06:40.810+09:00 WARN 34380 --- [nio-8080-exec-3] h.springmvc.basic.LogTestController : warn log = Spring
2023-03-28T22:06:40.810+09:00 ERROR 34380 --- [nio-8080-exec-3] h.springmvc.basic.LogTestController : error log=Spring
“테스트”
- 로그가 출력되는 포맷을 확인
- 시간, 로그 레벨, 프로세스 ID, 쓰레드 명, 클래스 명, 로그 메시지
로그 선언부를 @Slf4j 어노테이션으로 대신할 수 있다. @Slf4j == **private final Logger log = LoggerFactory.getLogger(getClass());**
“요청 매핑”
@RestController
public class MappingController {
private Logger log = LoggerFactory.getLogger(getClass());
@RequestMapping("/hello-basic")
public String helloBasic() {
log.info("helloBasic");
return "ok";
}
}
- @RestController
- @Controller는 반환값이 “String” 이라면 뷰 이름으로 인식되고 렌더링된다. 하지만 @RestController는 반환 값으로 뷰를 찾는 것이 아니고, “HTTP 메시지 바디”에 바로 입력된다.
“PathVariable(경로변수) 사용”
/**
* PathVariable 사용
* 변수명이 같다면 생략 가능
* @PathVariable("userId") String userId -> @PathVariable userId
* /mapping/userA
*/
@GetMapping("/mapping/{userId}")
public String mappingPath(@PathVariable("userId") String data) {
log.info("mappingPath userId{}", data);
return "ok";
}
최근 HTTP API는 다음과 같이 리소스 경로에 식별자를 넣는 스타일을 선호한다.
- ‘/mapping/userA’
- ‘/users/1’
/**
* PathVariable 사용 다중
*/
@GetMapping("/mapping/users/{userId}/orders/{orderId}")
public String mappingPath(@PathVariable String userId, @PathVariable Long
orderId) {
log.info("mappingPath userId={}, orderId={}", userId, orderId);
return "ok";
}
미디어 타입을 조건으로 매핑도 가능하다. HTTP 요청 Context-Type, consume
/**
*** Content-Type 헤더 기반 추가 매핑 Media Type**
* consumes="application/json"
* consumes="!application/json"
* consumes="application/*"
* consumes="*\\/*"
* MediaType.APPLICATION_JSON_VALUE
*/
@PostMapping(value = "/mapping-consume", consumes = "application/json")
public String mappingConsumes() {
log.info("mappingConsumes");
return "ok";
}
consume과 반대로 생산하는 요청은 produce를 사용한다. Accept,produces
/**
*** Accept 헤더 기반 Media Type**
* produces = "text/html"
* produces = "!text/html"
* produces = "text/*"
* produces = "*\\/*"
*/
@PostMapping(value = "/mapping-produce", produces = "text/html")
public String mappingProduces() {
log.info("mappingProduces");
return "ok";
}
728x90
'SpringBoot > Spring 김영한님' 카테고리의 다른 글
김영한 Spring MVC (7) - 메시지 컨버터, 정적 리소스, JSON (0) | 2023.04.10 |
---|---|
김영한 Spring MVC (6) (1) | 2023.04.06 |
김영한 Spring MVC (4) - DispatcherServlet,핸들러 매핑, 핸들러 어댑터 (0) | 2023.03.28 |
김영한 Spring MVC (3) - MVC패턴 (0) | 2023.03.24 |
김영한 Spring MVC (2) - GET, POST, QueryParameter, JSP (0) | 2023.03.23 |