레벨 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

+ Recent posts