본문 바로가기
  • 개발공부 및 일상적인 내용을 작성하는 블로그 입니다.
Spring basic

스프링 입문 : 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - View 환경설정 및 빌드하고 실행하기

by 방구석 대학생 2021. 10. 10.

"인프런의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 듣고 작성한 글 입니다."

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

 

스프링 부트의 Welcome Page 기능

프로젝트 에서 resources/static/ 경로에 index.html 파일을 만들어두면 index.html 파일을 메인 화면으로 하는 Welcome Page 기능을 제공한다.(localhost:8080 의 메인 홈페이지 - 자세한 내용은 spring 공식문서 참조)

- 스프링 부트 공식문서 Welcome Page 관련 :

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-web-applications.spring-webflux.welcome-page

 

Spring Boot Features

Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is performed in the earliest

docs.spring.io

 

템플릿 엔진(Thymeleaf, JSP)

그냥 static 폴더에 올려진 html 파일들은 아무런 기능없이 그저 정적인 화면만을 제공하지만 Thymeleaf, JSP 와 같은 템플릿 엔진을 활용하면 원하는 기능을 구현하는등 원하는 대로 바꿀 수 있게 된다.

 

- HelloController.java

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";
    }
}

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

 

th -> Thymeleaf 템플릿 엔진을 통해 사용할 수 있는 키워드

${data} -> HelloController.java 에서 model 객체에 지정해준 속성명(attributeName), 속성값(attributeValue) 으로는 hello! 가 들어있다.

 

* 동작 순서

웹 브라우저에서 localhost:8080/hello 주소를 서버 측에 전달 -> 스프링 부트의 내장 톰캣에서 주소를 전달받음

-> 스프링 컨테이너 내부에 해당 하는 주소로 매핑된 메소드가 있는지 찾음 -> HelloController 에서 hello 메소드에 해당 주소가 Get 방식으로 매핑되어 있는 것을 확인 -> 메소드 실행

-> 메소드에 작성되어 있는 대로 model 객체에 data 속성을 만들어 준 후 그 값으로 hello! 를 적재

-> return "hello"; (resources 폴더 내부에 hello 라는 이름의 뷰 파일(html 또는 jsp 파일) 을 찾아서 화면을 랜더링 -> 해당하는 화면을 실행시켜라)

 

* 컨트롤러에서 리턴 값으로 문자열을 반환하면 뷰 리졸버(viewResolver) 가 화면을 찾아서 요구하는 기능을 처리한다.

* 스프링 부트 템플릿엔진 기본 viewName 매핑 : resources/templates/ + (ViewName : html, jsp 파일등의 이름) + .html

(jsp 파일을 기본으로 찾으려면 application.properties 파일에서 따로 설정을 해주어야 한다.)

 

 

프로젝트 빌드하고 실행하기

리눅스 또는 깃 배쉬를 통해 hello-spring 폴더 내부에서 ./gradlew build 명령을 입력하면 프로젝트가 빌드된다.

프로젝트 빌드 중
프로젝트 빌드 완료

빌드 성공시 cd build 를 통해 build 폴더 내부에 들어가서 다시 한번 cd libs 를 통해 libs 폴더로 들어간다.

그러면 hello-spring-0.0.1-SNAPSHOT.jar 와 같이 jar 파일이 생성되어 있는 것을 확인할 수 있다.

(여기서 jar 는 서버 배포용 파일이다.)

 

마지막으로 java -jar hello-spring-0.0.1-SNAPSHOT.jar 명령을 실행하면 해당 파일을 통해 spring 이 실행되는 것을 확인할 수있다.

스프링 실행 성공

이를 통해 스프링이 실행된 후 localhost:8080 주소로 다시 접속해 보면 인덱스 페이지와 링크 페이지가 브라우저에 잘 출력 되는것을 확인할 수 있다.

-> 여기서 주의할 점 : IntelliJ 에서 구동 시키던 내장 톰캣은 중지 시킨 후 해당 과정을 수행해야 한다.

내장 톰캣이 구동되고 있는 상황에서 위와 같이 리눅스에 jar 파일을 실행 시키면 8080 포트에 서로 다른 프로세스 요청이 들어오게 되는데 이렇게 될 경우 한 포트에서 두 개의 프로세스가 동작하는 것은 불가능하므로 에러가 발생하게 된다.