[Spring] 입문-1. 프로젝트 생성 / View/ 라이브러리 / Tymeleaf / devtools / 빌드 및 실행

Jina·2023년 5월 2일
0

Spring

목록 보기
1/9
post-thumbnail

다음의 모든 내용은 김영한님의 스프링 입문 강의에서 가져온 것임을 밝힙니다.

📍프로젝트 환경설정

1. Java와 IDE를 먼저 설치

Java 11을 사용했고 , IDE로는 IntelliJ를 사용했다.

이후 프로젝트에서는 3.0 이상 버전의 Spring Boot를 사용하기 위해 Java 17로 변경했다.

2. 스프링 부트 기반으로 스프링 프로젝트 생성

스프링부트 스타터 https://start.spring.io를 이용!
프로젝트에 맞게 설정한 후 Generate를 클릭하면 .zip 파일이 다운로드 된다.

Project

Gradle - Groovy

Language

Java

Spring Boot

  • 정식 릴리즈된 버전(snapshot, m2 제외) 중 최신으로 사용!
  • Java 11을 사용하려면 2.0 버전 중 가장 최신 버전인 2.7.11 (3.0 이상 버전은 Java 17 이상이어야 한다)

    이후 프로젝트는 Java 17로 변경하여 3.0 이상 버전을 사용했다.

    • 3.0 이상 버전은 javax 패키징 이름이 javax.~가 아니라 jakarta.~이어야 한다! 예를들어, javax.persistence.Entity => jakarta.persistence.Entity
    • H2 데이터베이스를 2.1.214 이상의 버전으로 사용해야 한다!

Metadata

  • Group: 보통은 기업명 사용 (지금은 간단히 hello)
  • Artifact: hello-spring

Dependency

강의에서는 다음의 두가지를 선택했다.

  • Spring Web : Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container.
  • Thymeleaf : A modern server-side Java template engine for both web and standalone environments. Allows HTML to be correctly displayed in browsers and as static prototypes.

3.0 이상 버전에서는 Validation도 반드시 추가해야 하며, Lombok도 추가하면 좋다!

  • Validation : Bean Validation with Hibernate validator.
  • Lombok : developer tool! Java annotation library which helps to reduce boilerplate code.

<jpa 활용> 강의에서는 H2 Database, Spring Data JPA 도 추가했다.

3. 압축을 풀고, IntelliJ에서 build.gradle 실행

라이브러리 다운을 위한 시간이 조금 소요된 후, 생성된 파일은 다음과 같다.

main & test

생성된 프로젝트는 다음과 같이 maintest로 나눠져 있다.

build.gradle

build.gradle 파일에는 1번에서 설정한 것들이 저장되어 있다. 이런 것들을 일일이 입력하지 않아도 되는 것이 스프링 부트의 장점인 것!
참고로 12행의 mavenCentral()은 해당 사이트에서 라이브러리들을 다운로드 받으라는 것이다. 특정 사이트 url을 넣을 수도 있다.

.gitignore

git에 올라가면 안 되는 것들도 자동으로 생성되어 있다.

.gradle.idea는 IntelliJ에서 자동으로 생성되는 것들이므로 제외한다.

4. hello 파일 실행

다음과 같이 자동 생성되어 있다. 단순히 실행시키면 된다!

5. 프로젝트 생성 완료!

8080 포트에 생성되었다.
스프링부트는 Tomcat이라는 웹서버를 내장하고 있다.

localhost:8080 를 확인하면 다음과 같이 사이트를 볼 수 있다! (아직 아무것도 없으니 에러 페이지다)


📍 라이브러리 살펴보기

Gradle은 의존관계가 있는 라이브러리도 함께 다운로드 한다!

화면 우측 상단의 Gradle을 클릭하면 Dependencies를 확인할 수 있다.

  • spring-boot-starter-web 라이브러리 : sprint-boot-starter-tomcat, spring-webmvc도 당겨온다.
  • spring-boot-starter 라이브러리 : spring-core, starter-logging등도 당겨온다.

📍 View 환경설정

이제는 에러페이지가 아닌 간단한 페이지를 만들어보자.

💡 Welcome 페이지

스프링부트는 Welcome 페이지(첫 화면)로 index.html 파일을 이용한다!

💡스프링부트의 공식 메뉴얼은?
1. https://spring.io
2. project> Spring boot> learn 에서
3. 버전에 맞는 Referenc Doc.
( •̀ ω •́ )✧

검색으로 필요한 것들을 찾는 연습을 하자! 참고로 welcome 페이지 내용은 'Web' 섹션에 있다.

resources/static/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>

localhost:8080에서 첫 화면에 Hello라는 문자와 링크가 성공적으로 나타난다 (✿◡‿◡)

💡 템플릿 엔진

본격적으로 동적인 웹을 만들기 위해 템플릿 엔진을 사용해보자!.

Tymeleaf

스프링부트에서는 3가지의 템플릿엔진을 사용할 수 있다. (아래 공식문서 참고)
강의에서는 Tymeleaf를 사용하여 /hello 페이지를 만들어보았다.

Controller

다음과 같은 HelloController를 작성했다. 하나씩 뜯어보자!

@Controller // 컨트롤러에는 이 애노테이션을 달아주어야 한다.
public class HelloController {

    @GetMapping("hello")   // '/hello'일 때 아래 메소드를 호출
    public String hello(Model model){    // controller에서는 Model에 데이터를 담아 view로 보낸다.
        model.addAttribute( "data", "hello!!");
        
        return "hello";	// 문자열 return
    }
}

➰ @GetMapping("hello")

localhost:8080/hello 가 요청되면
Controller에서 @GetMapping("hello") 아래의 메소드가 실행된다.

➰ return "hello";

controller에서 문자(hello)를 return 하면,
resources/templates/ 하위의 문자.html 파일을 불러온다.

resources/templates/ hello.html 파일

<html xmlns:th="http://www.thymeleaf.org"> 으로 선언한 후,
바디에서 <p th:text="'안녕하세요. ' + ${data}"> 안녕하세요. 손님 </p>

<!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>
<!--th가 tymeleaf를 뜻함-->
<!--HelloController에서 attribute로 사용한 data가 여기서 쓰임-->
<p th:text="'안녕하세요. ' + ${data}"> 안녕하세요. 손님 </p>
</body>
</html>

확인

localhost:8080/ hello을 입력하면
hello.html 파일에 입력한 내용들이 나타나는 모습이다 ♪(´▽`)

📍 devtools 라이브러리

spring-boot-devtools 라이브러리 추가하면
서버 재시작 없이도 html 파일 리컴파일만으로 View 파일 변경이 가능하다!

1. build.gradle 파일에 다음 dependency 추가

dependencies {
	(생략)
	implementation 'org.springframework.boot:spring-boot-devtools'
}

2. 확인

서버 재시작시 restartedMain이라고 뜬다면 devtools가 잘 작동하고 있는 것이다.

3. html 파일 변경 후 -> 해당 파일만 Recompile



📍 빌드 및 실행

1. 빌드

cmd 창에서 gradle.bat 파일이 있는 위치로 이동하여

$gradlew build

이제 /build/libs 하위에 hello-spring-0.0.1-SNAPSHOT.jar 파일이 생성되었으니, 실행만 시키면 된다!! (ノ◕ヮ◕)ノ*:・゚✧

2. 실행

../build/libs로 이동하여

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


서버 배포시에는 빌드 후 .jar 파일만 복사하여 서버에 넣고,
java-jar 으로 실행하면 된다.

0개의 댓글