ํฐ์คํ ๋ฆฌ ๋ทฐ
[SPRING]์คํ๋ง ์ ๋ฌธ - ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ๋ถํธ, ์น MVC, DB ์ ๊ทผ ๊ธฐ์ ์น์ 5 (ํ์ ๊ด๋ฆฌ ์์ - ์น MVC ๊ฐ๋ฐ)
chaewonni 2023. 12. 24. 01:00๐กํ์ ์น ๊ธฐ๋ฅ - ํ ํ๋ฉด ์ถ๊ฐ
๐ป HomeController
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
http://localhost:8080/ ์ ์น๊ณ ๋ค์ด๊ฐ๋ฉด home ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ,
return "home";์ ํตํด home.htmlํ์ผ์ ๋ถ๋ฌ์จ๋ค.
๐ปhome.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<div>
<h1>Hello Spring</h1>
<p>ํ์ ๊ธฐ๋ฅ</p>
<p>
<a href="/members/new">ํ์ ๊ฐ์
</a>
<a href="/members">ํ์ ๋ชฉ๋ก</a>
</p>
</div>
</div> <!-- /container -->
</body>
</html>

์์ ๊ฐ์ ํ๋ฉด์ด ๋ฌ๋ค.
ํ์ ๊ฐ์
๊ณผ ํ์ ๋ชฉ๋ก ํ์ด์ง๋ฅผ ๋๋ฅด๋ฉด, ์์ง ํด๋น htmlํ์ผ๊ณผ controller๊ฐ ๋ง๋ค์ด์ง์ง ์์์ผ๋ฏ๋ก error page๊ฐ ๋ฌ๋ค.
๐ป ์ปจํธ๋กค๋ฌ (์ฐ์ ์์)
์ ์ index.html ์ด๋ผ๋ staticํ htmlํ์ผ์ ๋ง๋ค์ด์ฃผ์์๊ณ , http://localhost:8080/ ์ ๋ค์ด๊ฐ๋ฉด index.html์ด ๋ด์ง๋ง,
์ง๊ธ์ home.html์ด ๋ฌ๋ค.
๊ทธ ์ด์ ๋

์๋ํ๋ฉด ๋ด์ฅ ํฐ์ผ ์๋ฒ์์ ํด๋น ํ์ด์ง์ ๋ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ๊ณ , ๋ง์ฝ ๊ทธ ์ปจํธ๋กค๋ฌ๊ฐ ์์ผ๋ฉด ์ ์ ์ปจํ
์ธ ๋ฅผ ์ฐพ๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ์ปจํธ๋กค๋ฌ๊ฐ ์ ์ ํ์ผ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ ๋๋ค.
๋ฐ๋ผ์ ๋ด์ฅ ํฐ์ผ ์๋ฒ๋ HomeController๋ฅผ ์ฐพ๊ณ , ์ด ์ปจํธ๋กค๋ฌ์์ returnํด์ค home.html์ ํ๋ฉด์ ๋์ด๋ค.
๐กํ์ ์น ๊ธฐ๋ฅ - ๋ฑ๋ก
๐ป MemberController
@Controller
public class MemberController { //์๋ spring ์ปจํ
์ด๋๊ฐ ๊ด๋ฆฌ๋ฅผ ํ๊ฒ ๋จ
//private final MemberService memberService = new MemberService();
//new ํด์ ํ๋ฉด memberCotroller๋ง๊ณ ๋ค๋ฅธ controller๋ค๋ memberService๊ฐ์ ธ๋ค ์ธ ์ ์์
//์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค ์์ฑํ ํ์ ์์ด ํ๋ ์์ฑํด๋๊ณ ๊ณต์ฉ์ผ๋ก ์ฐ๋ฉด ๋จ -> spring ์ปจํ
์ด๋์ ํ๋ ๋ฑ๋กํ๊ณ ์ฐ๊ธฐ (ํ๋๋ง ๋ฑ๋ก์ด๋จ)
private MemberService memberService;
// @Autowired //setter injection ๋ฐฉ์
// public void setMemberService(MemberService memberService){
// this.memberService = memberService;
// } // ํ๋ฒ settingํ๋ฉด ๋ฐ๊ฟ ์ผ ์๋๋ฐ public์ผ๋ก ์ค์ ํด์ผํจ ์ต๋ํ ๋ณ๊ฒฝ ๋ชปํ๋๋ก ํด์ผํ๋๋ฐ..
@Autowired //๊ทธ๋ฐ๋ฐ ์์ฑ์์ AutoWired๋ผ๊ณ ๋์ด ์์ผ๋ฉด
// ์คํ๋ง์ด ์คํ๋ง ์ปจํ
์ด๋์ ์๋ ๋ฉค๋ฒ ์๋น์ค๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๊ฒฐ์ ๋ฑ ์์ผ์ค๋๋ค
// ์์ฑ์์์ ์ด๋ ๊ฒ ์ฐ๋ฉด ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ๊ฐ ์์ฑ์ด ๋ ๋ ์คํ๋ง ๋น์ ๋ฑ๋ก๋์ด ์๋ ๋ฉค๋ฒ ์๋น์ค๋ฅผ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ๋ฃ์ด์ค = dependency Injection
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping("/members/new")
public String createForm() {
return "members/createMemberForm";
} //๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฐ URL ์ฐฝ์ ์ํฐ ๋ฑ ์น๋ ๊ฒ์ ๊ทธ๋ฅ GetMapping
http://localhost:8080/members/new ํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด createForm ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๊ณ , members/createMemberForm์ returnํ๊ธฐ ๋๋ฌธ์ members ํด๋์ createMemberForm.htmlํ์ผ๋ ๋ง๋ค์ด์ค๋ค.
๐ป createMemberForm.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<form action="/members/new" method="post">
<div class="form-group">
<label for="name">์ด๋ฆ</label>
<input type="text" id="name" name="name" placeholder="์ด๋ฆ์
์
๋ ฅํ์ธ์">
</div>
<button type="submit">๋ฑ๋ก</button>
</form>
</div> <!-- /container -->
</body>
</html>
http://localhost:8080/members/new ์ด์ ์ด ๋งํฌ๋ฅผ ๋ค์ด๊ฐ๋ฉด

์์ ๊ฐ์ ํ๋ฉด์ด ๋ฌ๋ค.
๊ทธ๋ฌ๋ ์์ง ์๋ฒ๋ก ์ ๋ฌ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ด๋ฆ์ ์
๋ ฅํ๊ณ ๋ฑ๋ก์ ํ๋ฉด Error Page๊ฐ ๋ฌ๋ค.
html์ form ํ๊ทธ ์์ method="post" ์ด๋ ๊ฒ POST ๋ฐฉ์์ผ๋ก ์
๋ ฅ์ ๋ฐ์ผ๋ฉด ์๋ฒ๋ก ์ ๋ฌ์ด ๋๊ธฐ ๋๋ฌธ์
input์ผ๋ก ์
๋ ฅ ๋ฐ์ ๋ด์ฉ์ ๋ฐ๊ธฐ ์ํ ํ์ ๋ฑ๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
๐ป MemberForm
package hello.hellospring.controller;
public class MemberForm {
private String name;
//html์์ name="name"์ ๋ณด๊ณ ์ด name์ ๋ฃ์ด์ค
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
ํ์ ๋ฑ๋ก ํ๋ฉด์์ input์ ํตํด ์
๋ ฅ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ๋ฐ์ ํผ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค.
๐ปMemberController
@PostMapping("/members/new")
public String create(MemberForm form){
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/"; //ํ์๊ฐ์
์ด ๋๋๊ณ ํ ํ๋ฉด์ผ๋ก ๋ณด๋ด๋ฒ๋ฆผ
}
์
๋ ฅ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ปจํธ๋กค๋ฌ์์ ํ์์ ์ค์ ๋ฑ๋กํ๋ ๊ธฐ๋ฅ์ ๋ง๋ค์ด์ฃผ์๋ค.
์ด์ http://localhost:8080/members/new๋ก ๋ค์ด๊ฐ ์ด๋ฆ์ ์
๋ ฅํ๊ณ ๋ฑ๋ก ๋ฒํผ์ ๋๋ฅด๋ฉด return "redirect:/"; ์ ์ํด ํ์๊ฐ์
์ด ๋๋๊ณ ํ ํ๋ฉด์ผ๋ก ๋ณด๋ด๋ฒ๋ฆฐ๋ค.


๐ป ํ์ ๋ฑ๋ก ์ปจํธ๋กค๋ฌ ์ค๋ช !!
์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์น ํ์ด์ง ์ฃผ์๋ฅผ ์
๋ ฅํด ๋ค์ด๊ฐ๋ ๋ฐฉ์์ GET ๋ฐฉ์์ด๋ผ๊ณ ํ๋ค.
ํ์ ๋ฑ๋ก Form์์ input ์์ฑ ์ค name์ ์
๋ ฅ๋ฐ์์ ์ ์ถํ ๊ฐ์ key๊ฐ์ด ๋์ด, ๊ฐ์ ์
๋ ฅ ๋ฐ๊ณ ๋ฑ๋ก ๋ฒํผ์ ๋๋ฅด๋ฉด "/members/new" ๋ก POST ๋ฐฉ์์ผ๋ก ๋์ด๊ฐ๊ฒ ๋๋ค.
<form action="/members/new" method="post">
<div class="form-group">
<label for="name">์ด๋ฆ</label>
<input type="text" id="name" name="name" placeholder="์ด๋ฆ์ ์
๋ ฅํ์ธ์">
</div>
<button type="submit">๋ฑ๋ก</button>
</form>
๊ทธ๋ผ POST ๋ฐฉ์์ผ๋ก ๋๊ฑฐ๊ฐ๊ฒ ๋๋ฉด ์๋ @PostMapping("/members/new") ๋ฉ์๋๋ก ํธ์ถ์ด ๋๋ค.
@PostMapping("/members/new") // Post ๋ฐฉ์์ผ๋ก localhost::8080/members/new
public String create(MemberForm form) {
Member member = new Member(); // member ๊ฐ์ฒด ์์ฑ
member.setName(form.getName()); // form์์ ์
๋ ฅ๋ฐ์ ์ด๋ฆ์ member ๊ฐ์ฒด ์ด๋ฆ์ผ๋ก ๋ฃ์
memberService.join(member); // member ๊ฐ์ฒด๋ก join(ํ์๊ฐ์
)
return "redirect:/"; // ๋ฐ๋ก "localhost::8080/" ํ๋ฉด์ผ๋ก ์ด๋
}
(์ถ์ฒ: easy00.log)
๐กํ์ ์น ๊ธฐ๋ฅ - ์กฐํ
๐ป MemberController (ํ์ ์กฐํ ํ๋ฉด ์ถ๊ฐ)
@GetMapping("/members")
public String list(Model model) { //Model์ ์คํ๋ง์์ ์ปจํธ๋กค๋ฌ์ ๋ทฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๊ฐ์ฒด
List<Member> members = memberService.findMembers();
model.addAttribute("members",members);
return "members/memberList";
}
์
๋ ฅ๋ฐ์ input๊ฐ์ ์ง์ ํ๋ฉด์์ ์กฐํํด๋ณด๊ธฐ ์ํด controller๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค.
return "members/memberList"; ์ ํด์ฃผ์๊ธฐ ๋๋ฌธ์ memberList.html๋ ๋ง๋ค์ด์ค๋ค.
๐ป memberList.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<div>
<table>
<thead>
<tr>
<th>#</th>
<th>์ด๋ฆ</th>
</tr>
</thead>
<tbody>
<tr th:each="member : ${members}"> <!--model์์ ์๋ ๊ฐ ๊บผ๋ด๋ ๊ฒ, ์ฒซ๋ฒ์งธ ๊ฐ์ฒด๋ฅผ ํ๋ ๊บผ๋ด์ ๋ฉค๋ฒ์ ๋ด๊ณ , ์์ด๋๋ ๋ค์ ์ถ๋ ฅ-->
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
</tr>
</tbody>
</table>
</div>
</div> <!-- /container -->
</body>
</html>
<tr th:each="member : ${members}"> <!--model์์ ์๋ ๊ฐ ๊บผ๋ด๋ ๊ฒ, ์ฒซ๋ฒ์งธ ๊ฐ์ฒด๋ฅผ ํ๋ ๊บผ๋ด์ ๋ฉค๋ฒ์ ๋ด๊ณ , ์์ด๋๋ ๋ค์ ์ถ๋ ฅ-->
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
</tr>
${members}๋ controller์์ ๋๊ฒจ์ค ๋ชจ๋ member๋ค์ List์ธ members ๋ผ๋ model์ด๋ค.
th:each๋ฅผ ํตํด members์ ๊ฐ์ฒด ์๋งํผ loop๋ฅผ ๋๊ณ , ์ฒซ๋ฒ์งธ ๊ฐ์ฒด๋ฅผ ํ๋ ๊บผ๋ด์ ๋ฉค๋ฒ์ ๋ด๊ณ , ์์ด๋๋ ๋ค์ ์ถ๋ ฅํ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ค.
member์ id์ name์ด ๊ฐ๊ฐ ${member.id} ์ ${member.name} ์ ์นํ์ด ๋๋ค.
์ด์ http://localhost:8080/members์ ๋ค์ด๊ฐ๋ฉด

์์ ๊ฐ์ ํ๋ฉด์ ๋ณผ ์ ์๋ค.
๊ทธ๋ฌ๋ ์ง๊ธ ๋ฑ๋กํ ์ ๋ณด๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ฅผ ๊ป๋ค ํค๋ฉด ์ด๊ธฐํ๊ฐ ๋๋ค.
๋ฐ๋ผ์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด DB๋ฅผ ์ฌ์ฉํ๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- ๋ถ๋งํฌ
- SQLD
- ์คํ๋ง ๋ถ๋งํฌ
- ๋ก๊น
- ์ปค๋ฎค๋ํฐ
- DP
- ๋น์์
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ๋ฐฑ์ค
- JPA
- ์คํ๋ง๋ถํธ
- ์นMVC
- ์คํ๋ง ์ปค๋ฎค๋ํฐ
- ํ๋ก ํธ์๋
- ์คํ๋ง
- SQL ๋ ๋ฒจ์
- ํ์ํํด
- ์๋ฐ ์คํ๋ง
- SQL
- ์น MVC
- ์ค์์
- ํ์ด์ฌ
- EnumType.ORDINAL
- ๋ก๊ทธ์์
- ์์
- ์๋ฐ
- ์ธํ ๋ฆฌ์ ์ด
- ์ง์ฐ๋ก๋ฉ
- elasticsearch
- ๋ฐฑ์ค ํ์ด์ฌ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |