๋ด๊ฐ ๋ฌด์์ ๊ฐ๋ฐํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด์ ๋จผ์ ์ฌ๋ฌ๊ฐ์ง๋ฅผ ๊ณต๋ถํด๋ณด๊ธฐ๋ก ํ๋ค!
( ํ๋ ๊ณต๋ถํ๋ค๊ฐ ์ ์ฑ์ ์๋ง์ผ๋ฉด ๋ค๋ฅธ๊ฑฐ ๊ณต๋ถํด๋ด์ผ์ง!)
๊ณต๋ถํ๋ฉด์ ๋งํ๋ ๊ฒ, ์ค๋ ๊ณต๋ถํ ๊ฒ์ ๋ณต์ตํ๋ ์ฐจ์์์ ๋ธ๋ก๊ทธ๋ฅผ ์ธ ๊ฒ์ด๋คโฆโฟโฆ ์ด์ฌํ ์ธ ์ ์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉฐ...
๊ทธ๋์ ์ฒ์ ๊ณต๋ถํ๊ธฐ๋ก ํ ๊ฑด spring!
๋ด๊ฐ ํ๋์ ๊ณต๋ถํ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ์ธํ๋ฐ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ ๊ณต๋ถํ ๊ฒ์ด๋ค.
์์ง ์์์ ๋ถ๊ณผํ์ง๋ง ๊ฐ์ฌ๋ ๋๋ฌด ์ ๊ฐ๋ฅด์น๋ ๊ฒ ๊ฐ์ ๋ง์กฑ ์ค(เนหฬตแดหฬต)ู
์์ง ๋ง์ด ๋ฐฐ์ฐ์ง ์์ ์ ์ฅ์์ ์ฐ๋ ค๋๊น ๋ถ์กฑํ ๊ฒ์ด ๋ง์ ๊ฒ ๊ฐ๋คใ ใ
๋์ค์ ๋ณธ๋ค๋ฉด '์ด๋ ์ด๋ฐ ๊ฒ๋ ๋ชฐ๋๋ค๋! '๋ผ๊ณ ์๊ฐํ๋ ๋ ์ด ์ค๊ฒ ์ง? ใ ใ
์ฝ๋ฉ์ ํ๊ธฐ ์ํด์ IntelliJ๋ผ๋ ํ๋ก๊ทธ๋จ์ ๊น์๋ค!
์๋ฐ๋ ์ด๋ฏธ ๊น๋ ค์์์ง๋ง, 8๋ฒ์ ์ด์ด์ 11๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ ํ๋ค.
ํ์ผ์์ฑ
์คํ๋ง ๋ถํธ ์คํํฐ์ ๋ค์ด๊ฐ์ ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
์์ ์๋ Maven์ ๋ง์ด ์ผ์๋๋ฐ, ์์ฆ์๋ Gradle๋ก ์ฎ๊ฒจ๊ฐ ์ถ์ธ๋ผ๊ณ ํ๋ค! ๊ทธ๋์ Gradle ์ ํ!
spring ์์ง์ผ๋ก๋ Thymeleaf ์ Spring Web์ ์ ํํ๋ค!
thymeleaf ํ ํ๋ฆฟ ์์ง์ ๋์ page๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ถ๊ฐํ ๊ฒ์ด๋ค.๋์ ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ ํ๋ฆฟ ์์ง์๋ FreeMarker, Groovy, Thymeleaf, Mustache๊ฐ ์๋๋ฐ, ๋๋ thymeleaf๋ฅผ ์ ํํ๋ค. (๋ฌผ๋ก ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋ฐ๋ผํ ๊ฒ์ด๊ธด ํ์ง๋งใ ใ ใ )thymeleaf๊ฐ ์์ ์๋ ๋ณ๋ก์๋๋ฐ ์์ฆ๋ค์ด ๊ธฐ๋ฅ์ด ๊ฝค ๊ด์ฐฎ๋ค๊ณ ํ๋ค.
์ ๋ ๊ฒ ์ ํ์ ํ๊ณ generate๋ฒํผ์ ๋๋ฌ์ ํ์ผ์ ๋ค์ด ๋ฐ์๋ค !์ผ์ผํ ๋ง๋ค์ง ์๊ณ ์ด๋ ๊ฒ ์ฝ๊ฒ ํ์ผ์ ๋ชจ๋ ๋ค์ด ๋ฐ์ ์ ์๋ค๋...์ฝ๊ฐ ์ ์ธ๊ณ๋ฅผ ๋ณด๋ ๊ธฐ๋ถ..
IntelliJ์์ ์ด ํ์ผ์ ์ด์ด์ฃผ๋๋ฐ ์ค์ํ ๊ฒ์ด ์๋ค!!!
ํ์ผ์ ์ด์ง ๋ง๊ณ ์ด ํ์ผ์์ build.gradleํ์ผ์ ์ด์ด์ผํ๋ค. ์ด๊ฒ๋๋ฌธ์ ํ์ฐธ ์ ๋จน์๋ค...๋ฐ๋ณด
๊ธฐ๋ณธ ์ธํ
1. project JDK๋ฅผ ์๋ฐ11๋ก ๋ณ๊ฒฝํด์ฃผ๊ธฐ
์ ๊ธฐ ๋นจ๊ฐ ๋ถ๋ถ์ 11๋ก ๋ฐ๊ฟ์ผํ๋ค. java 11๋ฒ์ ์ด ์๋๋ฉด ์๋์ด ์ ์๋ ์๋ ์๋ค.
2. Gradle JDK์ค์
์ ๋นจ๊ฐ ๋ถ๋ถ์ IntelliJ๋ก ๋ฐ๊ฟ์ค๋ค.
์ด๊ธฐ ์ค์ ์ gradle๋ก ๋์ด์๋๋ฐ, gradle๋ก ์ค์ ์ ํด๋๋๋ค๋ฉด ์คํ์ํฌ ๋ ์๋๊ฐ ๋๋ฆด ์๊ฐ ์๋ค. IntelliJ๋ก ์ค์ ํด์ java๋ฅผ ์ฆ์ ๋์ฐ๋๊ฒ ์๋๊ฐ ํจ์ฌ ๋น ๋ฅด๋ค!
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ดํด๋ณด๊ธฐ
์์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ค์์ฑ์ ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์์ผ๋ก ๊ณต๋ถํ๋ฉด์ ๋ง์ด ๋ณด๊ณ ๋ฐฐ์์ผ๊ฒ ๋ค(เธ •ฬ_•ฬ)เธ
์ผ์ชฝ ํ๋จ์ ์๋ ๋ค๋ชจ๋ฅผ ํด๋ฆญํ๊ณ , ์ค๋ฅธ์ชฝ ์๋จ์ ์๋ gradle์ ํด๋ฆญํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ญ ๋ณด์ธ๋ค!
์ ๊ธฐ์ ์๋ Dependencies๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ์ ์์กด๊ด๊ณ์ด๋ค. ์ด๊ฑธ ํด๋ฆญํ๋ฉด ๋๋ค !
์ฌ๊ธฐ์์ ์ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ logging์ด๋ผ๊ณ ํ๋ค.
ํ์ ์ ์์ผ์ ๋ถ๋ค์ ๊ผญ logging์ ์ฌ์ฉํ์ ๋ค๊ณ ํ๋ค. logging์ ์ฌ์ฉํด์ผ ์ฌ๊ฐํ error๋ค๋ง ๋ฐ๋ก ๋ชจ์๋๊ณ , logํ์ผ ๊ด๋ฆฌ๊ฐ ์ฝ๋ค๊ณ ํ๋ค. System.out.println์ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค logging์ ์ฌ์ฉ์ ๋ ์งํฅํด์ผ๊ฒ ๋ค.
(์ ๊ธฐ์ ์๋ logback์ด๋ slf4j๋ ๊ณต๋ถํด์ ํฌ์คํ ์ ์ฌ๋ ค๋ด์ผ๊ฒ ๋ค!)
์น ํ์ด์ง ์์ฑ
์ด๊ธฐ์ ์ค์ ๋์ด์๋ mainํจ์๋ฅผ ์คํ์ํค๊ณ , localhost:8080์ผ๋ก ์ฐ๊ฒฐํ๋ฉด ์ด๋ฐ ํ๋ฉด์ด ๋ฌ๋ค.
error๋ผ๊ณ ๋ ์ ์ฅ ๋ญ๊ฐ ์๋ชป๋๋? ์ถ์์ง๋ง ์์ ํ ์ด์ํ url์ ์ณค์ ๋๋
์ด๋ฐ ํ์ด์ง๊ฐ ๋ฌ๋ค!
์ธํฐ๋ท์ด๋ ์ฐ๊ฒฐ๋๋ค๋ ๊ธฐ๋ถ์ด ๋๋ฌด ์๋กญ๊ณ ์ ๊ธฐํ๋ค!!
์ ๊ธฐ์ ์ด์ ๊ฐ๋จํ ์ฝ๋๋ฅผ ์ณ๋ดค๋ค.
์ฝ๋๋ฅผ ์น๊ธฐ ์์, Welcome Page๋ฅผ ๋ง๋ค์๋ค.
์ฌ๊ธฐ์ ์ค์ํ ์ !
์คํธ๋ง๋ถํธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธํ ๋ ์ฐ์ปดํ์ด์ง ์์น๋ static์ ์๋ index.html์ด๋ค. ์ฌ๊ธฐ์ ๋จผ์ ์ฐพ์๋ณด๊ณ ์์ผ๋ฉด ๋ค๋ฅธ ๊ณณ์์ ์ฐพ๋๋ค๊ณ ํ๋ค.
๊ทธ๋์ ๋๋ 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>
์ด๋ ๊ฒ ๋๋ฉด ๊ทธ๋ฅ ์ ์ ํ์ด์ง๋ฅผ ์์ฑํ ๊ฒ์ด๋ค.
์๊น ๋์ ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ thymeleaf๋ฅผ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋์ ํ์ด์ง๋ฅผ ๋ง๋ค์๋ค.
main -> java -> hello.hellospring์ controller๋ผ๋ ํจํค์ง๋ฅผ ๋ง๋ค๊ณ ๊ทธ๊ณณ์ HelloController ์๋ฐํด๋์ค๋ฅผ ๋ง๋ค์๋ค.
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";
}
}
controller๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ @Controller๋ฅผ ๊ผญ ์จ์ค์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋๋งํ helloํ์ผ์ ๋ง๋ค๊ธฐ ์ํด์
main -> resources -> templates ์ hello.htmlํ์ผ์ ๋ง๋ค์๋ค.
*์ฌ๊ธฐ์๋ ์คํ๋ง๋ถ๋ ๊ธฐ๋ณธ์ ์ผ๋ก resources์ templates์ html์ ๋จผ์ ์ฐพ๊ธฐ ๋๋ฌธ์ ์ ๊ธฐ์ ํ์ผ์ ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ด ์ข๋ค.
<!DOCTYPE HTML>
<html xmlns:th="http://www/thymeleaf.org">
<head>
<title>Hello</title>
</head>
<body>
<p th:text="'์๋
ํ์ธ์. ' + ${data}">์๋
ํ์ธ์, ์๋</p>
</body>
</html>
์ ๊ธฐ์ ์ฐ์ฌ์๋ th๋ thymeleaf์ th์ด๊ณ , ${data}๋ ์์ ๋ฃ์๋ key๊ฐ์ด data์ธ value๊ฐ ์ค๊ฒ ๋๋ค.
xmlns:th="http://www/thymeleaf.org ๋ ๊ผญ ์จ์ค์ผ thymeleaf ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. ํ ํ๋ฆฟ ์์ง์ด ์ ์ธ๋๋ค๋ ์๋ฏธ์ด๋ค.
์ด๋ ๊ฒ ํ๊ณ ๋ค์ ์ปดํ์ผ ํ๋ค!
๊ทธ๋ฌ๊ณ localhost:8080/hello์ ์ ์ํ๋ฉด
์ด๋ ๊ฒ ๋์จ๋ค!!
์ด๋ ๊ฒ ๋๋ค๋ฉด ๊ธฐ๋ณธ์ ์ธ ํ๋ก์ ํธ ๋ง๋๋ ๊ฑด ๋์ด๋๋ค.
๋์ ํ์ด์ง ๋์ ์๋ฆฌ
์น๋ธ๋ผ์ฐ์ ์์ localhost:8080/hello๋ผ๊ณ ๋์ ธ์ฃผ๋ฉด ๋ด์ฅํ๊ณ ์๋ ํฐ์บฃ์ ์๋ฒ์์ ํ์ธํ๋ค.
ํ์ธํ ํฐ์บฃ์ ์คํ๋ง์๊ฒ ๋์ง๊ณ , ์คํ๋ง์ HelloControllerํ์ผ์์ GetMapping("hello") ์ ํฐ๋ฐ์ดํ ์์ ์๋ ๋จ์ด๋ ๊ฐ๋ค๋ฉด controller์ ์๋ method๊ฐ ์คํ๋๋ค.
(์ฌ๊ธฐ์ GetMapping์ html์ get, post method๋ ๊ฐ์ ์๋ฏธ์ด๋ค.)
์ด๋, spring์ด medel์ ๋ง๋ค์ด์ ๋ฃ์ด์ค๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ๋ชจ๋ธ์ ์์ ์ฝ๋์ ์๋ Model์ ๋งํ๋ ๊ฒ์ด๋ค.
model.addAttribute("data","hello!!"); ์ด๋ ๊ฒ ์จ์คฌ๊ธฐ ๋๋ฌธ์ ์ด ๋ชจ๋ธ์ key๊ฐ์ data, value๊ฐ์ hello!!์ด๋ค.
๊ทธ๋ฌ๊ณ return hello๋ฅผ ํ๋ฉด, ๊ทธ ์ด๋ฆ์ ํด๋นํ๋ ํ์ผ์ ๋๊ฒจ์ ๋ ๋๋งํ๊ฒ ๋๋ค.
${data}๋ ๋๊ฒผ๋ model์ key๊ฐ์ด๊ณ , ์ด๊ฑธ ๊บผ๋ด์ hello!!๋ก ๋ฐ๋๊ฒ ๋๋ ๊ฒ์ด๋ค.
์์ง spring์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋ด๊ฐ ์ ๋ฐ๋ผ๊ฐ๊ณ ์๋ ๊ฑฐ์์ผ๋ฉด ์ข๊ฒ ๋ค !
์ด ๋ธ๋ก๊ทธ ์ฐ๋ ๊ฒ๋ ์๊ทผ ์๊ฐ์ด ๋ง์ด ๋๋๊ตฌ๋..! ๊ทธ๋๋ ๊ณต๋ถ์ผ์ง๋ฅผ ์ด์ฌํ ์จ๋ด์ผ๊ฒ ๋ค ํ์ดํ ูฉ(เน•ฬo•ฬเน)ู
์ด spring๊ฐ์ ๋ฃ๋ ๊ฒ๋ ๊ธฐ์ด์ง๋ง, ์ด๊ฑธ ๋ฃ๊ธฐ ์ํด์๋ html๊ณผ java์ ๊ธฐ๋ณธ๊ธฐ๋ ์์ด์ผ ํ๋ ๊ฒ ๊ฐ๋ค.
์ด๋ฏธ ๊ธฐ๋ณธ์ ์ธ๊ฑด ์๊ณ ์์ง๋ง ์ต๊ทผ์ ์ข ๊น๋จน์ ๊ฒ ๊ฐ๊ธฐ์.. html์ด๋ java๋ ์ถ๊ฐ์ ์ผ๋ก ๊ณต๋ถํด์ผ๊ฒ ๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
H2 DB ๋ค์ด๋ก๋ [์ค์น / ์๋ฒ ์คํ] (0) | 2021.06.27 |
---|---|
Spring [ ํ์ ๋ฑ๋ก/์กฐํ/ํ์ ๊ด๋ฆฌ ์์ /์คํ๋ง] (0) | 2021.06.25 |
Spring [์คํ๋ง ๋น๊ณผ ์์กด๊ด๊ณ / ํ์ ์๋น์ค ์คํ๋ง๋น ๋ฑ๋ก] (0) | 2021.06.25 |
Spring [ํ์ ๊ด๋ฆฌ / ๋ฐฑ์๋] (0) | 2021.06.21 |
Spring ๊ธฐ์ด๋ค์ง๊ธฐ [์ ์ ์ปจํ ์ธ / MVC / API] (0) | 2021.06.10 |