๐ก ๊น์ํ๋์ ์คํ๋ง ์ ๋ฌธ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
1. ํ๋ก์ ํธ ์์ฑํ๊ธฐ
https://start.spring.io/์ ์ ์ํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
start.spring.io
spring boot๋ฅผ ๊ธฐ๋ฐ์ผ๋ก spring ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ฌ์ดํธ์ด๋ค.
ํ๋ก์ ํธ ์ ํ
- Project : Gradle - Groovy
- Spring Boot : 3.x.x
- Language : Java
- Packaging : Jar
- Java : 17 or 21
Project Metdata
- groupId : hello
- artifactId : hello-spring
์์ ๊ฐ์ด ์ ๋ ฅํ๋ฉด Name๊ณผ Package name์ ์๋์ผ๋ก ์์ฑ๋๋ค.
Dependencies
์ฌ๊ธฐ์ ๋ถ๋ฌ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํด์ฃผ๋ฉด ๋๋ค. Spring Web๊ณผ Thymeleaf๋ฅผ ์ ํํ๋ค.
Thymeleaf๋ html์ ๋ง๋ค์ด์ฃผ๋ ํ ํ๋ฆฟ ์์ง์ด๋ค.
2. ๋์ ํ์ธ
1) HelloSpringApplication.java ํ์ผ์ ๊ธฐ๋ณธ main ๋ฉ์๋ ์คํํ๋ค.
main ๋ฉ์๋ ์์ โถ ํ์๋ฅผ ๋๋ฅด๋ฉด main ๋ฉ์๋๋ฅผ ์คํํ ์ ์๋ค.
2) http://localhost:8080 ์์ ์๋์ ๊ฐ์ ๋ฌธ๊ตฌ๊ฐ ๋์ค๋ฉด ์ฑ๊ณตํ ๊ฒ์ด๋ค.
์คํ ์๋ฆฌ
๊ทธ๋ ๋ค๋ฉด ์ด๊ฒ์ ์ด๋ป๊ฒ ์คํ๋๋ ๊ฒ์ผ๊น?
@SpringBootApplication
public class HelloSpringApplication {
public static void main(String[] args) {
SpringApplication.run(HelloSpringApplication.class, Arrays.toString(args));
}
}
main ๋ฉ์๋๋ฅผ ์คํํ๋ฉด SpringApplication.run(HelloSpringApplication.class); ๊ฐ ๋์ํ๊ณ , ๊ทธ๋ฌ๋ฉด SpringBoot ์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ค. ์คํ๋ง๋ถํธ๋ tomcat์ด๋ผ๋ ์น ์๋ฒ๋ฅผ ๋ด์ฅํ๊ณ ์๋ค. ๋ฐ๋ผ์ ์๋์ผ๋ก tomcat ์๋ฒ๋ฅผ ์คํ ์ํค๋ฉด์ SpringBoot๊ฐ ๋์ํ๋ค.
3. Welcome Page ๋ง๋ค๊ธฐ
์ ์ ์ผ๋ก ์คํ
๊ฐ๋จํ html ํ์ผ์ ์์ฑํ์ฌ ์ ์ ํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ณด์.
๋จผ์ , src/main/resources/static์ ๋ค์๊ณผ ๊ฐ์ index.html ํ์ผ์ ์์ฑํ๊ณ ์คํํด๋ณธ๋ค.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello~~
<a href="/hello">hello</a>
</body>
</html>
์ด๋ ๊ฒ ๋จ๋ฉด ์ฑ๊ณต์ด๋ค.
๋์ ์ผ๋ก ์คํ๋๊ฒ ํด๋ณด๊ธฐ
๊ทธ๋ผ ์ด์ ๋์ ์ผ๋ก ์คํ๋๋ ํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ณด์!
src/main/java/hello.hellospring/controller์ HelloController.java ํ์ผ์ ์์ฑํ๋ค.
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";
}
}
src/main/resources/static์๋ ๋ค์๊ณผ ๊ฐ์ 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>
์น ๋ธ๋ผ์ฐ์ ์์ localhost:8080/hello์ ์ ์ํ์ ๋, ๋ค์๊ณผ ๊ฐ์ด ๋จ๋ฉด ์ฑ๊ณต์ด๋ค!
์ฝ๋๋ฅผ ๋ฏ์ด์ ๋์ ๊ณผ์ ์ ์ดํดํด๋ณด์.
๋จผ์ , @GetMapping("hello")์ ์ญํ ์ ๋ญ๊น? ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ /hello๊ฐ ๋ค์ด์ค๋ฉด ์๋์ ํจ์๋ฅผ ์คํํด์ฃผ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์, ์ฌ๊ธฐ์์๋ hello ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
๋ค์์ผ๋ก model.addAttribute("data", "hello~~"); ์ ๋ํด์ ์์๋ณด์. addAttribute๋ (key, value) ํํ์ด๋ค. ์ฆ, key๊ฐ data, value๊ฐ hello~~์ธ ๊ฒ์ด๋ค. (view ์ฝ๋(htmlํ์ผ)์์ ${data}๋ก hello~~๋ฅผ ๋ถ๋ฌ์ค๊ฒ ๋๋ค.)
๋ง์ง๋ง์ผ๋ก, return "hello";๋ hello.html์ ๋ ๋๋งํ๋ผ๋ ์๋ฏธ์ด๋ค. SpringBoot๋ ํด๋น return ์ฝ๋๊ฐ ์คํ๋๋ฉด resources/templates/hello.html์ ์ฐพ์์ ๋ ๋๋งํ๋๋ก ์ธํ ๋์ด ์๋ค.
๋ง์ง๋ง์ผ๋ก, ๊ทธ๋ฆผ์ผ๋ก ๋์ ๊ณผ์ ์ ์ดํดํด๋ณด์.
1. ์น ๋ธ๋ผ์ฐ์ ๊ฐ localhost:8080/hello๋ฅผ ์์ฒญํ๋ค.
2. ๋ด์ฅ tomcat ์๋ฒ๊ฐ ์คํ๋ง ์ปจํ ์ด๋์๊ฒ ์์ฒญ์ ๋๊ธด๋ค.
3. ์ปจํ ์ด๋๋ Controller์์ hello์ ๋งตํ๋ ๋ฉ์๋๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ค. @GetMapping()์ด ์กด์ฌํ๋ค๋ฉด ๋งตํ๋ hello() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
4. return ๊ฐ์ธ hello๋ฅผ ๋ณด๋ด๊ณ , ๋์์ model์ (key:value)ํํ์ ๋ฐ์ดํฐ์ธ (data:hello~~) ๋ฅผ ๋ฃ์ด ๋ณด๋ธ๋ค.
5. src/main/resources/templates์์ View์ ํด๋นํ๋ hello.html์ ์ฐพ์์ฃผ๊ณ , ํ ํ๋ฆฟ ์์ง์ ์ฐ๊ฒฐํด์ฃผ๋ viewResolver๊ฐ ๋์ํ๋ค.
SpringBoot ํ ํ๋ฆฟ ์์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก viewName ๋งคํ์ด ๋๋ค. ์ฌ๊ธฐ์ viewName ๋งคํ์ด๋, 'resources:templates + {viewName} + .html' ๋ฅผ ์๋ฏธํ๋ค.
6. ํ ํ๋ฆฟ์์ง(thymeleaf)์ html ํ์ผ์ ๋ฐ์์ ๋ณํํ ํ์ ์น ๋ธ๋ผ์ฐ์ ์ ๋ฐํํด์ค๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] JPA ๋ถํฐ Spring Data JPA๊น์ง (0) | 2024.04.14 |
---|---|
[Spring] AOP (0) | 2024.01.22 |