1. MVC 모델
MVC 모델은 '프로그램의 처리 역할을 나누어서 프로그램을 작성하는 방법'으로 웹 시스템 개발에 자주 사용되고 있다.
역할은 모델(M, Model), 뷰(V, View), 컨트롤러(C, Controller)의 세 종류로 분류한다.
1.1 모델
모델은 시스템에서 비즈니스 로직(Business Logic)을 담당한다. '비즈니스 로직'이라는 단어는 '시스템의 코어 부분' 혹은 '시스템의 목적을 처리하는 부분' 등을 나타낸다.
비즈니스 로직을 회원 가입할 때의 상황에 비유하면 사용자가 입력한 아이디의 중복 확인, 본인 인증, 비밀번호 규칙 확인 등이 필요할 것이다. 이 중에서 아이디 중복 확인의 로직을 생각해보면 우선 사용자가 입력한 아이디 값을 메모리에 저장하고 회원 데이터베이스에서 동일한 아이디가 있는지 확인한다. 그리고 중복 여부를 화면에 표시할 수 있게 전달하는 것까지가 비즈니스 로직이 된다.
1.2 뷰
뷰는 사용자 입력과 출력 결과 등 시스템에서 표현 부분을 담당하며 웹 어플리케이션에서는 주로 화면을 담당한다.
1.3 컨트롤러
컨트롤러는 서비스 처리 담당하는 모델과 화면 표시를 담당하는 뷰를 제어(Controller)하는 역할이다. 사용자가 입력한 내용을 뷰에서 받고, 받은 데이터를 기준으로 모델에 내용을 전달한다. 또 모델에서 받은 데이터를 뷰에 전달해서 화면에 표시하는 역할을 한다.
2. MVC 모델의 개요와 이점
서비스 처리 모델(M, Model), 뷰(V, View), 컨트롤러(C, Controller)로 분류함으로써 프로그램의 독립성이 높아질 수 있다.
- 역할 분담을 통해 효율적인 개발 가능
- 개발하는 엔지니어의 분업화가 용이
- 설계 변경에 유연하게 대응 가능

3. 스프링 MVC
스프링 MVC를 간단히 설명하면 '웹 어플리케이션을 간단하게 만들 수 있는 기능을 제공하는 프레임워크'이다.
스프링 MVC(Spring MVC) 프레임워크는 프론트 컨트롤러 패턴(Front Controller Pattern)을 기반으로 동작합니다. 프론트 컨트롤러 패턴은 웹 애플리케이션에서 들어오는 모든 요청을 하나의 진입점, 즉 프론트 컨트롤러(Front Controller)가 처리하도록 하는 디자인 패턴이다.
스프링 MVC에서는 DispatcherServlet이 프론트 컨트롤러 역할을 한다. 클라이언트의 요청이 들어오면 DispatcherServlet이 해당 요청을 처리하고, 적절한 핸들러(컨트롤러)에게 전달하여 처리를 진행한다. 이 패턴을 통해 애플리케이션의 흐름을 중앙 집중화하고, 요청과 응답의 처리를 효과적으로 관리할 수 있다.
스프링 MVC의 구성 요소
객체기능 | 개요 |
DispatcherServlet | 모든 요청을 수신하는 프런트 컨트롤러 |
Model | 컨트롤러에서 뷰에 넘겨주는 표시용 데이터 등을 저장하는 객체 (HttpServletRequest 혹은 HttpSession 과 같은 기능을 제공한다.) |
컨트롤러 | 요청에 대해서 처리할 내용이 있는 곳 |
서비스 처리 | 데이터베이스에 접속해서 데이터를 취득 혹은 가공하는 등 여러 가지 작업을 실행한다. 개발자가 설계하고 구현한다.(스프링 MVC와 관계는 없다.) |
뷰 | 화면 표시 처리를 수행한다. (구체적으로 JSP 등의 처리를 수행한다.) |
요청을 받고 응답을 보낼 때까지의 흐름

- 모든 요청을 수신하는 프런트 컨트롤러인 DispatcherServlet이 클라이언트로부터 요청을 수신한다.
- DispatcherServlet이 컨트롤러의 요청 핸들러 메서드를 호출한다.
- 컨트롤러 비즈니스 로직 처리를 호출하고, 처리 결과를 받고(3) 처리 결과를 모델로 설정하고, 뷰 이름을 반환한다.(4)
- 반환된 뷰 이름을 받아서 DispatcherServlet이 뷰 이름에 대응하는 뷰에 대해 화면 표시 처리를 의뢰한다.
덧붙여 스프링 MVC는 앞에서 언급한 클래스 외에도 다양한 클래스의 처리가 내부에서 발생하지만, DispatcherServlet과 모델에 주목하기 위해 생략했다. 번거로운 처리는 스프링 MVC가 담당하기 때문에 실제로 우리가 작성하는 부분은 컨트롤러, 비즈니스 로직 처리, 뷰의 세가지뿐인 것을 알 수 있다.
4. 스프링 MVC 사용
4.1 Controller 클래스 생성
컨트롤러는 POJO 클래스로 작성한다. POJO(Plain Old Java Ojbect)는 특정한 기술에 종속되지 않고, 특정한 규약을 따르지 않은 간단하고 순수한 자바 객체를 의미한다.
@Controller
@RequestMapping("hello")
public class HelloViewController {
@GetMapping("view")
public String helloView() {
// 반환값으로 뷰의 이름을 반환
return "hello";
}
}
- @Controler
컨트롤러 인스턴스 생성 어노테이션이다. 클라이언트와 데이터 입출력을 제어하는 어플리케이션 레이어의 컨트롤러를 부여한다. 요청 핸들러 메서드의 반환값을 뷰 이름으로 하여 템플릿 엔진의 뷰가 응답 HTML을 생성한다. - @RequestMapping
클래스나 메서드에 부여하는 것으로 컨트롤러의 요청 핸들러 메서드와 URL을 매핑하게 된다.
여러 가지 속성을 지정할 수 있지만 기본적으로 다음 표의 속성을 지정한다.- value
- 매핑할 URL 경로 지정
- 첫 앞부분의 / 생략이 가능
- URL 경로만 지정하는 경우에는 속성에서 value 생략이 가능
- URL 경로를 여러 개 지정이 가능
- method
- GET과 POST 등의 HTTP 메서드를 지정
- GET을 지정하는 경우에는 RequestMethod.GET 을 사용
- POST를 사용하는 경우에는 RequestMethod.POST 를 사용
- HTTP 메서드를 여러 개 지정이 가능
- 클래스에 @RequestMapping을 부여하는 경우에 method 속성 사용이 불가능
- value
4.2 value 속성 예 1
// value 속성에 처리 대상의 URL 경로를 매핑
@RequestMapping(value = "hello")
// value 속성만 지정하는 경우 생략 가능
@RequestMapping("hello")
// URL 경로를 여러 개 지정 가능
@RequestMapping(value = { "hello", "hellospring"})
// method에서 HTTP 메서드 'GET'을 지정
@RequsetMapping(value = "hello", method = RequestMethod.GET)
// 메서드 여러 개 지정이 가능
@RequestMapping(value = "hello", method = { RequestMethod.GET, ReqeustMethod.POST })
4.3 @GetMapping
@GetMapping은 @RequestMapping의 GET 요청용 어노테이션이다.
@RequestMapping의 value 속성과 동일하지만, method 속성은 없다.
4.4 @GetMapping 예제 1
// value 속성만이라면 생략 가능합니다.
@GetMapping("hello")
// URL을 여러 개 지정할 수 있습니다.
@GetMapping(value = { "hello", "hellospring "})
@GetMapping은 스프링 프레임워크에서 사용되는 어노테이션 중 하나로, 특정 메서드가 HTTP GET 요청을 처리하는 핸들러 메서드임을 나타낸다. 이 어노테이션은 보다 간편하고 명시적인 방법으로 GET 요청을 처리하는 메서드를 정의할 수 있게 해준다.
기존에는 @RequestMapping 어노테이션을 사용하여 메서드가 어떤 HTTP 메서드를 처리하는지 지정했었다. 예를 들면 다음과 같이 사용할 수 있다:
@Controller
@RequestMapping("/example")
public class ExampleController {
@RequestMapping(method = RequestMethod.GET)
public String handleGetRequest() {
// GET 요청을 처리하는 로직
return "viewName";
}
}
위 코드에서는 /example 경로에 대한 GET 요청을 처리하는 메서드를 정의하고 있다. 그러나 @RequestMapping은 모든 HTTP 메서드에 대한 처리를 지원하기 때문에 조금 더 간결한 방법이 필요하다는 요구가 있었다.
이에 따라 등장한 것이 @GetMapping 어노테이션이다. 위 코드를 @GetMapping을 사용하여 다시 작성하면 다음과 같다:
javaCopy code@Controller
@RequestMapping("/example")
public class ExampleController {
@GetMapping
public String handleGetRequest() {
// GET 요청을 처리하는 로직
return "viewName";
}
}
@GetMapping은 기본적으로 @RequestMapping을 상속받아서 GET 메서드에 특화된 단축 표현으로 볼 수 있다. 따라서 더 간결하고 가독성이 좋아진다. 위의 예제에서는 /example 경로에 대한 GET 요청을 처리하는 메서드를 정의하고 있다.
4.5 @PostMapping
@RequestMapping의 POST 요청용 어노테이션이 @PostMapping이다.
속성은 @RequestMapping의 value 속성과 동일하지만, method 속성은 없다.
4.6 @PostMapping 예제 1
// value 속성만이라면 생략 가능합니다.
@PostMapping("hello")
// URL을 여러 개 지정할 수 있습니다.
@PostMapping(value = { "hello", "hellospring "})
@PostMapping은 스프링 프레임워크에서 사용되는 어노테이션 중 하나로, 특정 메서드가 HTTP POST 요청을 처리하는 핸들러 메서드임을 나타낸다. @GetMapping과 유사하게, 이 어노테이션을 사용하여 간편하게 POST 요청을 처리하는 메서드를 정의할 수 있다. 예를 들어, 다음은 @PostMapping을 사용하여 POST 요청을 처리하는 메서드를 정의한 예제이다:
@Controller
@RequestMapping("/example")
public class ExampleController {
@PostMapping
public String handlePostRequest() {
// POST 요청을 처리하는 로직
return "viewName";
}
}
위 코드에서는 /example 경로에 대한 POST 요청을 처리하는 메서드를 정의하고 있다. 이 메서드는 handlePostRequest라는 메서드명을 가지며, 이 메서드에 @PostMapping 어노테이션이 부여되어 POST 요청을 처리한다는 것을 나타낸다.
@PostMapping은 기본적으로 @RequestMapping을 상속받아서 POST 메서드에 특화된 단축 표현으로 볼 수 있다.
따라서 @RequestMapping(method = RequestMethod.POST)와 같은 의미를 갖는다.
4.7 URL 매핑
HelloViewController 클래스는 클래스에 @RequestMapping("hello") 어노테이션을 부여하고 요청 핸들러 메서드에 @GetMapping("view") 어노테이션을 부여 했다. 이것으로 클라이언트가 URL(http://locahost:8080/hello/view)로 GET 메서드를 보내면 HelloViewController 클래스의 helloView 메서드가 호출된다.
4.8 뷰 생성
<!-- html 기본 템플릿 -->
<html>
<head>
<title>View Sample</title>
</head>
<body>
<h1>Hello View!!!</h1>
</body>
</html>

비즈니스 로직을 처리하는 부분은 아직 완성하지 않았지만, 컨트롤러와 뷰만 생성하여 클라이언트가 요청한 URL에 대응해서 요청 핸들러 메서드가 반환값으로 뷰 이름을 돌려주고, 대응하는 뷰를 표시하는 스프링 MVC의 흐름을 조금 이해할 수 있다.
'스프링 프레임워크 첫걸음(구버전)' 카테고리의 다른 글
7. 요청 파라미터 취득하기 (0) | 2025.01.12 |
---|---|
6. 템플릿 엔진 알아보기 (0) | 2025.01.12 |
4. 데이터베이스 작업 (0) | 2025.01.12 |
3. 스프링 프레임워크의 핵심 기능 (0) | 2025.01.11 |
2. 자바 기초 지식 복습 (0) | 2025.01.11 |
댓글