# Spring ์ž…๋ฌธ / 1. ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์„ค์ •
Study Repository

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

by rlaehddnd0422

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

1.  ์ค€๋น„

- Java 11 ์„ค์น˜

- IDE : IntelliJ or Eclipse ์„ค์น˜

โ—๏ธ ์ €๋Š” IntelliJ ํ•™์ƒ๊ณ„์ • ๋ฌด๋ฃŒ ๋ผ์ด์„ผ์Šค๋ฅผ ํ†ตํ•ด ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

2.  ์Šคํ”„๋ง ํ”„๋กœ์ ํ„ฐ ์ƒ์„ฑ

- https://start.spring.io

- ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•œ ํ›„ GENERATE๋ฅผ ํ•œ๋‹ค.

 

์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

 

โ—๏ธ์Šคํ”„๋ง ๋ถ€ํŠธ 3.0 ์ด์ƒ ๋ฒ„์ „์€ Java 17 ์ด์ƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

โ—๏ธ SNAPSHOT ๋ฒ„์ „์€ ๋ฏธ์ •์‹ ๋ฒ„์ „์ด๋ฏ€๋กœ ๊ฐ€๊ธ‰์  ์„ ํƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

โ—๏ธ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Dependencies์— Spring Web๊ณผ Thymeleaf๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ค€๋‹ค.

 

 

3. ์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ zipํŒŒ์ผ์„ ์••์ถ• ํ•ด์ œํ•œ ๋’ค, IntelliJ์—์„œ Openํ•œ๋‹ค.

 

 

4. build.gradle์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ด์ค€๋‹ค.

 

gradle ์„ค์ •

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

 

dependencies

 

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

 

1.  spring-boot-starter-web 

โœ’๏ธŽ spring-boot-starter-tomcat : ํ†ฐ์บฃ (์›น์„œ๋ฒ„)

โœ’๏ธŽ spring-webmvc : ์Šคํ”„๋ง ์›น mvc

 

2. spring-boot-starter-thymeleaf : ํƒ€์ž„๋ฆฌํ”„ ํ…œํ”Œ๋ฆฟ ์—”์ง„(View)

 

3. spring-boot-starter (๊ณตํ†ต) : ์Šคํ”„๋ง ๋ถ€ํŠธ + ์Šคํ”„๋ง ์ฝ”์–ด + ๋กœ๊น…

โœ’๏ธŽ spring-boot 

     โœ’๏ธŽ spring-core

โœ’๏ธŽ spring-boot-starter-logging

     โœ’๏ธŽ logback, slf4j

 

 

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

 

1. spring-boot-starter-test

โœ’๏ธŽ junit : ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ

โœ’๏ธŽ mockito : ๋ชฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

โœ’๏ธŽ assertj : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

โœ’๏ธŽ spring-test : ์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ง€์›

 

 

 

plugins {
   id 'java'
   id 'org.springframework.boot' version '2.7.7'
   id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

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

repositories {
   mavenCentral()
}

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
   implementation 'org.springframework.boot:spring-boot-starter-web'
   testImplementation('org.springframework.boot:spring-boot-starter-test') {
      exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'}
}

tasks.named('test') {
   useJUnitPlatform()
}

 

5. main method ์‹คํ–‰

 

 

โ—๏ธ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ ์‹คํ–‰์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Web server failed to start. Port 8080 was already in use ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐํ•œ๋‹ค.

 

lsof -i tcp:8080์„ ํ†ตํ•ด 8080ํฌํŠธ๋ฅผ ์‚ฌ์šฉ์ค‘์ธ pid๋ฅผ ํ™•์ธ

 

sudo kill -9 pid๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

 

6. localhost:8080 ์ ‘์† ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋œจ๋ฉด ์„ฑ๊ณต

 

 

 

7. IntelliJ Gradle ๋Œ€์‹ ์— ์ž๋ฐ” ์ง์ ‘ ์‹คํ–‰

 

์ตœ๊ทผ ์ธํ…”๋ฆฌ์ œ์ด ๋ฒ„์ „์€ gradle์„ ํ†ตํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ์„ค์ •์ด๋‚˜, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‹คํ–‰์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๋ฉด ์ž๋ฐ”๋กœ ๋ฐ”๋กœ ์‹คํ–‰ํ•ด์„œ ์‹คํ–‰ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๋‹ค.

 

 

 

 

1-2. View ํ™˜๊ฒฝ์„ค์ • 

1. Welcome page ๋งŒ๋“ค๊ธฐ

โ—๏ธ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” Welcome page ๊ธฐ๋Šฅ

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

resources/static/index.html

 

2. thymeleaf ํ…œํ”Œ๋ฆฟ ์—”์ง„์‚ฌ์šฉ

ํ™”๋ฉด์„ ๋™์ ์œผ๋กœ ๋งŒ๋“ค๋ ค๋ฉด ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋ฏธ๋ฆฌ ์ •์˜๋œ ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๊ณ , ๋™์ ์œผ๋กœ html ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์„œ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹.

 

์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์—์„œ ์ƒˆ๋กœ์šด html ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

 

 

- Controller ์ƒ์„ฑ 

main/java/user/controller/HelloController.java

6 line : Controller์—๋Š” @Controller ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

9 line : @GetMapping ์–ด๋…ธํ…Œ์ด์…˜ -> hello์— ๋งคํ•‘๋˜์–ด localhost:8080/hello ์ ‘์† ์‹œ์— ์‚ฌ์šฉ๋œ๋‹ค.

12 line : model์— attributeName = "data"์— Value "hello" ์ถ”๊ฐ€

13 line : Controller์—์„œ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด viewResolver๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ViewName={hello}+'.html'์„ ์ฐพ์•„์„œ ์ฒ˜๋ฆฌ.

 

์ฐธ๊ณ  : spring-boot-devtools ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด 'html'ํŒŒ์ผ์„ ์ปดํŒŒ์ผ๋งŒ ํ•ด์ฃผ๋ฉด ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์—†์ด viewํŒŒ์ผ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

build -> recompile

 

 

@Controller
  public class HelloController {
      @GetMapping("hello")
      public String hello(Model model) {
          model.addAttribute("data", "hello!!");
          return "hello";
      }
}

 

- html ์ƒ์„ฑ 

main/java/resources/templates/hello.html

8 line : HelloController์—์„œ model์— ์ถ”๊ฐ€ํ•œ attribute์ค‘ data๊ฐ€ ๋งคํ•‘๋œ๋‹ค.

 

 

 

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

 

 

localhost:8080/hello ์ ‘์†

๋™์ž‘ ๊ทธ๋ฆผ

 

 

 

3. ํ„ฐ๋ฏธ๋„์—์„œ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ

0. cd spring0

1. ./gradlew build

2. cd build/libs

3. java -jar ~~~.jar

 

 

 

<์ฐธ๊ณ  ์ž๋ฃŒ>

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

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ