[Spring MVC] 2주차 키워드 정리

동동주·2024년 3월 28일
0

초록 스터디

목록 보기
1/4

1. @ResponseBody


<클라이언트와 서버의 비동기 통신>

  • 클라이언트에서 서버로 통신하는 메시지를 요청(request) 메시지라고 하며, 서버에서 클라이언트로 통신하는 메시지를 응답(response) 메시지라고 한다.
  • 즉, 요청본문 requestBody, 응답본문 responseBody를 담아서 보내야 한다.

더 알아보기

  • 자바 객체를 HTTP 요청의 바디 내용으로 매핑하여 클라이언트로 전송한다. @ResponseBody가 붙은 파라미터가 있으면 HTTP 요청의 미디어타입과 파라미터의 타입을 먼저 확인한다.
  • 즉, @ResponseBody 어노테이션을 이용하면 http 요청 body를 자바 객체로 전달받을 수 있다.

2. controller method return type

1) String

  • 흔히 사용하는 타입
  • Model 안에 데이터를 key, value 값으로 담고, return 타입을 String 값으로 뷰의 이름을 지정해주면 뷰로 데이터가 전송되게 된다. 뷰에서는 해당 데이터의 key값을 객체 이름으로 하여 그 안에 데이터를 조회한다.

2) void

  • spring이 해당 url을 보고 뷰 네임을 자동으로 결정하는 기능 제공한다. 스프링 설정 파일에 RequestToViewNameTranslator 빈이 존재하지 않을 경우, 기본적으로 DeafultRequestToViewNameTranslator 구현체를 사용한다. 이 클래스는 요청 url에서 제일 앞의 '/'와 확장자를 제외한 나머지 부분을 뷰 네임으로 지정하게 된다.
    -> 위 예제에서는 test/address가 뷰 네임으로 지정되게 된다.

3) ModelAndView

  • ModelAndView는 Model과 View를 동시에 설정가능한 객체이다. Controller는 ModelAndView 객체만을 반환하지만 Model과 View 모두를 가지고 반환한다. 생성자로 뷰의 이름을 저장하거나 setViewName() 메서드를 사용하여 뷰 네임을 지정하고, addObject() 메서드로 데이터를 저장한다.

3. DTO

  • DTO(Data Transfer Object, 데이터 전송 객체)란 프로세스 간에 데이터를 전달하는 객체를 의미한다. 그렇기 때문에 안에 비즈니스 로직 같은 복잡한 코드는 없고 순수하게 전달하고 싶은 데이터만 담겨있다. 아래의 그림을 통해 DTO는 주로 클라이언트와 서버가 데이터를 주고받을 때 사용하는 객체임을 알 수 있다.

    https://tecoble.techcourse.co.kr/post/2021-04-25-dto-layer-scope/

-> 추가하기_

4. @RequestBody

  • @RequestBody이 붙은 파라미터에는 http 요청의 본문이 그대로 전달된다. 일반적으로 GET/POST의 요청 파라미터라면 @RequestBody를 사용할 일이 없을 것이다. 반면, xml이나 json 기반의 메시지를 사용하는 요청의 경우에 이 방법이 매우 유용하다.

5. @PathVariable

  • REST API에서 URL의 값을 처리하려면?
    http://localhost:8080/mapping/userA
    userA라는 값을 url에서 가져오고 싶을 때 @PathVariable을 이용하면 쉽게 처리할 수 있다.

  • @PathVariable의 이름과 url의 괄호 안의 이름이 같은 경우 data에 해당 값을 저장한다.

  • @PathVariable의 이름과 파라미터의 이름이 같으면 생략 가능하다.

  • @PathVariable을 다중으로도 사용 가능하다.

<스프링을 사용한 웹 애플리케이션에 적용할 수 있는 대표적 예외 처리 방법인 @ExceptionHandler, @ControllerAdvice>

6. @ExceptionHandler

https://tecoble.techcourse.co.kr/post/2023-05-03-ExceptionHandler-ControllerAdvice/

-> 뭔 말이지..

  • @ExceptionHandler 어노테이션을 사용하면 value로 원하는 예외를 지정하고 이를 핸들링할수 있다.

  • @ExceptionHandler는 코드를 작성한 컨트롤러에서만 발생하는 예외만 처리됩니다. 만약 같은 예외에 대해 여러 컨트롤러에서 같은 처리를 하고 싶다면 컨트롤러마다 같은 메서드를 작성해 주어야만 합니다. -> 즉, 코드의 중복이 발생할 수밖에 없습니다.

  • @ExceptionHandler({ Exception1.class, Exception2.class}) 이런식으로 두 개 이상 등록도 가능하다.

7. @ControllerAdvice

  • @ExceptionHandler가 하나의 클래스에 대한 것이라면, @ControllerAdvice는 모든 @Controller 즉, 전역에서 발생할 수 있는 예외를 잡아 처리해주는 annotation이다.
  • 위와 같이 새로운 클래스파일을 만들어서 annotation을 붙이기만 하면 된다. 그 다음에 @ExceptionHandler로 처리하고 싶은 예외를 잡아 처리하면 된다. (@ControllerAdvice가 전역을 포괄하기 때문에 @ExceptionHandler 적용이 가능한 것!)

출처:
https://cheershennah.tistory.com/179
https://www.youtube.com/watch?v=Zdf6LGtkjD4
https://ooeunz.tistory.com/101
https://tristy.tistory.com/54
https://dangdangee.tistory.com/entry/Spring-PathVariable-%EC%82%AC%EC%9A%A9%EB%B2%95
https://tecoble.techcourse.co.kr/post/2023-05-03-ExceptionHandler-ControllerAdvice/
https://jeong-pro.tistory.com/195

0개의 댓글