인프런/스프링 입문

2. View 환경설정, welcome page 만들기,컨트롤러 생성, 웰컴페이지가 보이는 동작방식 , 콘솔에서 실행방법

backend dev 2022. 10. 3.

View 환경설정

 

 

Welcome Page 만들기

스프링부트는 

resources/static/index.html 와 같이
resources/static 위치에 index.html파일을 넣어주면 해당 index.html을 웰컴페이지로 사용한다.

main 아래 자바랑 같은 선상에 있는 resources 안에있다.

해당위치에 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>

다시서버를 실행해주면 

이런 결과가 보인다.

 

 

 

타임리프 활용 , 컨트롤러 생성

controlloer라는 새로운 패키지를 생성하고 그안에 helloController라는 자바파일을 생성해준다.

컨트롤러는 @controller라는 어노테이션을 사용해야한다.

다음과 같이 구성

model.addAttribute("data","hello!");

해당 명령어는 모델에 데이터를 담을 때 사용된다. (MVC , 모델 뷰 컨트롤러의 그 모델)

 

(이름,값)을 이용하여 해당 이름으로 모델에 넣은 값을 이용하거나

 

(값)만을 전달해 사용하기도 한다.

 

 

 

컨트롤러는 데이터를 가공하고 이를 view에 넘겨 페이지에 표시한다.

 

컨트롤러가 view로 데이터를 넘기는 방법중 하나는 모델을 이용하는것이고

 

model을 이용해서 해당 데이터를 view에 넘겨서 적절한 view를 생성하는 역할

 

hello 메서드를 보면 모델을 파라미터로 받는것을 볼 수 있다.

 

결과 확인

템플릿에 hello.html을 추가해줬다.

th는 타임리프를 의미하는것이고 ${data}의 data는 위에서 model.Attribute했던 부분에서 name을 data로 설정한 값의 value를 가져오기 위한 부분이다.

이렇게 해놓고 다시 실행해서 하이퍼링크가 된 hello를 눌러보면  /hello로 이동되면서 다음과 같은 화면이 보인다.

 

결과

동작방식

 

전체 동작 방식

 

1.

웹브라우저에서 localhost:8080/hello 라고 치면 톰캣에서 받아서

helloController에서 GETMAPPING("hello")를 가진 메소드가 있는지 찾아보고 있으면 실행시킨다.

( 웹브라우저에서 엔터치고 들어오는것은 get 방식)

 

2. 

@Controller
public class HelloController {

    @GetMapping("hello") //   도메인 /hello 할시 이 함수 실행
    public String hello(Model model)
    {
        //모델 뷰 컨트롤러의 그 모델임
        model.addAttribute("data","hello!");
        return "hello";

    }


}

위 부분이 실행되는것인데 이때 전달인자 Model은 스프링에서 넣어준다.

 

그 모델에다가 addAtribute를 이용하여 키는 data고 값은 hello!를 가지게 해주고 

 

return hello를 해주었는데  (hello를 컨트롤 + 클릭해보면 hello.html로 이동된다.)

 

키는 data 값은 hello!를 가진 모델을 넘겨주면서 hello.html를 실행시키라는 의미이다.

(resources -> templates에서 hello를 찾아 실행(렌더링)시킴)

=> 스프링부트가 templates/hello.html을 찾아서 타임리프 템플릿 엔진 처리함. ( ${data}와 같이 타임리프 쓰는부분을 받은 모델을 이용하여 처리해준다.)

ViewName 는 hello와 같은 html파일이름이고 

 

뷰 리졸버가 return hello를 이용하여 

resources/temlplates/hello.html 와 같이 매핑하여 화면을 찾아 처리한다.(실행시킨다)

 

즉 뷰 리졸버가 리턴값받아서 해당 화면 찾고 , 타임리프 템플릿 엔진이 html파일안에서 타임리프 명령어 사용된부분 처리하고 다시 웹브라우즈로 보내주는 느낌인것 같다.

 

 

참고 

 


콘솔에서 실행

 

mac 에서 실행방법

맥 방법

해당 템플릿(프로젝트)가 있는 위치로 이동 후 

./gradlew build를 해준다. 그러면 해당 위치에 build 폴더가 생기는데 그안에 libs폴더 안에 

hello-spring-0.0.1-SNAPSHOT.jar가 있을것이다.

 

cd build/libs 해주고 

java -jar hello-spring-0.0.1-SNAPSHOT.jar로 실행해주면됨

 

또는 이동하지않고

java -jar build/libs/hello-spring-0.0.1-SNAPSHOT.jar 로 실행해주면된다.

 

 

잘안된다싶으면

./gradlew clean build를 해주고 진행해본다.

원래있던 build폴더를 삭제해주고 다시 만들어주는 명령어임.

 

 

윈도우에서 실행법

윈도우에서 실행방법

 

1. gradlew build를 한다.

gradlew build한 결과

2. java -jar build/libs/hello-spring-0.0.1-SNAPSHOT.jar 를 한다.

실행 결과

cmd에서 오른쪽마우스 -> 설정 -> 컨트롤 c,v를 이용하여 붙여넣기 체크를 하면 쉽게 명령어 복붙 가능.

또는 절대경로 붙여넣기가 쉬워짐

 

cmd에서 실행시 8080포트로 프로세스 아이디 검색후 종료 시키거나 프로세스에서 java 종료하면 될듯하다.

 

인텔리제이에서 기본터미널인 파워쉘,깃배쉬을 이용해서 맥방식으로 키는것도 가능, 하지만 끄기위한 lsof 명령어는 안되는듯함 

 

그냥 인텔리제이에서 런버튼을 이용하자.

댓글