모아이티

[게시판 만들기] 코드로 배우는 스프링 웹 프로젝트 Part2 - 스프링MVC 본문

Spring 게시판 만들기

[게시판 만들기] 코드로 배우는 스프링 웹 프로젝트 Part2 - 스프링MVC

Yun's kitchen 2021. 3. 5. 00:05

왜 Controller를 따로 분리했을까?

Controller - URL 처리

 

화면과 로직을 분리

 

유지보수가 좋다는 근거가 무엇일까?

  • 돈 
  • 클라이언트의 변경 비용
  • 서비스 제공자 입장 비용
서블릿 스프링Controller
클래스에서 URL 분기 클래스 혹은 메서드에서 가능
GET/POST 방식 @GETMapping/ @POSTMapping 
고정된 파라미터와 리턴 타입 파라미터의 자동 수집, 
상황에 따른 반환 타입 조정
수동 forward 자동 forward 처리
의존성 주입 불가 스프링을 통해서 다른 객체 주입
JSON 처리 불편 @RestController
  기타 어노테이션을 통한 많은 기능 지원
  다양한 뷰처리 기능

@Controller

  • HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 필요한 기능 구현
  • 다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능
  • GET 방식, POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능
  • 상속 / 인터페이스 방식 대신에 어노테이션만으로 필요한 설정 가능

Model

  • Model 객체는 JSP에 Controller에서 생성된 데이터를 담아서 전달하는 역할을 하는 존재
  • 모델 2 방식에서 사용하는 request.setAttribute()와 유사한 역할
  • 과거에는 ModelAndView
  • Model에 담는 데이터 -> 파라미터가 아니라.. 다른 곳에서 발생한 데이터를 담기 위한 용기

@ModelAttribute

  • 파라미터를 뷰페이지로 넘길 때 본인이 원하는 명확한 이름값으로 넘길 때 사용 예) 파라미터명이 너무 길다거나 간단히 하고 싶을 때
  • 컨트롤러에서 메서드의 파라미터는 기본자료형을 제외한 객체형 타입은 다시 화면으로 전달
  • @ModelAtrribute는 명시적으로 화면에 전달되도록 지정

@RediretAttribute

  • 화면에 한 번만 전달되는 파라미터를 처리하는 용도
  • 내부적으로 HttpSession 객체에 담아서 한 번만 사용되고, 폐기

Controller의 리턴 타입

  • String - jsp를 이용하는 경우에는 jsp 파일의 경로와 파일 이름을 나타내기 위해서 사용, 상황에 따라 다른 화면을 보여줄 필요가 있을 경우에 유용하게 사용, redirect라는 키워드를 붙여서 사용
  • void - 호출하는 URL과 동일한 이름의 jsp를 의미
  • VO, DTO타입(객체 타입) - 주로 JSON 타입의 데이터를 만들어서 반환하는 용도로 사용(추가적인 라이브러리 필요)
  • ResponseEntity 타입 - response 할 때 Http 헤더 정보와 내용을 가공하는 용도로 사용
  • Model, ModelAndView : Model로 데이터를 반환하거나 화면까지 같이 지정하는 경우에 사용(최근에 사용 X)
  • HttpHeaders : 응답에 내용 없이 Http 헤더 메시지만 전달하는 용도로 사용

Controller의 Exception 처리

  • @ControllerAdvice - 예외처리와 원래의 컨트롤러가 혼합된 형태의 클래스가 작성되는 방식
  • @ExceptionHandler - 해당 메서드가 ()에 들어가는 예외 타입을 처리한다는 것을 의미

 

Comments