본문 바로가기

Backend/Spring

[Spring]정적, 동적 페이지 동작원리

728x90

 

 

 

 

Welcome page(정적 페이지 동작)

src>main>resources>static(정적페이지) 아래에 

index.html 을 제작해주면 localhost:8080으로 접속했을 때 뜨는 에러페이지를 

일반적인 페이지로 재단할 수 있다.

 

index.html

<!DOCTYPE HTML>
<html>
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>

 

다음과 같은 페이지가 만들어 진다.

 

 

동적 페이지 동작

본격적으로 간단한 스프링 코드를 통해 동작모습을 알아보도록 한다.

 

구조는 다음과 같다.

hellospring아래 controller 패키지를 만들어 주고, 그 안에 HelloController라는 클래스를 만들어준다. 

resources의 templates 아래에는 HelloController에서 동작하는 모습을 실제로 사용자에게 보여줄 hello.html을 만든다.

 

HelloController

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {


    //GET, POST등의 method할 때 Get임
    @GetMapping("hello") // "/hello"를 입력하면 method가 호출됨
    public String hello(Model model) {
        model.addAttribute("data","hello!!");
        return "hello";
    }
}

 

hello.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>

 

localhost:8080/hello로 접속할 경우 다음과 같이 뜨는 것을 알 수 있다.

hello.html 내에서

안녕하세요. + ${data} 부분에서 data

HelloController의 model.addAttribute("data","hello!!") 부분에서 data(변수이름)를 hello!!(변수값)로 치환해서 보여준 것이다. 

model.addAttribute(attributeName, attributeValue)

 

변수 값 부분에 hello!! 대신 DB에서 끌어온 값을 넣는 등 유용하게 사용할 수 있다. 

 

동작원리는 다음과 같다

 

동작 환경 그림 

출처 : 김영한님 스프링 입문 자료

웹 브라우저에서 localhost:8080/hello(url이 넘어오는 GET방식) 를 입력받으면,

Tomcat이라는 내장서버에서 받아 spring에게 던져 매칭되는 url이 있는지 알아본다.

spring에는 @GetMapping("hello")로 매칭이 되므로, 이와 매칭되어 작성된 hello method가 실행된다.   hello method는 매개변수로 model을 넘겨받는다. (model은 스프링이 만들어 넣어준다.) 

model에 data:hello라는 정보(addAttribute)를 담은 후,  "hello"를 return한다. 

이는 hello.html로 return한다는 의미와 같다. (= 즉, hello.html이라는 곳을 찾아가서 랜더링해라, hello.html을 화면에 띄워라)

스프링은 보통 resources/templates 내에서 return된 것을 검색한다( hello.html을 찾아보는 장소가 거기라는 의미)

그 후 그 페이지를 랜더링한다. 

다시말하면, 컨트롤러에서 리턴 값으로 문자를 반환하면 viewResolver가 화면을 찾아서 처리한다.

→ 기본적으로 veiwName mapping은 
resources::templates + (ViewName) + .hmtl 로 이루어진다

 

 

참고자료

 김영한 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술

  • View 환경설정
728x90