티스토리 뷰
MVC 모델은 프로그램의 처리 역할을 나누어서 프로그램을 작성하는 방법으로 웹 시스템 개발에 자주 사용되고 있다.
역할은 모델, 뷰, 컨트롤러의 세종류로 나뉘며 앞글자를 따서 MVC 모델이라고 한다.
모델(Model:M)
모델은 시스템에서 비즈니스 로직을 담당한다. 비즈니스 로직이란 시스템의 코어 부분 혹은 시스템의 목적을 처리하는 부분을 뜻한다.
뷰(View:V)
뷰는 외명을 뜻한다. 사용자 입출력 이나 표현 부분을 담당하며 애플리케이션에서는 주로 화면을 담당한다.
컨트롤러(Controller:C)
컨트롤러는 서비스 처리를 담당하는 부분이다. 모델과 표시를 담당하는 뷰를 제어(Control)하는 역할을 한다.
모델(Model:M) | 비즈니스 로직 |
뷰(View:V) | 화면 |
컨트롤러(Controller:C) | 모델과 뷰를 제어 |
MVC 모델을 사용하면 다음과 같은 이점이 있다.
- 역할 분담을 통해 효율적인 개발
- 개발하는 엔지니어의 분업화가 용이
- 설계 변경에 유연하게 대처
스프링 MVC 란 웹 애플리케이션을 간단하게 만들 수 있는 기능을 제공하는 프레임워크이다.
객체 | 기능 개요 |
DispatcherServlet | 모든 요청을 수신하는 프런트 컨트롤러이다. |
Model | 컨트롤러에서 뷰에 넘겨주는 표시용 데이터 등을 저장하는 객체이다 (HttpServletRequest 나 HttpSession 과 같은 기능을 제공한다) |
컨트롤러 | 요청에 대응해서 처리할 내용이 있는 곳이다. |
서비스 처리 | 데이터베이스에 접속해서 데이터를 취득하거나 데이터를 가공하는 등 여러가지 작업을 실행한다. 개발자가 설계하고 구현한다. |
뷰 | 화면 표시 처리를 한다. |
관련어노테이션
@Contoller
인스턴스 생성 어노테이션이다.
@RequestMapping
해당 어노테이션을 클래스나 메서드에 부여하는 것으로 컨트롤러의 요청 핸들러 메서드와 URL 을 매핑하게 된다.
@RequestMapping 의 속성
속성 | 기능 개요 |
value | 매핑할 URL 경로를 지정한다. value 는 처음의 /를 생략할 수 있다. URL 경로만 지정하는 경우에는 속성에서 value 를 생략할 수 있다 URL 경로를 여러 개 지정할 수 있다 |
method | GET 과 POST 등의 HTTP 메서드를 지정한다. GET 을 지정하는 경우에는 RequestMethod.GET 을 사용한다 POST 를 사용하는 경우에는 RequestMethod.POST 를 사용한다 클래스에 @RequestMapping 을 부여하는 경우에는 사용할 수 없다. |
// value 속성에 처리 대상의 URL 경로를 매핑
@RequestMapping(value = "hello")
// value 속성만 지정하는 경우 생략 가능
@RequestMapping("hello")
// URL 경로를 여러 개 지정 가능
@RequestMapping(value = { "hello", "hellospring" })
@GetMapping
@GetMapping은 @RequestMapping 의 GET 요청용 어노테이션이다.
// value 속성만이라면 생략 가능합니다.
@GetMapping("hello")
// URL을 여러 개 지정할 수 있습니다.
@GetMapping(value = { "hello", "hellospring" })
@PostMapping
@PostMapping 은 @RequestMapping 의 POST 요청용 어노테이션이다.
// value 속성만이라면 생략 가능합니다.
@PostMapping("hello")
// URL을 여러 개 지정할 수 있습니다.
@PostMapping(value = { "hello", "hellospring" })
뷰 생성 규칙
- resources/templates 폴더 밑에 뷰를 생성한다.
- 뷰가 많이 필요한 경우에는 기능별로 폴더를 만들어서 보관한다.
- 폴더를 나눈 경우는 templates 폴더 이하의 폴더명을 요청 핸들러 메서드의 반환값에 지정해야 한다.
- CSS 나 자바스크립트 등은 resources/static 폴더에 배치한다.
'스프링프레임워크' 카테고리의 다른 글
bean 과 DI 컨테이너 (1) | 2025.03.10 |
---|---|
템플릿 엔진 (0) | 2025.03.01 |
PostgreSQL 설명 (0) | 2025.02.28 |
Spring Initializr (0) | 2025.02.27 |
메타 어노테이션 (0) | 2025.02.27 |