SpringBoot - 라이브러리, View 환경설정, 빌드하고 실행하기

이정우·2022년 1월 20일
0

Spring Boot

목록 보기
2/6

스프링부트는 톰켓을 라이브러리에 기본적으로 다운받아줌. 따로 톰켓을 다운받는 수고가 필요 없어짐!

  • SpringWeb 라이브러리에는 MVC 라이브러리와 톰켓 라이브러리가 존재.
  • 또한 스프링부트는 라이브러리에 대해 의존 관계를 알아서 관리해줌 > A라이브러리를 쓸려면 B라이브러리가 필요한데 지금까지는 A깔고 오류 뜨면 B를 찾아갔지만 스프링부트에서는 자동적으로 A,B를 다 다운받아줌. 매우 편리함.
  • log : 실무에선 System.out.print 대신 log를 사용. 그 이유는 log를 사용해야 중요 에러등을 로그를 통해 통합적으로 관리하고 모을 수 있음.
  • Junit : test 관련 라이브러리.

index.html

main > resource > static 폴더 밑에 index.html을 만들어주면 흔히 말하는 웰컴 페이지(처음 웹 페이지를 들어가면 디폴트 값으로 들어가지는 페이지)가 생성됨.

기술 찾기

Spring Boot의 작동 원리나 기타 기술 검색하는 사이트

https://spring.io/ 해당 url 접속 > 상단 드랍 메뉴의 Project > Spring Boot > Lean > 알맞는 버전 > Reference Documentation > 원하는 내용 찾기

thymeleaf 템플릿 엔진

우리가 아는 일반적인 HTML 페이지는(DOCTYPE HTML HTML head 등의 태그로 시작하는 동적인 페이지) 그냥 코드를 서버로 던져주는 동적인 형태. 여기에 여러 동작(db와의 연동 등)을 추가하기 위해 필요한게 템플릿 엔진.즉 MVC중 컨트롤러가 됨.

Controller

main > java > 내 자바 폴더 > controller(패키지) > 컨트롤러 이름.

컨트롤러는 class파일이므로 기본적으로 public class 컨트롤러이름 {} 형태로 생성. 여기서 public 위에 @Controller 라고 쳐줘야함.

...

@Controller //어노테이션..사전적 의미는 주석. 컨트롤러 기능을 사용하겠다.
public class HelloController {
    @GetMapping("hello") // hello라는 이름으로 Mapping 시켜줌. Get은 get,post방식의 get
    public String hello(Model model) { //mvc에서의 model.
        model.addAttribute("data", "hello!!"); //model값에 키, 벨류 값을 추가해줌.
        return "hello";
    }
}

hello.html < hello로 매핑된 값을 컨트롤러에서 찾아옴

...
<html xmlns:th="http://www.thymeleaf.org">  <!-- tymeleaf 문법을 사용하기 위해 선언 -->
...
<body>
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p> <!-- typeleaf 문법을 사용하기 위해 위에서 선언한 th(thymeleaf 링크)를 불러와줌. ${data}를 하게 되면 controller에서 매핑시켜준 값중 key값이 data 값의 value 값을 불러옴. 
</body>

이후 localhost:8080/hello 를 치면 해당 페이지가 로딩됨.

ymeleaf 템플릿엔진 동작 순서

  • 1.웹 브라우저에 localhost:8080/hello 입력 > 스프링 부트에 탑재된 내장 톰켓 서버에서 /hello 값을 스프링에 물어봄.

  • 2.스프링 부트의 스프링 컨테이너에서는 컨트롤러 중에 hello라는 값으로 매핑된 메서드를 찾아서 실행시킴. 우리는 model로 만들었기에 spring에서 매개변수 model값으로 값을 넘겨줌. 작성한 코드 기반으로 model의 data(key)값에 hello!!(value)값이 생성되고 return "hello"도 실행됨. 여기서 hello는 단순히 String 값이 아니라 resource의 templates에 생성한 hello.html의 hello값을 가르키는 것이고 해당 html 화면을 실행 시키라는 의미! 그래서 해당 페이지를 찾아서 thmeleafe 템플릿 엔진이 처리를 해서 웹 브라우저에서 변환된 hello.html을 실행.

-- 즉, 컨트롤러에서 return 값으로 문자를 주면 해당 값을 뷰 리졸버(viewResolver)가 해당 문자와 맞는 html 파일을 찾아서 처리해줌. 여기서 뷰 리졸버는 기본적으로 viewName 매핑 기능을 지원하는데 해당 기능은 resources > templates > 에서 viewName.html값을 찾아주는 기능.

devtools 라이브러리 사용하기.

vsc에서 썼던 live server와 같은 기능을 제공해주는 라이브러리. 해당 라이브러리를 사용하면 코드를 수정 후 매번 서버를 재시작해주지 않고 리빌딩만 해주어도 바로 View파일에 적용되는 것을 볼 수 있다.

적용 방법

    1. File의 settings에서 Tools에 있는 Advanced Settings 클릭 > 맨 위 Compier 의 Allow auto-make to start even if developed application is currently running 메뉴 클릭하여 활성화
    1. Build, Execution, Deployment > Compiler > 중간에 Build project automatically 클릭하여 활성화
    1. 인테리j의 build.gradle > dependencies에 developmentOnly 'org.springframework.boot:spring-boot-devtools' 을 추가.
    1. Gradle을 리로드 해줘서 해당 라이브러리를 다운로드함.
    1. view에서 코드를 바꾸면 서버 재시작 없이 잠시 후 웹 페이지를 새로고침 하면 바뀐 내용이 적용된 것을 볼 수 있음.

idea 없이 코드 실행하기

인텔리 j라는 idea로 편하게 코드를 컴파일 할 수 있지만 서버상에서 바로 코드를 실행해야 하는 특수한 경우에는 cmd로 실행시키는 경우도 존재. 또한 배포시에는 해당 jar 파일만 배포해주면 톰켓을 따로 만들거나 해주지 않아도 배포가 가능.

방법

    1. 만들어둔 스프링 부트 프로젝트 파일로 cmd 이동
    1. build 파일들 다운로드
    1. build > lib >에 가서 java -jar jar파일명 으로 실행.

! 주의할 점
인텔리j가 실행중이면 해당 port를 사용하고 있는 상황이기에 cmd로 실행시키기 전에 꺼줘야한다. 그렇지 않으면 port 중복으로 인해 실행시 오류 발생.

출처 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술_섹션1 강의 내용

profile
프로그래밍 공부 중!

0개의 댓글