레벨 2를 시작했다.
새로운 것들을 많이 접해서 나름 신난다.
근로도 시작하고 인생 처음 스프링을 접했다.
방대한 스프링에 대한 두려움이 있었으나 학습 테스트로 학습을 하니까 결과를 바로 확인하고 왜 동작하는지 이유도 알아보면서 학습하는 즐거움이 있었다.
SPRING MVC, SPRING JDBC에 대해서 학습 테스트를 진행했는데, 먼저 SPRING MVC에 대한 내용만 정리를 해본다.
RestAssured
RESTful 웹 서비스의 테스트를 간편하게 할 수 있도록 도와준다.
given, when, then 패턴으로 테스트를 명확하게 파악할 수 있다.
- given : content-type, body 등 설정 get은 리소스를 요청할 때 Accept를 사용하여 서버로부터 받고 싶은 미디어 타입을 지정하고, post는 body 미디어 타입을 Content-type으로 지정해 준다.
- when : post 또는 get 설정
- then : status, cookie, body, header, content-type 등을 검증
Request Mapping
컨트롤러 메서드에 request를 매핑하기 위해 @RequestMapping 을 사용할 수 있다.
URL, HTTP 메서드, request parameters, headers, media types를 매치하기 위한 여러 속성들이 있다.
공유된 매핑을 표현하기 위해 클래스 레벨이나, 특정 엔드포인트 매핑으로 줄이기 위해 메서드 레벨에서 사용할 수 있다.
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- @PatchMapping
@ResponseBody
HttpMessageConverter 가 리턴 값을 직렬화 해서 body에 담아 전송함.
ResponseEntity
HTTP 응답의 모든 정보를 담고 있는객체.
public class ResponseEntity<T> extends HttpEntity<T> {
private final Object status;
...
}
HttpEntity는 다음과 같다.
public class HttpEntity<T> {
/**
* The empty {@code HttpEntity}, with no body or headers.
*/ public static final HttpEntity<?> EMPTY = new HttpEntity<>();
private final HttpHeaders headers;
@Nullable
private final T body;
}
body는 제네릭 타입이기 때문에 밖에서 타입을 지정해 줄 수 있다.
생성자를 사용할 수 있지만 빌더를 권장(숫자로된 상태 코드보다는 메서드로 하는 것이 실수 적음)
return ResponseEntity.ok().body(new User(id, "이름", "email"));
와 같이 생성할 수 있다.
@PathVariable
@GetMapping("/users/{id}")
과 같은 어노테이션에서 캡쳐된 URI 즉, {id} 변수에 접근할 수 있도록 해줌.
메서드의 파라미터에서 @PathVariable Long id
와 같이 변수명을 맞추거나 @PathVariable("id") Long name
과 같이 매핑해서 사용할 수 있다.
Pattern
"/resources/ima?e.png"
- ?에는 어느 문자가 와도 매치됨"/resources/*.png"
- .png 앞에 어느 문자가 와도(없어도) 매치됨"/resources/**"
- 다중 경로까지 매치"/projects/{project}/versions"
- 경로를 매치하고 변수를 캡쳐"/projects/{project:[a-z]+}/versions"
- 경로와 변수의 정규식에 해당하면 매치하고 변수 캡쳐
@RequestMapping
- name : 요청 매핑의 이름을 지정
- value / path : 요청 URL 지정
- method : 기본값 GET, HTTP 요청 메서드(POST, PUT, DELETE)등
- params : 매개변수 지정
- headers : 요청 헤더 지정
- consumes
- produces
consumes vs produces
- consumes : request의 매핑 범위를 Content-type 기반으로 줄임. post에 대한 media type 매핑
- produces : request의 매핑 범위를 Accept 기반으로 줄임. get에 대한 media type 매핑
@RequestParam vs @RequestBody
- RequestParam : 서블릿 request 파라미터를 메서드의 인자로 바인딩하기 위해 사용
- RequestBody : HttpMessageConverter 에 의해 body를 역직렬화해서 객체로 만듬
Thymeleaf
컨트롤러가 전달하는 데이터를 이용해 동적으로 화면 만들어주는 뷰 템플릿 엔진.
순수 HTML을 유지하기 때문에 내추럴 템플릿으로도 불림.
'회고 > 우아한테크코스' 카테고리의 다른 글
2023.04.13 일일 회고 (0) | 2023.04.14 |
---|---|
2023.04.12 일일 회고 (0) | 2023.04.13 |
[레벨 1] 체스 미션 회고 (0) | 2023.04.10 |
[레벨 1] 블랙잭 미션 회고 (0) | 2023.03.30 |
[레벨 1] 레벨 로그 (0) | 2023.03.28 |