YOONJI
article thumbnail

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ดํŽด๋ณด๊ธฐ

# ์˜์กด๊ด€๊ณ„

**Gradle์€ ์˜์กด๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ๋‹ค์šด๋กœ๋“œ ํ•œ๋‹ค.

์˜ˆ์ „์—๋Š” ์›น ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ์„œ๋ฒ„์— ์„ค์น˜ํ•˜๊ณ  ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๋ฐ€์–ด๋„ฃ๋Š” ์‹์œผ๋กœ ์›น ์„œ๋ฒ„์™€ ๊ฐœ๋ฐœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์—ˆ์Œ

> ์š”์ฆ˜์—๋Š” ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์›น์„œ๋ฒ„๋ฅผ ๋‚ด์žฅ(์ž„๋ฒ ๋””๋“œ)ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ” ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ๋งŒ ์‹คํ–‰ํ•ด๋„ ์›น ์„œ๋ฒ„๊ฐ€ ๋œธ

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•˜๋‚˜๋ฅผ ๋นŒ๋“œํ•ด์„œ ์›น ์„œ๋ฒ„์— ์˜ฌ๋ฆฌ๋ฉด ๋๋‚˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ์ถ”์„ธ์ด๋‹ค.

 

 

# ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

- ์Šคํ”„๋ง ๋ถ€ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • spring-boot-starter-web
    • spring-boot-starter-tomcat: ํ†ฐ์บฃ (์›น ์„œ๋ฒ„)
    • spring-webmvc: ์Šคํ”„๋ง ์›น MVC
  • spring-boot-starter-thymeleaf: ํƒ€์ž„๋ฆฌํ”„ ํ…œํ”Œ๋ฆฟ ์—”์ง„ (View)
  • spring-boot-starter (๊ณตํ†ต): ์Šคํ”„๋ง ๋ถ€ํŠธ + ์Šคํ”„๋ง ์ฝ”์–ด + ๋กœ๊น…
    • spring-boot
      • spring-core
    • spring-boot-starter-logging
      • logback, slf4j 

- ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • spring-boot-starter-test
    • junit: ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ
    • mockito: ๋ชฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • assertj: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ํŽธํ•˜๊ฒŒ ํ•ด ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • spring-test: ์Šคํ”„๋ง๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ง€์›ํ•ด ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

# ๋กœ๊น…์— ๋Œ€ํ•˜์—ฌ

> ์‹ค๋ฌด์—์„œ๋Š” System.out.println()์ด ์•„๋‹Œ ๋กœ๊ทธ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•จ

๋กœ๊ทธ๋กœ ๋‚จ๊ฒจ์•ผ ์‹ฌ๊ฐํ•œ ์—๋Ÿฌ๋ฅผ ๋”ฐ๋กœ ๋ชจ์•„๋ณด๋Š” ๋“ฑ ๋กœ๊ทธ ํŒŒ์ผ์˜ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ

 

logback(์‹ค์ œ ๋กœ๊ทธ๋ฅผ ์–ด๋–ค ๊ตฌํ˜„์ฒด๋กœ ์ถœ๋ ฅํ•  ๊ฒƒ์ธ๊ฐ€), slf4j(์ธํ„ฐํŽ˜์ด์Šค) ์กฐํ•ฉ์„ ๋งŽ์ด ์‚ฌ์šฉ,

ํ‘œ์ค€์œผ๋กœ ์ฑ„ํƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— spring-boot-starter-logging์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜์กด๊ด€๊ณ„์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ฃผ์ž…๋จ

 


View ํ™˜๊ฒฝ์„ค์ •

# Welcome Page ๋งŒ๋“ค๊ธฐ 

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” static/index.html ์„ ์˜ฌ๋ ค๋‘๋ฉด Welcome page ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

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

Welcome Page

 

# Thymeleaf ํ…œํ”Œ๋ฆฟ ์—”์ง„

Controller๋ฅผ ์ด์šฉํ•œ ๊ฐ’ ๋ฐ˜ํ™˜ ๋ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

> src/main/java/hello.hellospring/controller/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";
    }
}

 

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

 

๋‘ ๊ฐœ์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋’ค ํ”„๋กœ์ ํŠธ๋ฅผ Stop > ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

 

localhost:8080/hello

 

# Thymeleaf ํ…œํ”Œ๋ฆฟ ์—”์ง„ ๋™์ž‘ ํ™˜๊ฒฝ

> ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ localhost:8080/hello๋ฅผ ๋˜์ง€๋ฉด ๋‚ด์žฅ ํ†ฐ์ผ“ ์„œ๋ฒ„๊ฐ€ ๋ฐ›์•„์„œ Spring์—๊ฒŒ ๋˜์ง

> helloController์˜ @GetMapping์„ ํ†ตํ•ด "hello" url์— ๋งคํ•‘๋จ

> Spring์ด model(data: hello!!)๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋„ฃ์–ด์ฃผ๊ณ  hello ๋ฆฌํ„ด

> hello ๋ฆฌํ„ด = resources/templates/hello๋ฅผ ์ฐพ์•„์„œ ๋ Œ๋”๋ง ์‹œ์ผœ๋ผ (data : hello!!๋ฅผ ํ™”๋ฉด์— ๋„˜๊ธฐ๋ฉด์„œ)

์ฆ‰, ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฆฌํ„ด ๊ฐ’์œผ๋กœ ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ทฐ ๋ฆฌ์กธ๋ฒ„(viewResolver)๊ฐ€ ํ™”๋ฉด์„ ์ฐพ์•„์„œ ์ฒ˜๋ฆฌ

> ๊ธฐ๋ณธ์ ์ธ ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ์„ธํŒ…์€ resources/templates ์•„๋ž˜์˜ {ViewName}.html์„ ์ฐพ์•„์„œ ๋งคํ•‘

 


๋นŒ๋“œ ๋ฐ ์‹คํ–‰

**๋ฐ˜๋“œ์‹œ IntelliJ์—์„œ ํ”„๋กœ์ ํŠธ ์ข…๋ฃŒ ํ›„ ์‹คํ–‰

$ ./gradlew build
$ cd build
$ cd libs

 

> ์ƒ์„ฑ๋œ jar ํŒŒ์ผ๋ช…์„ ls -arlth๋ฅผ ํ†ตํ•ด ํ™•์ธ ํ›„ ์‹คํ–‰(์•„๋ž˜ ์ฝ”๋“œ ์ž…๋ ฅ)

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

 

> ์ •์ƒ์ ์œผ๋กœ ๋ฐฐํฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด localhost:8080 ์ ‘์†

 

์›น ์ ‘์† ๊ฒฐ๊ณผ

 

์„ฑ๊ณต-!

๋‚ด์šฉ ๋ฐ ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : ๊น€์˜ํ•œ์˜ ์Šคํ”„๋ง ์ž…๋ฌธ    

'๐Ÿ–‹๏ธ study > spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring Intro] Section 05. ํšŒ์›๊ด€๋ฆฌ ์˜ˆ์ œ - ์›น MVC ๊ฐœ๋ฐœ(ํšŒ์› ์›น ๊ธฐ๋Šฅ, ํ™ˆ ํ™”๋ฉด ์ถ”๊ฐ€, ๋“ฑ๋ก, ์กฐํšŒ)  (0) 2023.01.25
[Spring Intro] Section 04. ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„_์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •, ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋กํ•˜๊ธฐ  (0) 2023.01.23
[Spring Intro] Section 03. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ_๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ, ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ, ํšŒ์› ๋„๋ฉ”์ธ๊ณผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ, ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ, ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ, ํšŒ์› ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ  (0) 2023.01.20
[Spring Intro] Section 02. ์Šคํ”„๋ง ์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ_์ •์  ์ปจํ…์ธ , MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„, API  (0) 2023.01.16
[Spring Intro] Section 01. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์„ค์ •  (0) 2023.01.16
profile

YOONJI

@๊ธฐ๋ฎจ์ง€

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!