후라이

Spring Boot - 스프링 입문 (2) 본문

Spring

Spring Boot - 스프링 입문 (2)

힐안 2024. 1. 7. 14:17

 

 

이제 사용자에게 보여지는 웹 페이지의 시각적인 부분을 살펴보자.

 


View 환경설정

 

 

1. Welcome 페이지 만들기

 

<!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>

 

 

resources/static/index.html 파일을 만들어 위처럼 코드 작성을 한 후 Run

위 방식은 그냥 정적 페이지를 생성하는 것! -> 내가 만든 걸 띄우기만 한다.

 

  • 스프링 부트가 제공하는 Welcom Page 기능

- static/index.html을 올려두면 Welcome page 기능을 제공한다.

Spring Boot Features

 

 

 

2. thymeleaf 템플릿 엔진

 

thymeleaf 공식 사이트 : https://www.thymeleaf.org/ 

 

Thymeleaf

Integrations galore Eclipse, IntelliJ IDEA, Spring, Play, even the up-and-coming Model-View-Controller API for Java EE 8. Write Thymeleaf in your favourite tools, using your favourite web-development framework. Check out our Ecosystem to see more integrati

www.thymeleaf.org

 

thymeleaf는 서버 측 Java 템플릿 엔진으로, 주로 웹 어플리케이션 개발에서 사용

-> HTML, XML, JavaScript, CSS 및 일반 텍스트와 같은 여러 마크업 언어를 지원한다.

 

Spring에서는 Thymeleaf를 뷰 템플릿 엔진으로 채택하는 경우가 많음

@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!");
        //각각 key, value
        return "hello"; //template에 있는 hello.html에 연결해라
        //thymeleaf 템플릿 엔진 처리
    }
    }

 

- @Controller : 해당 클래스가 스프링 MVC에서 컨트롤러 역할을 하는 클래스임을 나타냄 -> 웹 요청 처리

 

- @GetMapping("hello") : HTTP GET 요청을 처리하는 핸들러 메서드인 'hello'를 정의

-> "/hello" 경로로 들어오는 GET 요청을 이 메서드가 처리함

 

- public String hello(Model model) : Model 객체를 매개변수로 받음

Model 객체는 컨트롤러에서 뷰로 데이터를 전달하는 데 사용 

 

- model.addAttribute("data", "hello!!") : "data"라는 키와 "hello!!"라는 값을 사진 value를 'Model' 객체에 추가

-> 뷰로 전달되어 화면에 표시됨

 

- return "hello" : 컨트롤러 처리 결과로 사용할 뷰의 이름

-> hello.html이라는 Thymeleaf 템플릿이 호출되어 화면에 표시됨.

 


 

<Model 객체 알아보기>

 

Controller의 메서드는 Model이라는 객체를 매개변수로 받을 수 있다.

Model은 스프링 MVC에서 컨트롤러 뷰로 데이터를 전달하는 데 사용!

 

여러 메서드를 가지고 있는데,

'addAttribute' 메서드가 가장 일반적으로 사용된다.

이 메서드를 통해 컨트롤러 -> 뷰 데이터 전달이 이루어진다. 

 

개발자는 직접 model을 생성할 필요없이 파라미터로 선언만 하면 스프링에서 객체가 만들어진다.

 

<!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>

 

 

컨트롤러에서 리턴 값으로 문자를 반환하면

ViewResolver가 화면을 찾아 처리한다.

 

과정을 정리하면,

 

1. 웹 브라우저에서 localhost:8090/hello와 같은 URL로 HTTP 요청을 보냄

2. 내장 톰켓 서버는 이 요청을 받아들이고, Spring DispathcherServlet이 요청을 처리함

3. Spring DispatcherServlet은 컨트롤러를 찾기 위해 @Controller 애너테이션이 붙은 클래스들을 스캔

--> 여기서는 HelloController

4. HelloController 클래스에서 @GetMapping("hello") 애너테이션이 붙은 'hello' 메서드가 해당 URL 요청을 처리할 메서드로 선택

5. 'hello' 메서드가 실행되면서 'Model' 객체가 생성되고, 필요한 데이터가 추가됨

-> model.addAttribute("data", "hello!!")를 통해 data 키와 hello!! 값이 추가

6. 'hello' 메서드는 "hello" 라는 문자열을 반환하면서 스프링에게 이 요청을 처리한 결과로 사용할 뷰의 이름이

"hello" 라는 것을 알려줌

7. View Resolver는 이 뷰 이름("hello")을 기반으로 실제로 사용할 뷰 템플릿을 찾음

-> 템플릿 엔진이 Thymeleaf인 경우 "hello.html"을 찾아 렌더링

8. 렌더링 된 HTML이 웹 브라우저로 전송되어 화면에 표시

 

resources:templates/+{ViewName}+.html


 

 

.jar파일 build하기

 

앞에서 했던 방법은 intellij에서 Run시킨 것.

우리는 파일을 빌드하고 바로 실행시킬 수도 있음

 

[Window 사용]

 

- 콘솔 (저는 Git Bash 사용했습니다)로 이동 -> cmd,,

- 우리가 사용했던 hello-spring이 있는 파일로 이동

cd hello-spring

ll 명령어로 파일들을 확인해보면

 

gradle/

gradlew

gradlew.bat

 

이렇게 파일들이 있는데,

gradlew build를 입력하여 빌드해주면 됨

 

 

build 해주고 나면 build 폴더가 생긴 것을 알 수 있고

cd build/libs

java -jar hello-spring-0.0.1-SNAPSHOT.jar 

 

차례대로 수행

 

 

실행확인 완료 후

localhost:포트번호로 접속하면 해당 뷰도 잘 실행됨을 확인할 수 있음