web

View 환경설정

ㅇㅇ잉 2021. 4. 20. 21:28

인프런 김영한님의 < 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 > 강의

 

wellcom page를 만들어보자.

resources > static : 변하지 않는 정적 파일

에다가 index.html을 추가하자.

 

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE HTML>
<html>
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charser=UTF-8"/>
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>
cs

그리고 서버를 다시 키면,

 

이런 페이지가 뜬다.

 

spring boot는 spring생태계를 감싸서 편리하게 사용할 수 있도록 도와주는데, 어마어마하게 커서 필요한 걸 찾는 능력이 중요함.

spring.io에 들어가서 Projects>Spring Boot>LEARN가면 버전에 따라 선택한 뒤 Reference Doc.를 뒤져보자

spring은 먼저 static>index.html을 찾는데, 만약 못찾으면 index템플릿을 찾고 뭐 이런식으로 동작한다고 한다.

이런식으로 메뉴얼에서 검색할 수 있어야 한다,,

 


Tymeleaf 템플릿을 이용해보자.

 

https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-template-engines

spring boot auto-configuration은 FreeMaker등 4가지 템플릿을 제공함

 


실제로 동작하는 화면을 만들어보자.

제일 먼저 웹 애플리케이션에서 첫번째 진입점인 controller를 생성한다.

 

패키지로 이렇게!

 

그 안에 HelloController class를 만들고,

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 {
 
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data""hello!!");
        return "hello";
    }
 
}
 
cs

이렇게 적어준다.

 

Controller는 꼭 어노테이션을 적어줘야함.

 

 

그리고 html파일 만들기

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE HTML>
<html xmlns:th="http://www.tymeleaf.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>
cs

 

 

 


동작은 아래 주석에

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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은 Get,Post할때 그 Get.
    @GetMapping("hello"//웹 어플리케이션에서 /hello라고 들어오면, 이 메소드를 호출해줌
    public String hello(Model model){ //Spring이 model이라는 걸 만들어서 넣어줌
    
        //key:data, value:hello value에서 hello가 치환됨.
        model.addAttribute("data""hello!!"); 
        return "hello"//resources에 있는 hello를 찾아서 렌더링하라는 거. 이 화면을 실행시켜라!(hello.html)
        //spring은 보통 resources > templates 아래 있는 hello를 찾음. 
    }
 
}
 
cs

 

 

컨트롤러에서 return값으로 문자를 반환하면, viewResolver가 화면을 찾아서 처리함.

이 viewResolver는 어떻게 동작하냐면

 

spring boot 템플릿 엔진은 기본적으로 viewName 매핑되는데 

resources:tamplates/ + {ViewName} + .html

이렇게 바뀐다. 그래서 tamplates 밑에 있는 hello.html이 열리는 것!

 

따라서 hello.html 안에

<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>

${data}는 model에서의 key값인 것. 그래서  

<p th:text="'안녕하세요. ' + hello!! " >안녕하세요. 손님</p>

 이렇게 hello!!로 바뀜.

 

 

!Tip

spring-boot-devtools 라이브러리를 추가시 html 파일을 컴파일만 해주면 서버 재시작 없이 View파일 변경이 가능해진다!

 

 


빌드해서 실행해보자.

 

 

cmd창에서 hello-spring 폴더로 경로를 이동하고 파일 목록을 확인하는 dir명령어 입력해보면,

이런게 나온다. 그리고

//gradlew는 MAC, gradlew.bat은 WINDOW. 
gradlew build

하면 빌드됨.

 

그러면 필요한 라이브러리 다운받기도하고, 빌드 폴더가 생기는데

cd build\libs해보면

.jar파일이 생성되어있는 것을 볼 수 있다.

java -jar로 java를 실행시키면

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

spring이 뜬다.

잘 실행됨

다시 localhost/8080에 접속하면 되는걸 알 수 있다.

종료는 Ctrl+C

 

 

8080 port는 동시에 못띄우니까 인텔리제이에서 꼭 끄고 실행하자!

 

서버 배포할때는 jar파일만 복사해서 서버에 넣어주고, java -jar 로 실행해주면 서버에서도 동작하게 됨.

과거엔 톰캣을 설치하고 특정 폴더에 다 집어넣어야했지만 지금은 jar파일 하나만 집어넣고 실행시키면 끝남,, 편리하다

 

 

실행이 잘 안된다면 아래 참고

//hello-spring폴더로 이동 후
gradlew clean //build폴더 없어짐
gradlew clean build //완전히 지우고 다시 build함! 잘 안된다면 이렇게 해보자

 

 

여기까지 start.spring.io로 프로젝트 생성했고, 라이브러리, 뷰환경, 템플릿 엔진 돌려봤고, build하고 실행하는 것 까지 끝