[Spring ์ž…๋ฌธ] 1. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ์„ค์ •

2023. 6. 29. 16:18ยท๐Ÿฅ Web/โ›… Back-end | Spring
728x90

1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  • project - Gradle
  • spring boot version - 2.7.12
    • spring boot 3.x.x๋กœ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ java version์ด 17 ์ด์ƒ์ด์–ด์•ผํ•จ
  • java version 12(11)
  • artifact - output name
    • package name = name.artifact ํ˜•ํƒœ๋กœ ํŒจํ‚ค์ง•๋จ
  • Thymeleaf - template engine, ๋’ค์—์„œ ์„ค๋ช…
  • spring web - web builder

ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ

  • src/main
  • src/test ⇒ test ์ฝ”๋“œ๋ฅผ ๋”ฐ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ค‘์š”์„ฑ์ด ๋Œ€๋‘๋˜๋Š” ์ค‘.
  • build.gradle ⇒ ๋ฒ„์ „ ์„ค์ •, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋“œ ๋“ฑ
    • python virtual environment์—์„œ requirement.txt์ฒ˜๋Ÿผ dependencies๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ฐ€์ ธ๋‹ค๋‘๋Š” ๋А๋‚Œ
    • react์˜ ์ข…์†์„ฑ ๊ด€๋ฆฌ… ๋ณด๋‹ค๋Š” ๋œ ๋นก์„ธ๊ณ  ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ์ข…์†์„ฑ / ๋ฒ„์ „ ๋“ฑ์„ ๋‹ด์€ ๊ธธ์žก์ด ํŒŒ์ผ
plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.12'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

// ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋ฐ›์„ ๊ณณ. maven central์ด๋ผ๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ์Œ.
repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' // template engine
	implementation 'org.springframework.boot:spring-boot-starter-web' // web project
	testImplementation 'org.springframework.boot:spring-boot-starter-test' // test library(๊ธฐ๋ฐ˜)
}

tasks.named('test') {
	useJUnitPlatform()
}
  • .gitignore ⇒ ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” ๊ทธ๊ฑฐ

main ์‹คํ–‰

package hello.hellospring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloSpringApplication.class, args);
    }

}

  • ์ ‘์† ์„ฑ๊ณต
  • spring boot ๋Š” tomcat web server๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์Œ → ๋ฐ”๋กœ local host๋ฅผ ํ†ตํ•ด์„œ ์ ‘์† ๊ฐ€๋Šฅํ•˜๊ฒŒ ํฌํŠธ ์„ ์ 

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

  • Gradle์€ ์˜์กด๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ๋‹ค์šด๋กœ๋“œ ํ•œ๋‹ค.
    • tensorflow ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด numpy pandas ๋“ฑ๋“ฑ์ด ๊ฐ™์ด ๋‹ค์šด๋กœ๋“œ ๋˜๋“ฏ์ด……….
  • ์Šคํ”„๋ง ๋ถ€ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • 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
        • Log ์“ฐ๋Š” ์Šต๊ด€ ๋“ค์ด๊ธฐ
        • spring boot ์—์„œ ์“ฐ๋Š” logging library

 

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

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

  • src/main/resources/static ์— index.html ์˜ฌ๋ฆฌ๋ฉด ์•Œ์•„์„œ welcome page๋กœ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.
    • ์ •์  ํŽ˜์ด์ง€๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ. ๋‚ด๋ถ€์— ํ”„๋กœ๊ทธ๋žจ ๋“ฑ์ด ๋™์ž‘ํ•˜์ง€ ์•Š์Œ
  • thymeleaf template engine
    • thymeleaf ๊ณต์‹ ์‚ฌ์ดํŠธ: https://www.thymeleaf.org/
    • ์Šคํ”„๋ง ๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ: https://spring.io/guides/gs/serving-web-content/
    • ์Šคํ”„๋ง๋ถ€ํŠธ ๋ฉ”๋‰ด์–ผ: https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-template-engines

Template engine ์ ์šฉํ•˜๊ธฐ

1. controller ์ž‘์„ฑ

  • return name๊ณผ temaplates์˜ ํŒŒ์ผ ์ด๋ฆ„! hello.html ์„ ์ฐพ์•„๊ฐ€๊ฒŒ ๋˜์–ด์žˆ์Œ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ resources/templates/ ํ•˜์œ„์—์„œ {ViewName}.html ์„ ์ฐพ์Œ
  • ์ฐพ๋Š” ๋†ˆ = View Resolver
package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller  // annotation
public class helloController {
    @GetMapping("hello") // /hello๋กœ ์ ‘์†ํ•˜๋ฉด ์•„๋ž˜ method ์‹คํ–‰.
    public String hello(Model model) { // model์ด๋ผ๋Š” ๊ฒŒ ๋„˜์–ด์˜ด
        model.addAttribute("data", "hello!"); // key, value
        return "hello"; // return name = hello
    }

}

2. template ์ž‘์„ฑ

<!DOCTYPE HTML> 
<html xmlns:th="http://www.thymeleaf.org"> // template engine์„ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋ถˆ๋Ÿฌ์˜ด
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
	// template engine(model)์—์„œ key=data์ธ value๋ฅผ ์ฐพ์•„์™€์„œ ๋„ฃ์Œ
	<p th:text="'์•ˆ๋…•ํ•˜์„ธ์š”. ' + ${data}" >์•ˆ๋…•ํ•˜์„ธ์š”. ์†๋‹˜</p> 
</body>
</html>

4. ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ

  • Intellij ๋„๊ณ  powershell(์—ฌ๊ธฐ์„œ linux๋ž‘ ๊ฐ™์€ ๋ช…๋ น์–ด ์‚ฌ์šฉ๊ฐ€๋Šฅ ์œ ๋ ˆ์นด)ํ•˜๋ฉด ์•Œ์•„์„œ ๋นŒ๋“œํ•ด์คŒ
> ./gradlew.bat build
  • build/libs/ ์•ˆ์— jar ํŒŒ์ผ ์ƒ์„ฑ๋จ
  • java ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ
> java -jar {artifact}-{version}-SNAPSHOT.jar

 

  • ๋˜‘๊ฐ™์ด [localhost:8080](http://localhost:8080) ์—์„œ ์ ‘์† ๊ฐ€๋Šฅ

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿฅ Web > โ›… Back-end | Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring ์ž…๋ฌธ] 5. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - ์›น MVC ๊ฐœ๋ฐœ  (0) 2023.09.25
[Spring ์ž…๋ฌธ] 4. ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„  (0) 2023.09.25
[Spring ์ž…๋ฌธ] 3. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ  (0) 2023.09.25
[Spring ์ž…๋ฌธ] 2. ์Šคํ”„๋ง ์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ  (0) 2023.06.30
'๐Ÿฅ Web/โ›… Back-end | Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring ์ž…๋ฌธ] 5. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - ์›น MVC ๊ฐœ๋ฐœ
  • [Spring ์ž…๋ฌธ] 4. ์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„
  • [Spring ์ž…๋ฌธ] 3. ํšŒ์› ๊ด€๋ฆฌ ์˜ˆ์ œ - ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ
  • [Spring ์ž…๋ฌธ] 2. ์Šคํ”„๋ง ์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ
darly213
darly213
ํ˜ธ๋ฝํ˜ธ๋ฝํ•˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž
  • darly213
    ERROR DENY
    darly213
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (97)
      • ๐Ÿฌ ML & Data (50)
        • ๐ŸŒŠ Computer Vision (2)
        • ๐Ÿ“ฎ Reinforcement Learning (12)
        • ๐Ÿ“˜ ๋…ผ๋ฌธ & ๋ชจ๋ธ ๋ฆฌ๋ทฐ (8)
        • ๐Ÿฆ„ ๋ผ์ดํŠธ ๋”ฅ๋Ÿฌ๋‹ (3)
        • โ” Q & etc. (5)
        • ๐ŸŽซ ๋ผ์ดํŠธ ๋จธ์‹ ๋Ÿฌ๋‹ (20)
      • ๐Ÿฅ Web (21)
        • โšก Back-end | FastAPI (2)
        • โ›… Back-end | Spring (5)
        • โ” Back-end | etc. (9)
        • ๐ŸŽจ Front-end (4)
      • ๐ŸŽผ Project (8)
        • ๐ŸงŠ Monitoring System (8)
      • ๐Ÿˆ Algorithm (0)
      • ๐Ÿ”ฎ CS (2)
      • ๐Ÿณ Docker & Kubernetes (3)
      • ๐ŸŒˆ DEEEEEBUG (2)
      • ๐ŸŒ  etc. (8)
      • ๐Ÿ˜ผ ์‚ฌ๋‹ด (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
    • GitHub
    • Notion
    • LinkedIn
  • ๋งํฌ

    • Github
    • Notion
  • ๊ณต์ง€์‚ฌํ•ญ

    • Contact ME!
  • 250x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
darly213
[Spring ์ž…๋ฌธ] 1. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ์„ค์ •
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”