[Spring] 1.ํ๋ก์ ํธ ํ๊ฒฝ์ค์
* ์ธํ๋ฐ '๊น์ํ'๋์ ์คํ๋ง ๊ฐ์ข ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ ๋ฆฌํ ๋ด์ฉ์์ ๋ฐํ
0. ๊ฐ์
๊ฐ๋จํ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ
- ์คํ๋ง ํ๋ก์ ํธ ์์ฑ
- ์คํ๋ง ๋ถํธ๋ก ์น ์๋ฒ ์คํ
- ํ์ ๋๋ฉ์ธ ๊ฐ๋ฐ
- ์น MVC ๊ฐ๋ฐ
- DB ์ฐ๋ - JDBC, JPA, ์คํ๋ง ๋ฐ์ดํฐ JPA
- ํ ์คํธ ์ผ์ด์ค ์์ฑ
์ค๋ฌด ๊ฐ๋ฐ ์ต์ ํธ๋ ํธ ๊ผญ ํ์ํ ๋ถ๋ถ๋ง!
1. ํ๋ก์ ํธ ์์ฑ
- JAVA 11 ์ค์น
- Intelli J ์ค์น
- ์คํ๋ง ๋ถํธ ์คํํฐ : https://start.spring.io/
[Project] (๋น๋ ์๋ํ)
๋ ๊ฑฐ์ ํ๋ก์ ํธ๋ ๋ฉ์ด๋ธ, ์์ฆ์ ๊ทธ๋๋ค
- Maven
- Gradle O
[Language]
- Java
[Spring Boot]
- 2.7.1 (๋ค์ ์์ด ์๋ ์ต์ ๋ฒ์ ์ ํ)
[Project Metadata]
- Group : ํ์ฌ๋ช
- Artifact : ํ๋ก์ ํธ ๋ช
[Dependencies] = ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง
- Spring Web
- Thymeleaf (html ๋ง๋ค์ด์ฃผ๋ ํฌํ๋ฆฟ ์์ง)
-> generate -> ์์ถํด์ -> ํ์ผ์์ build.gradle์ด๋ผ๋ ํ์ผ์ ์ด์ด์ค๋ค.
[๊ตฌ์กฐ]
- .idea : ์ธํ ๋ฆฌ์ ์ด ์ค์ ํ์ผ
- gradle : ๊ทธ๋๋ค ์ฌ์ฉ ํด๋
- src
main (java-packages * source files, resources - xml, ํ๋กํผํฐ์ค, ์ค์ ํ์ผ๋ค, ์๋ฐ์ ์ธ ๋ค๋ฅธ๊ฒ๋ค)
test (test code - ์ค์!!!)
** build.gradle (์คํ๋ง ๋ถํธ๊ฐ ๋์ค๋ฉด์ ์ค์ ํ์ผ๊น์ง ์ ๊ณต)
ํ๋ฌ๊ทธ์ธ(๋ฒ์ , ์๋ฐ์ธ์ด ๋ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
group / version / sourceCompatibility(java18)
repositories (mavenCentral-์ฌ์ดํธ-์์ ๋ค์ด๋ฐ๋๋ก ์ค์ ํด๋์ ๊ฒ)
dependencies (thymeleaf, web starter, test-JUNIT)
git ignore
gradlew / gradlew.bat (๊ทธ๋ ์ด๋ค ๋น๋)
settins.gradle
RUN
- Tomcat initialized on port(s) : 8080
* ์ธํ ๋ฆฌ์ ์ด ๋น๋๊ฐ ์๋ฐ ์ง์ ์คํ์ด ์๋๋ผ ๊ทธ๋๋ค ํตํด์ ๋ ๋๊ฐ ์์
-> preference - gradle - build, execution, deployment - build tools - gradle - gradle projects - buil and run : intelliJ IDEA / run tests using : Intelli J IDEA
2. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ดํด๋ณด๊ธฐ
* ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด๊ด๊ณ ๋ฑ
- build gradle - dependencies์์ ํ์ธ๊ฐ๋ฅ
- External Libraries (Apache, Tomcat, JUnit, Spring boot ๋ฑ ๊ธฐ๋ณธ ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์)
- Maven, Gradle ๋น๋ ๋๊ตฌ๋ค์ ์์กด๊ด๊ณ๋ฅผ ๋ค ๊ด๋ฆฌํด์ค
ex) spring-boot-starter-web ๋ก๊ธฐ๋ฉด ์๊ฐ(๊ทธ๋๋ค์ด) ํ์ํ ๋ค๋ฅธ ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ด ๋ก๊ฒจ์ด
ํ์ธํ๋๋ฒ : external libraries์์ dependencies ํด๋ฆญ -> ์ผ์ชฝ ๋ฐ์ web ๋๋ฅด๋ฉด or cmd ๋๋ฒ -> ์ค๋ฅธ์ชฝ ๋ผ์ธ์ gradle์ด ๋ธ -> dependencies ํ์ธ๊ฐ๋ฅ
์์ ) ์น์๋ฒ๋ฅผ ์๋ฒ์ ์ค์น (tomcat) ๊ฑฐ๊ธฐ์ ์๋ฐ ์ฝ๋๋ฅผ ๋ฐ์ด๋ฃ๋ ์์ผ๋ก ๋ถ๋ฆฌ
์ง๊ธ) ์์ค๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์น์๋ฒ๋ฅผ ๊ฐ์ง๊ณ ์์ (embedded)
*logging
- org.spring-boot-starter:2.7.1 release - org.logging
org.qos.logback(์ค์ ๋ก๊ทธ๋ฅผ ์ด๋ค ๊ตฌํ์ฒด๋ก ์ถ๋ ฅํ ๊ฑด์ง, ์ฑ๋ฅ๋น ๋ฅด๊ณ ์ง์๋ง์) & org.slf4: jul-to slf4j (์ธํฐํ์ด์ค)
-> ์ด ๋ ์กฐํฉ์ด ๋ง์ด ์ฐ์ (์คํ๋ง์์๋ starter๊ฐ ์์ฑ๋๋ฉด ์๋์ผ๋ก ๋ก๊ฒจ์ด)
- JUnit / assertJ(ํ ์คํธ ํธ๋ฆฌ ๋์์ค)
[์ ๋ฆฌ]
์คํ๋ง๋ถํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
spring boot-starter-web -> spring-boot-starter-tomcat (ํฐ์บฃ, ์น์๋ฒ), spring-webmvc (์คํ๋ง ์น MVC)
spring boot-starter-thymeleaf -> ํ์๋ฆฌํ ํ ํ๋ฆฟ ์์ง (View)
spring boot-starter(๊ณตํต) -> ์คํ๋ง ๋ถํธ + ์คํ๋ง์ฝ์ด + ๋ก๊น
-> ์คํ๋ง๋ถํธ-์คํ๋ง์ฝ์ด
-> ๋ก๊น -logback & slf4j
ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
spring-boot-starter-test
- JUnit : ํ ์คํธ ํ๋ ์์ํฌ (JUnit 5๋ก ๋ง์ด ๋์ด๊ฐ)
- mockito : ๋ชฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- assertj : ํ ์คํธ ์ฝ๋๋ฅผ ์ข ๋ ํธํ๊ฒ ์์ฑํ๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- spring-test : ์คํ๋ง ํตํฉ ํ ์คํธ ์ง์
3. View ํ๊ฒฝ์ค์
- Welcome page (๋๋ฉ์ธ ์ฒซํ๋ฉด) ๋ง๋ค๊ธฐ
src - main - resources - static - new file - 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>
์์ฑํ๊ณ java์์ RUN
- ์คํ๋ง ๋ถํธ๊ฐ Welcom Page ๊ธฐ๋ฅ
- ์คํ๋ง์ ๊ธฐ๋ฅ์ด ๋๋ฌด ๋ง๊ธฐ ๋๋ฌธ์ ์ํ๋ ๊ฒ์ ์ฐพ๋ ๋ฅ๋ ฅ์ด ์ค์!
- https://spring.io/ ํ์ด์ง - Projects - Spring Boot - Learn - Reference Doc - Web - Welcome Page
1.1.5. Welcome Page
Spring Boot supports both static and templated welcome pages.
It first looks for an index.html file in the configured static content locations.
If one is not found, it then looks for an index template. If either is found,
it is automatically used as the welcome page of the application.
spring.io ํ์ด์ง ๋ฉ๋ด์ผ ๊ฒ์ํ ์ ์์ด์ผํจ
[thymeleaf ์์ง]
Link : https://www.thymeleaf.org/
Tutorial : https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html
์คํ๋ง๋ถํธ ๋ฉ๋ด์ผ : https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
์คํ๋ง๋ถํธ ๋ฉ๋ด์ผ์ Template Engines ๋ถ๋ถ
Spring Boot includes auto-configuration support for the following templating engines:
- FreeMarker
- Groovy
- Thymeleaf
- Mustache
HTML์ ์ ์ ํ์ผ
ํ ํ๋ฆฟ์์ง์ ์ฌ์ฉํ๋ฉด ๊พธ๋ฐ ์ ์์
[๋์ํ๋ ํ๋ฉด]
- Controller
src - main - java - hello.hellosp - cotroller package ์์ฑ - HelloController.java ์์ฑ
package hello.hellosp.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("hello") // ์น ์ดํ๋ฆฌ์ผ์ด์
์์ /hello๋ผ๊ณ ๋ค์ด์ค๋ฉด HelloController ๋ฉ์๋ ํธ์ถ
public String hello(Model model) { // Model View Controller (MVC)
model.addAttribute("data", "hello!");
return "hello";
}
}
main - 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>
th: thymeleaf ํ
ํ๋ฆฟ์์ ๋ถ๋ฌ์จ ๊ฒ
data = model attribute์์์ data์ด๊ณ , value๋ hello ์์
data๊ฐ value๋ก ์นํ์ด๋จ
- ์น ๋ธ๋ผ์ฐ์ ์์ localhost 8080/hello ๋์ง๋ฉด ์คํ๋ง๋ถํธ๋Tomcat ์น์๋ฒ (์คํ๋ง๋ถํธ์ ๋ด์ฅ)๋ spring์ ๋์ง
- spring์ ์ปจํธ๋กค๋ฌ์์ get(HTTP GET) url์ ๋ฐ๊ณ hello url์ ๋งค์นญ๋จ์ ํ์ธ
- ๋ฉ์๋ ์คํ๋๊ณ model (์คํ๋ง์ด ๋ง๋ ๊ฒ)์ addAttributeํด์ ํค data ๊ฐ hello๋ฅผ ๋ฃ์ด๋จ๋๋ฐ
hello๋ฅผ return = ์ฆ hello๋ผ๋ html์ ์ฐพ์์ ํด๋น ํ๋ฉด์ ๋ ๋๋งํ๋ผ๋ ๊ฒ
- ๊ทผ๋ฐ ์ด๋ model์ ์๋ data๊ฐ์ ๊ฐ์ด ๋๊ฒจ์ค
(helloController๊ฐ viewResolver์๊ฒ ๋๊ฒจ์ฃผ๊ณ ์ด๊ฒ์ viewResolver๊ฐ ํ์ด์ง ๋งตํ ํ ํ๋ฉด์ ๋ฟ๋ฆฌ๋ ๊ฒ)
* ๊ธฐ๋ณธ์ ์ผ๋ก resources - template ์์ ์ฐพ์
* ViewResolver : ์คํ๋ง๋ถํธ ํ ํ๋ฆฟ์์ง ๊ธฐ๋ณธ viewName ๋งตํ
-> resources:templates/ + {ViewName} + .html = ์ฆ hello.html์ ์ฐพ์์ ๋๋๋ง ํ๋ค๋ ๋ป
* spring-boot-devtools ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐํ๋ฉด html ํ์ผ ์ปดํ์ผ๋ง ํ๋ฉด ์๋ฒ ์ฌ์์์์ด Viewํ์ผ๋ง ๋ณ๊ฒฝ ๊ฐ๋ฅ
intellij ์ปดํ์ผ ๋ฐฉ๋ฒ : ๋ฉ๋ด - build - recompile
์ค์ ๋ฒ : https://kim-oriental.tistory.com/8
์คํ์๋ฆฌ : https://deftkang.tistory.com/210
4. ๋น๋ํ๊ณ ์คํํ๊ธฐ
[๋น๋]
0) ๋จผ์ ์ธํ ๋ฆฌ์ ์ด ๋ด๋ถ์์ ์คํํ ๊ฒ ๊บผ์ฃผ๊ธฐ
1) ํฐ๋ฏธ๋ ์ฝ์๋ก ์ด๋
2) ํด๋น ํด๋๋ก ์ด๋ํด์ ./gradlew build
3) cd build/libs
4) java -jar hellospring-0.0.1-SNAPSHOT.jar
* ๋ฆฌ๋ ์ค ๋ช ๋ น์ด (ls / ls -l(์์ธํ, ์ฝ์ด : ll)
'๐จโ๐ป Web Development > Spring - Intro' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] 6.์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ (0) | 2023.02.14 |
---|---|
[Spring] 5.ํ์ ๊ด๋ฆฌ ์์ - ์น MVC ๊ฐ๋ฐ (0) | 2023.02.13 |
[Spring] 4.์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ (0) | 2023.02.11 |
[Spring] 3.ํ์๊ด๋ฆฌ ์์ - ๋ฐฑ์๋ ๊ฐ๋ฐ (0) | 2022.07.03 |
[Spring] 2.์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด (1) | 2022.07.01 |
์ต๊ทผ๋๊ธ