[스프링 프레임워크 첫걸음] ( 5 / 9 )

박북velog·2023년 4월 4일
0

제 5장. MVC 모델 알아보기


5.1 MVC 모델

5.1.1 MVC 모델 이란 ?

MVC 모델이란 '프로그램의 처리 역할을 나누어서 프로그램을 작성하는 방법' 으로 주로 웹 시스템 개발에 사용된다.

역할은 모델 ( Model ) , 뷰 ( View ) , 컨트롤러 ( Controller ) 의 세 종류로 분류한다.

  1. 모델
    모델은 시스템에서 비즈니스 로직을 담당한다.

    비즈니스 로직 ? : 예를 들어, 회원 가입 중 사용자가 입력한 아이디의 중복 확인에서 중복 여부를 회원 데이터베이스에서 확인하고 화면에 표시할 수 있게 전달하는 것


  2. 사용자 입력과 결과 출력 등 시스템에서 표현 부분 담당하며, 웹 애플리케이션에서는 화면을 담당한다.

  3. 컨트롤러
    모델과 뷰를 제어하는 역할. 사용자가 입력한 내용을 뷰에서 받고 받은 데이터를 기준으로 모델에 내용을 전달하거나, 모델에서 받은 데이터를 뷰에 전달해서 화면에 표시하는 역할

MVC 모델의 이점

  • MVC로 분류함으로써 프로그램의 독립성이 높아진다.
  • 역할 분담을 통해 효율적인 개발이 가능하다.
  • 개발하는 엔지니어의 분업화가 용이하다.
  • 설계 변경에 유연하게 대응이 가능하다.

5.2 스프링 MVC

5.2.1 스프링 MVC 란 ?

웹 애플리케이션을 간단하게 만들 수 있는 기능을 제공하는 프레임워크

주요 기능으로 화면 전환이나 사용자가 사용하는 브라우저와 서버 간의 입출력 데이터 전달을 단순화하는 등 기능이 있다.

  1. DispatcherServlet 이 클라이언트로부터 요청 수신
  2. DispatcherServlet 이 컨트롤러의 요청 핸들러 메서드 호출
  3. 컨트롤러가 비즈니스 로직 처리 호출, 처리 결과 수신
  4. 처리 결과 모델로 설정 후 뷰 리턴
  5. 리턴 받은 뷰에 맞는 화면 표시 처리
  6. 클라이언트 응답 출력, 화면에 표시

5.3 스프링 MVC 사용하기

5.3.1 컨트롤러 생성

@Controller
@RequestMapping("hello")
public class HelloViewController {

	@GetMapping("view")
    public String helloView() {
    	// 반환값으로 뷰의 이름을 돌려줌
        return "hello";
    }
}

@Controller
인스턴스 생성 어노테이션
클라이언트와 데이터 입출력을 제어하는 애플리케이션 레리어의 컨트롤러 부여
요청 핸들러 메서드의 반환값을 뷰 이름으로 하여 템플릿 엔진의 뷰가 응답 HTML을 생성한다.

@RequestMapping
컨트롤러의 요청 핸들러 메서드와 URL을 매핑한다.

@RequestMapping 의 속성
  1. value
  • 매핑할 URL 경로를 지정한다.
  • value는 처음의 /를 생략할 수 있다.
  • URL 경로만 지정하는 경우에는 속성에서 value를 생략할 수 있다.
  • URL 경로를 여러 개 지정할 수 있다.
// value 속성에 처리 대상의 URL 경로를 매핑
@RequestMapping(value = "hello")

// value 속성만 지정하는 경우 생략 가능
@RequestMapping("hello")

// URL 경로를 여러 개 지정 가능
@RequestMapping(value = { "hello", "helloSpring" })
  1. method
  • GET 과 POST 등 HTTP 메서드를 지정한다.
  • GET을 지정하는 경우 RequestMethod.GET을 사용한다.
  • POST를 지정하는 경우 RequestMethod.POST를 사용한다.
  • HTTP 메서드를 여러 개 지정할 수 있다.
  • 클래스에 @RequestMapping 을 부여하는 경우 지정할 수 없다.
// method 에서 HTTP 메서드 'GET'을 지정
@RequestMapping(value = "hello", method = RequestMethod.GET)

// 메서드 여러 개 지정 가능
@RequestMapping(value = "hello", method = { RequestMethod.GET, RequestMethod.POST })

@GetMapping
@RequestMapping 의 GET 요청용 어노테이션
value 속성은 같지만 method 속성은 없다.

// value 속성만 있다면 생략 가능
@GetMapping("hello")

// URL 여러 개 지정 가능
@GetMapping(value = { "hello", "helloSpring" })

@PostMapping
@RequestMapping 의 POST 요청용 어노테이션
value 속성은 같지만 method 속성은 없다.

// value 속성만 있다면 생략 가능
@PostMapping("hello")

// URL 여러 개 지정 가능
@PostMapping(value = { "hello", "helloSpring" })
profile
느리지만 끝까지 해보자구

0개의 댓글