-
<Spring 입문> 3.2 스프링 웹 개발 기초_MVCSpring 입문 2025. 4. 16. 20:40반응형
Spring MVC
Model-View-Controller 패턴을 기반으로 한 웹 프레임워크
아래 코드는 다음과 같은 구조로 작동한다
요청 → 컨트롤러(Controller) → 모델에 데이터 담기(Model) → 뷰(template)로 전달 → 응답
경로: src > main > java > ... > controller > HelloController
@Controller public class HelloController { @GetMapping("hello-mvc") public String helloMvc(@RequestParam("key") String value, Model model) { model.addAttribute("key", value); return "hello-template"; } }
경로: src > main > resources > templates > hello.html
<html xmlns:th="http://www.thymeleaf.org"> <body> <p th:text="'hello ' + ${key}">값이 안 보이면 여기가 출력</p> </body> </html>
컨트롤러 (Controller) - 요청을 처리하는 부분
@Controller public class HelloController {
- @Controller는 Spring 프레임워크에서 웹 요청을 처리하는 클래스임을 나타내는 애너테이션
@GetMapping("hello-mvc") public String helloMvc(@RequestParam("key") String value, Model model)
- @GetMapping은 Spring MVC에서 제공하는 어노테이션
- @GetMapping()은 클라이언트에서 GET 방식으로 "/hello-mvc" 주소로 요청이 들어올 때 "helloMvc"메서드를 실행
- GET 방식은 URL(주소창)을 통해 데이터(ex: spring)를 보내서 서버에 요청하는 방식
- http://localhost:8080/hello-mvc?key= spring
- 요청 주소: /hello-mvc
- 요청 방식: GET
- 전달한 데이터: key=spring
- Model은 뷰에 전달할 데이터를 담는 객체이다.
모델 (Model) - 데이터 전달하는 부분
model.addAttribute("key", value);
- model에 "key"라는 이름으로 값(value)을 저장
- 이 데이터는 나중에 뷰(HTML 템플릿)에서 ${key}로 꺼내서 쓸 수 있다.
return "hello-template";
- ViewResolver는 hello-template이라는 뷰 이름을 받아서 실제 템플릿 파일을 찾아 렌더링합니다.
- 만약 Thymeleaf를 사용하고 있다면, hello-template.html 파일을 찾아서 해당 파일을 처리하고 데이터를 렌더링합니다.
뷰 (View) - 화면에 출력하는 부분
<p th:text="'hello ' + ${key}">값이 안 보이면 여기가 출력</p>
- ${key} → model.addAttribute("key", value)로 넣은 값이 들어감
- 예를 들어 /hello-mvc?key=spring 요청이 오면, hello spring 출력됨
전체 흐름 요약
- 사용자 요청: 클라이언트가 http://localhost:8080/hello-mvc?key=spring URL로 요청을 보냅
- 컨트롤러: HelloController에서 helloMvc 메서드가 실행되고, key라는 쿼리 파라미터 값을 받아 모델에 담음
- 모델: model.addAttribute("key", value) 코드로 key라는 이름의 값을 모델에 저장
- 뷰: hello-template.html 템플릿에서 key 값을 화면에 출력합니다. 이때 Thymeleaf는 ${key}를 찾아 그 값을 화면에 렌더링함
MVC 패턴이 이 코드에서 어떻게 적용되는지
- 모델 (Model): 데이터를 저장하고 전달하는 역할을 합니다. 여기서는 key와 그 값을 담은 모델 객체가 그 역할을 합니다.
- 뷰 (View): 데이터를 실제로 사용자에게 보여주는 역할을 합니다. Thymeleaf 템플릿은 key 값을 화면에 출력합니다.
- 컨트롤러 (Controller): 클라이언트의 요청을 받아 데이터를 처리하고, 뷰에 전달할 데이터를 모델에 담아서 반환합니다.
페이지 소스 보기
MVC에서 뷰(View)는 일반적으로 동적 콘텐츠를 렌더링하는데 사용된다. 정적 콘텐츠는 파일을 그대로 클라이언트에게 전달하는 반면, 동적 콘텐츠는 서버에서 데이터를 처리하고 이를 템플릿 파일을 통해 동적으로 렌더링하여 화면에 표시한다.
- 템플릿 파일이란: ${key}는 "데이터가 들어갈 자리" 이걸 포함한 전체 .html 파일이 템플릿 파일
정적 콘텐츠와 동적 콘첸츠의 차이점
- 정적 콘텐츠는 파일 자체를 그대로 반환한다. 서버는 파일을 변형하지 않고 그대로 클라이언트에 전달하는 방식이다. 예를 들어, CSS 파일이나 이미지 파일이 이에 해당한다.
- 동적 콘텐츠는 서버에서 처리된 데이터를 기반으로(/hello-mvc?key=spring) 뷰 템플릿(.html)을 동적으로 렌더링하여 클라이언트에 전달하는 방식이다. 이때 서버는 데이터를 변경하고, 이를 템플릿 엔진을 통해 HTML로 변환하여 응답한다. 예를 들어, key 값이 포함된 텍스트(hello spring)를 동적으로 만들어서 클라이언트에 보낸다.
'Spring 입문' 카테고리의 다른 글
<Spring 입문> 3.3 스프링 웹 개발 기초_API (1) 2025.04.17 <Spring 입문> 3.1 스프링 웹 개발 기초_정적 콘텐츠 (0) 2025.04.16 <Spring 입문> 1. View 환경 설정 (0) 2025.04.15 <Spring> 스프링 의존관계란? (0) 2025.02.20