์ด ํฌ์คํธ๋ ์ธํ๋ฐ์ ์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ด๋ค.
์ค๋์ ์๋ ๊ณผ์ ์ ์ค์ตํด๋ณผ ๊ฒ์ด๋ค.
1. ํ๋ก์ ํธ ์์ฑ
2. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ดํด๋ณด๊ธฐ
3. View ํ๊ฒฝ ์ค์
4. ๋น๋ํ๊ณ ์คํํ๊ธฐ
ํ๋ก์ ํธ ์์ฑ
https://start.spring.io/ ์ ๋ค์ด๊ฐ์ ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์์ํด์ค๋ค.
2.x๋ฒ์ ์ ํด์ผ Java 11๋ฒ์ ์ผ๋ก ํ ์ ์๋ค. ์๊ทธ๋ฌ๋ฉด ์ค๋ฅ๊ฐ ๋๋ค.
Gradle๋ก ํด์ฃผ๊ณ , Dependencies์ Spring Web, Thymeleaf๋ฅผ ์ ํํด์ค๋ค. Thymeleaf๋ ํ ํ๋ฆฟ ์์ง์ด๋ผ๊ณ ํ๋ค.
๋ค ์ค์ ํ ํ generate ๋ฒํผ์ ๋๋ฌ์ฃผ๊ณ ์์ถ์ ํด์ ํด์ค๋ค. ์ดํ ์ด๋ฅผ IntelliJ์์ Open as Project๋ก ์ด๋ฉด ๋๋ค. (
ํ๋ก์ ํธ๋ฅผ ์ด๋ฉด InjelliJ ์ฝ์์์ ๋น๋ฉ์ ์์ํ๋ค. ์๊ฐ์ ๊ฐ์ง๊ณ ์ข ๊ธฐ๋ค๋ฆฌ๋ฉด BUILD SUCCESSFUL์ด ๋จ๋ฉด์ ์๋ฃ๋๋ค. (์๋ฐ ๋ฒ์ ๊ณผ ์คํ๋ง๋ถํธ ๋ฒ์ ์ด ์๋ง์ผ๋ฉด ์ค๋ฅ๊ฐ ๋๋ ์ฃผ์!)
์ฐธ๊ณ ๋ก ๋๋ ํ ๋ฆฌ ์์์ Open as project ํด์ค์ผํ๋ค. ๋๋ ํ ๋ฆฌ ๋ฐ์์ ์ด๋ฉด ์๋ฌ๋ฌ๋ค (.idea๊ฐ ๋ค๋ฅธ ์ ๋ค์ด๋ ๊ฐ์ ์์น์ ์์ด์ผํจ ์๋ง ํ์ ๋ง๋ค๋ฉด .idea ์๊ธฐ๋๋ฏ)
์ด๋ก์จ ํ๋ก์ ํธ ์์ฑ ๋ฐ ๋น๋๋ฅผ ์๋ฃํ๋ค.
์ด์ src>main>java>๋ก ๊ฐ์ HelloSpringApplication ํด๋์ค๋ฅผ run์์ผ์ฃผ์.
์คํ์ด ์ ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด์ localhost:8080์ผ๋ก ์ ์์ ํด๋ณด์
์๋ฌ๊ฐ ๋ด๋ค๊ณ ๋นํฉํ์ง ๋ง์! ์ง๊ธ์ ์ฐ๋ฆฌ๊ฐ ์๋ฌด ํ์ผ๋ ์๋ง๋ค์๊ธฐ ๋๋ฌธ์, ๋์ธ ํ์ผ์ด ์์ด์ ์๋ฌ๊ฐ ๋๋๊ฒ์ด๋ค.
(์๋ฐํ ๋งํ๋ฉด, ์๋ฌํ์ด์ง ๋ณด๋ฉด /์ ๋งคํ๋ ํ์ด์ง๊ฐ ์๋ค๊ณ ๋์ด์๋๋ฐ, ์ด๋ /์์ ํ์ผ์ ๋ง๋ค์ด์ ๋์ฐ๋ฉด ํด๊ฒฐ๋๋ ๋ฌธ์ ๋ค)
์ฐธ๊ณ
ํ๋ก์ ํธ๊ฐ IntelliJ๊ฐ ์๋๋ผ Gradle์ ํตํด์ ์คํ๋๋ฉด ์ข ๋๋ฆฌ๋ค๊ณ ํ๋๋ฐ, ์ด๋ฅผ ์ฐ๋ฆฌ๊ฐ settings(ํน์ preferences)์์ ๋ณ๊ฒฝํด์ค ์ ์๋ค. Settings์ ๋ค์ด๊ฐ ์ gradle์ ์น๊ณ 'Build and run using'๊ณผ 'Run tests using'์ ๋๋ค IntelliJ IDEA๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ์ข๋ ๋นจ๋ฆฌ ์คํํ ์ ์๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ดํด๋ณด๊ธฐ
build.gradle์ ๋ค์ด๊ฐ๋ฉด ์๊น ์ฐ๋ฆฌ๊ฐ spring.io์์ dependencies๋ก ๊ฐ์ ธ์จ ์์ด๋ค์ ๋ณผ ์ ์๋ค.
gradle๊ณผ ๊ฐ์ ์ ๋ค์ ์์กด ๊ด๊ณ๋ฅผ ๋ค ๊ด๋ฆฌ๋ฅผ ํด์ค๋ค. ์๋ ์ฌ์ง์ ๋ณด์
์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ๊ฐ spring-web์ ๋ก๊ฒจ์๋ค๊ณ ์๊ฐํ์ ๋ gradle์ spring-web์ด ํ์ํ ๋ค๋ฅธ ์ ๋ค๋ ์ค์น๋ฅผ ํด์ฃผ๊ณ , ๊ทธ ์ ๋ค์ ์ค์นํ๊ธฐ ์ํ ๋ค๋ฅธ ์ ๋ค๋ ์ค์น๋ฅผ ํด์ค๋ค. ์ด๋ ๊ฒ ๋ฌ๋ผ๋ฝ ๋ค ์์กด๊ด๊ณ๋ฅผ ๊ณ ๋ คํด์ ๋ค ์ค์น๋ฅผ ํด์ฃผ๋ ๊ฒ์ด gradle์ ์ฅ์ ์ด๋ค (์๋ง ๋ฆฌ๋ ์ค์์ apt๋ ์ด๋ฌ๋ ๊ฒ ๊ฐ๋ค. dpkg๋ ์๊ทธ๋ ๊ณ ! ํ์คํ์ง ์์ผ๋ ๋ค์ ์ฐพ์๋ด์ผ์ง~!)
์ผ์ชฝ ์๋ ๊ฐ์ฅ ๋ชจ์๋ฆฌ!!! ๋ค๋ชจ ๋๊ฐ ๊ฒน์ณ์ง ๋ฒํผ ๋๋ฅด๋ฉด ํ๋ฉด ์ค๋ฅธ ์ชฝ์ Notification์ด๋ Gradle์ด๋ผ๋ ํญ์ด ์๊ธด๋ค.
์ด๋ฅผ ํด๋ฆญํด๋ณด๋ฉด ์๋์ ๊ฐ์ ์ฌ์ง์ด ๋์จ๋ค.
Dependencies์ ๋ค์ด๊ฐ๋ณด๋ฉด thymeleaf๋ฅผ ๋๋ฅด๋ฉฐ boot-starter๋ผ๋ ์ ๊ฐ ํ์ํ๊ณ ์ ๋ api ์ด๋ฐ์ ๊ฐ ํ์ํ๊ณ ~ ์ด๋ฐ๊ฑธ ๋ณด์ฌ์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ํด๋ฆญํด์ ๋จ์์ผ๋ก ํ์ด๋ผ์ดํธ๋ ๋ถ๋ถ์ (*)๋ ์ค๋ณต์ด๋ผ๋ ๋ป์ด๋ค
static์ index.html์ ์์ฑํด์ฃผ๋ฉด ๋ฃจํธ ํ์ด์ง๋ก ์ด๋ํ๋ค. ๊ฐ๋จํ html์ฝ๋๋ฅผ ์ ์ด์ฃผ๊ณ localhost:8080์ผ๋ก ๋ค์ ์ ์ํด๋ณด์๋๋ ์๋์ ๊ฐ์ ํ๋ฉด์ด ์ถ๋ ฅ๋์๋ค.
์๊น์ฒ๋ผ ์ค๋ฅ ๋จ์ง ์๊ณ ์ด๋ ๊ฒ ์ ์๋ํ๋ค.
View ํ๊ฒฝ ์ค์
hello๋ผ๋ ๊ฒฝ๋ก์ ๋ค์ด๊ฐ๋ฉด ์ปจํธ๋กค๋ฌ์์ GetMapping("hello")๊ฐ ์ค์ ๋์ด์์ผ๋ฏ๋ก ์ด ์ปจํธ๋กค๋ฌ๊ฐ ์คํ๋๋ค
๊ทธ๋ฌ๋ฉด ์ปจํธ๋กค๋ฌ๋ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ๊น?
@Controller // controller๊ฐ ์น ์ง์
์ ์ด๋ผ๊ณ ํ๋ค!
public class HelloController {
@GetMapping("hello") //hello ๊ฒฝ๋ก๋ก ๋ค์ด๊ฐ๋ฉด ์๋ฅผ ์คํ์์ผ์ค๋ค.
public String hello(Model model){
model.addAttribute("data","Hello!!");
return "hello"; //templates์ hello.html์ผ๋ก ๋ ๋๋ง ํด๋ผ!!!!!!!!
// controller์์ ๋ฆฌํด๊ฐ์ผ๋ก !๋ฌธ์!๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ ?
// ViewResolver๊ฐ ๋ง๋ ํ๋ฉด์ ์ฐพ์์ ์ฒ๋ฆฌํ๋ค
// resources:templates/ + {ViewName}+ .html ์ด๋ฐ ํ์์ผ๋ก ์ฐพ๋๋ค
// hello๊ฐ viewName์ด ๋๋ ๋ฏ ์ถ๋ค
}
}
์ด๋ฌ๋ฉด ๋ก์ปฌํธ์คํธ์์ /hello๋ก ๋ค์ด๊ฐ๋ฉด ์ด ์ปจํธ๋กค๋ฌ๊ฐ ์คํ๋๋ค.
์ฌ๊ธฐ์ ํํ๋ ์ผ์ ๋๊ฐ์ง์ธ๋ฐ 1.๋ชจ๋ธ์ dataํค์ Hello!!๋ผ๋ ๊ฐ ์ฃผ๊ธฐ, 2. "hello" ๋ฆฌํดํ๊ธฐ
ํํธ ์ฝ๋์๋ ์์ฑํ๋ฏ์ด ์ปจํธ๋กค๋ฌ๊ฐ ๋ฌธ์์ด์ ๋ฆฌํดํ๋ฉด templatesํด๋์์ ํด๋น ๋ฌธ์์ด๊ณผ ์ผ์นํ๋ htmlํ์ผ ์ฐพ์์ ์ด ํ์ผ์ ํ๋ฉด์ ๋์์ค๋ค!!
<!-- hello.html -->
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org"> <!-- ์ฌ๊ธฐ์ th๋ ํ
ํ๋ฆฐ ์์ง์ ๋งํ๋ค!! ์ฐ๋ฆฌ๋ thymeleaf๋ฅผ ์ฐ๋๊ฒ~! -->
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'์๋
ํ์ธ์. ' + ${data}" >์๋
ํ์ธ์. ์๋</p> <!-- data์ ๋ณ์๊ฐ ๋ค์ด๊ฐ๋ค -->
</body>
</html>
<!-- data๊ฐ model์ data๋ผ๋ ํค๋ฅผ ๊ฐ์ ธ์จ๋ค-->
&{data} ์ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ธ์ ์ถ๊ฐํด์คฌ๋ data attribute์ ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
์ด์ ์๋ฒ๋ฅผ ์คํ์์ผ์ hello๋ฅผ ์ณ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์จ๋คใ ใ
WIndows์์ ๋น๋ํ๊ณ ์คํํ๊ธฐ
์ด์ ๋ IntelliJ๊ฐ ์๋๋ผ cmd ์ฐฝ์์ ์ฐ๋ฆฌ์ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ณ ์คํํ๋ ๊ฒ์ ํด๋ณผ๊ฒ์ด๋ค.
// hello-spring์ด ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ ํ ์คํ
// IntelliJ์ ์๋ ์๋ฒ๋ ๊บผ์ค๋ค
> gradle.bat build
> cd build/libs
> java -jar hello-spring-0.0.1-SNAPSHOT.jar
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋์ฒ๋ผ ์๋ฒ๊ฐ ์คํ๋๊ณ ๋ก์ปฌํธ์คํธ ์ ์์ด ๊ฐ๋ฅํด์ง๋ค.
๋ฐฐํฌํ ๋๋ ์ด jar ํ์ผ์ ์คํ์ํค๋ฉด ๋๋ค....(Django ๋ฐฐํฌํ ๋ ์๋ฒ ์ค์นํ๊ณ ์ฝ์งํ๊ณ ์ฌํ๋ ๋ชป๊ฐ๊ณ ๋๋ฆฌ๋ฌ๋๋ฐ,,, ๋ฌผ๋ก ๋ด๊ฐ ๊ฐ์์์ง๋ง... ์ ํธํ SpringBoot ๋๋ฅผ ์ฌ๋ํ๊ฒ ๋ผ์จ,,,,,ํ์) Django ๋ฐฐํฌ๋ ์ ๋๋ก ๋น๊ตํ๊ธฐ ์ํด์ ํ๋ฒ AWS ์ธ์คํด์ค๋ก Spring๋ ๋ฐฐํฌํด๋ด์ผ๊ฒ ๋น
์ฐธ๊ณ
gradlew clean build
์ด ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋์๋ build ๋๋ ํ ๋ฆฌ๋ ์ฌ๋ผ์ง๊ณ ์๋ก ๋น๋ํด์ค๋ค
SOPT ๋์๋ฆฌ ์ง์์ ์ํด์ spring boot๋ฅผ ๊ณต๋ถํด๋ณด๊ธฐ๋ก ํ์๋ค. ์ต๊ทผ๊น์ง ๋๋ฌด ๋ฐ๋น ์ ๊ณต๋ถํ ์๊ฐ์ด ์์๋๋ฐ ์ด์ ๋ ์์ ๋ก์์ ธ์ ๊ณต๋ถ ์ง์ง ์ด์ฌํ ํด์ผ์ง !!! ์๋ฐ ๋ณต์ต๋ ๋ค์ํด์ผ๊ฒ ๋ค. ์ฌ์ค ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋ก ๊ณต๋ถํ๋๊ฒ ๊ต์ฅํ ํ๋ ์ํ์ธ๋ฐ, ์ด๋ป๊ฒ๋ ์ด๋ ๊ฒ ๋ ธํธ ์ ๋ฆฌํ๋ฉด ๋จธ๋ฆฌ์์ ์กฐ๊ธ์ ๋ค์ด์ค๋ ๊ฒ ๊ฐ๋คใ ใ ๋ฐฑ์๋๋ Django๋ ๊ฐ๋จํ๊ฒ ๋ฐฐํฌํ ๊ฒฝํ๊ณผ Node.js๋ฅผ ์ํ์ฝ๋ฉ ๊ฐ์ข๋ก ๊ฑด๋๋ ค๋ณธ๊ฒ ๋ฐ์ ์๋๋ฐ, spring boot๋ ๋ด๊ฐ ์ต์ํ(๊น๋จน์์ง๋ง..) JAVA๋ก ํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋๊ฐ ๋๋ค. ์ด ์๋ฆฌ์ฆ๋ ๊ฝค ์ค๋๊ฐ ๊ฒ ๊ฐ๋ค!! ์๋ฌดํผ ํ๋ด๋ณด์ ํ์ดํ ! >< ๋ ํ ์ ์๋ค ใ ใ ใ ใ ใ ใ ใ ใ
'๐งฐ Back-end > SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JUnit] assertThrows ๋ฉ์๋ (0) | 2023.03.16 |
---|---|
[SpringBoot ์ ๋ฌธ ์๋ฆฌ์ฆ (2)] ์คํ๋ง ์น ๊ฐ๋ฐ ๊ธฐ์ด - ์ ์ ์ปจํ ์ธ , MVC์ ํ ํ๋ฆฟ ์์ง, API (0) | 2023.03.10 |