πŸ“š [Spring] #5. νšŒμ› 관리 예제 - μ›Ή MVC 개발

이가은·2024λ…„ 4μ›” 11일
0

Spring

λͺ©λ‘ 보기
5/13
post-thumbnail

πŸ“• νšŒμ› μ›Ή κΈ°λŠ₯ - ν™ˆ ν™”λ©΄ μΆ”κ°€

πŸ“– ν™ˆ 컨트둀러 μΆ”κ°€

@Controller
public class HomeController {
    @GetMapping("/") //처음 도메인 경둜(localhost:8080/)
    public String home() {
        return "home"; //templates λ‚΄μ˜ home.html μ°Ύμ•„ λ°˜ν™˜
    }
}

βœ” @GetMapping("/")의 "/"λŠ” 처음 도메인 경둜("/")λ₯Ό μ˜λ―Έν•œλ‹€. κ·Έλž˜μ„œ localhost:8080둜 λ“€μ–΄κ°€λ©΄ 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>

🎈 μ‹€ν–‰ ν™”λ©΄

βœ” static의 index.html 화면이 μ•„λ‹Œ home.html이 λ„μ›Œμ§€λŠ” μ΄μœ λŠ” Controllerκ°€ 정적 νŒŒμΌλ³΄λ‹€ μš°μ„ μˆœμœ„κ°€ λ†’κΈ° λ•Œλ¬Έμ΄λ‹€!

πŸ“™ νšŒμ› μ›Ή κΈ°λŠ₯ - 등둝

πŸ“– MemberController

@GetMapping("members/new")
public String createForm() {
	return "members/createMemberForm";
}

@PostMapping("/members/new")
public String create(MemberForm form) {
	Member member = new Member(); //μƒˆλ‘œμš΄ member 생성
	member.setName(form.getName()); //formμœΌλ‘œλΆ€ν„° getName

	memberService.join(member); //μƒμ„±ν•œ memberλ₯Ό νšŒμ›κ°€μž…

	return "redirect:/"; //νšŒμ›κ°€μž…μ΄ λλ‚˜λ©΄ ν™ˆμœΌλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ
}

βœ” http://localhost:8080/members/new에 μ ‘μ†ν–ˆμ„ λ•Œ μ‚¬μš©λ˜λŠ”κ±΄ GET 방식이며, MemberController λ‚΄μ—μ„œ ("/members/new")에 λ§€ν•‘λ˜λŠ” createForm λ©”μ„œλ“œκ°€ ν˜ΈμΆœλœλ‹€.
βœ” viewResolver에 μ˜ν•΄ createForm이 μ„ νƒλ˜κ³  thymeleaf ν…œν”Œλ¦Ώ 엔진이 return μ½”λ“œμ—μ„œ λ°˜ν™˜λ˜λŠ” html을 λ Œλ”λ§ν•˜μ—¬ 화면에 보여쀀닀.
βœ” ν™”λ©΄μ—μ„œ 이름을 μž…λ ₯ν•˜κ³  등둝 λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ POST λ°©μ‹μœΌλ‘œ μž…λ ₯ν•œ name이 λ„˜μ–΄κ°€κ²Œ λœλ‹€.
βœ” MemberController λ‚΄μ—μ„œ ("/members/new")에 @PostMapping λ˜μ–΄ μžˆλŠ” create λ©”μ„œλ“œκ°€ ν˜ΈμΆœλœλ‹€. κ°€μ Έμ˜¨ name을 memberService의 join λ©”μ„œλ“œλ₯Ό 톡해 νšŒμ›κ°€μž…μ‹œν‚€κ³  νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ ν™ˆμœΌλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ μ‹œν‚¨λ‹€.
βœ” 주둜 데이터λ₯Ό μ‘°νšŒν•  λ•ŒλŠ” GET λ©”μ„œλ“œλ₯Ό, 데이터λ₯Ό 전달(등둝)ν•  λ•ŒλŠ” POST λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

🎈 μ‹€ν–‰ ν™”λ©΄

βœ” μ£Όμ–΄μ§„ input에 이름을 μž‘μ„±ν•˜κ³  등둝 λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ λ‹€μ‹œ 메인 νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈλœλ‹€

πŸ“’ νšŒμ› μ›Ή κΈ°λŠ₯ - 쑰회

@GetMapping("/members")
public String list(Model model) {
	List<Member> members = memberService.findMembers();
	model.addAttribute("members", members);
	return "members/memberList";
}

<tr th:each="member : ${members}">
	<td th:text="${member.id}"></td>
	<td th:text="${member.name}"></td>
</tr>

βœ” νšŒμ› λͺ©λ‘μ„ ν™•μΈν•˜λŠ” νŽ˜μ΄μ§€λ₯Ό ν΄λ¦­ν•˜λ©΄ thymeleafκ°€ λ™μž‘ν•˜κ²Œ λœλ‹€.
βœ” thymeleafμ—μ„œ ${}둜 ν‘œμ‹œλœ λ‚΄μš©λ“€μ€ model에 μ €μž₯된 값듀을 κ°€μ Έμ˜¬ 수 있게 ν•΄μ€€λ‹€.

🎈 μ‹€ν–‰ ν™”λ©΄

βœ” λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜λŠ” 방식을 μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ— μ„œλ²„λ₯Ό μ’…λ£Œν•˜κ³  μž¬μ‹€ν–‰ν•˜λ©΄ μ €μž₯ν–ˆλ˜ 데이터듀이 λͺ¨λ‘ 사라진닀.

πŸ“š 참고자료

μŠ€ν”„λ§ μž…λ¬Έ - μ½”λ“œλ‘œ λ°°μš°λŠ” μŠ€ν”„λ§ λΆ€νŠΈ, μ›Ή MVC, DB μ ‘κ·Ό 기술

profile
κ°€λΏ‘μ΄μ˜ 곡뢀 μƒμžπŸ“¦

0개의 λŒ“κΈ€