용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (247)
    • 개발 (74)
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (18)
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

(스프링 입문) 5. 회원 관리 예제 (웹 MVC 개발)
개발/스프링 입문

(스프링 입문) 5. 회원 관리 예제 (웹 MVC 개발)

2022. 9. 24. 02:10

이 글은 김영한 님의 스프링 입문 강좌 수강 후에 정리한 글입니다.

(https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard)

회원 관리 예제 - 웹 MVC 개발

● 회원 웹 기능 - 홈 화면 추가

 

1. 홈 컨트롤러 추가

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";
    }
}

@GetMappng("/")로 인해  "http://localhost:8080/" 요청이 들어오게 되면 문자열 "home"이 반환되고 이로 인해 ViewResolver가 home.html을 찾아 처리한다.

 

2. 회원 관리용 홈

<!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>

templates 폴더에 home.html로 저장한다.

 

3. 실행 결과

예전에 static 파일로 welcome 페이지를 위해서 index.html을 만들었다.

하지만 이제는 "http://localhost:8080/" 요청이 들어오게되면 스프링 컨테이너에서 HomeController를 찾기 때문에 더 이상 static 파일인 index.html이 쓰이지 않고, 대신 templates 폴더에 존재하는 home.html이 welcome 페이지로 쓰이게 된다.

만약 HomeController가 삭제된다면 원래대로 정적 콘텐츠인 index.html이 welcome 페이지로 쓰일 것이다.

 

● 회원 웹 기능 - 등록

 

1. 회원 등록 폼 개발

 

회원등록 폼 컨트롤러

@Controller
public class MemberController {
	private final MemberService memberService;
    
	@Autowired
	public MemberController(MemberService memberService) {
		this.memberService = memberService;
	}

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

 

@GetMappng("/members/new")로 인해  /members/new 요청이 들어오게되면 문자열 "members/createMemberForm"이 반환되고 이로 인해 ViewResolver가 createMemberForm.html을 찾아 처리한다.

 

회원 등록 폼 HTML (resources/templates/members/createMemberForm)

 

 

 

실행 결과

 

이름에 내용을 입력하고 등록 버튼을 누르면 createMemberForm.html의 <form action="/members/new" method="post">로 인해 "/members/new"에 post 방식으로 데이터가 전달된다.

그리고 post 방식으로 요청하였기 때문에 뒤에 나올 @PostMapping에 매핑될 것이다.

 

2. 회원 등록 컨트롤러

 

웹 등록 화면에서 데이터를 전달 받을 폼 객체

package hello.hellospring.controller;
public class MemberForm {
	private String name;
    
	public String getName() {
		return name;
	}
    
	public void setName(String name) {
		this.name = name;
	}
}

 

위의 실행 결과에서 등록 버튼을 눌렀을 때 데이터들을 전달받을 폼 객체이다.

 

회원 컨트롤러에서 회원을 실제 등록하는 기능

//MemberController에 추가
@PostMapping("/members/new")
public String create(MemberForm form) {
	Member member = new Member();
	member.setName(form.getName());
	memberService.join(member);
	return "redirect:/";
}

 

등록 화면에서 등록 버튼을 누르면 post 요청이 일어나기 때문에 @PostMapping에 매핑되어 create 메소드가 실행될 것이다.

Member 객체를 만들고 MemberForm에서 전달된 name을 설정한 후, memberService의 회원가입 기능을 활용하면 실제로 회원이 등록되게 된다.

그 후 "redirect:/"가 반환되어 초기 화면으로 리다이렉트 될 것이다.

 

● 회원 웹 기능 - 조회

 

회원 컨트롤러에서 조회 기능

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

 

@GetMappng("/members")로 인해  /members 요청이 들어오게 되면 문자열 "members/memberList"가 반환되고 이로 인해 ViewResolver가 memberList.html을 찾아 처리한다.

Model 객체는 html 파일로 데이터를 전달할 때 사용한다. 여기서는 model에 members를 넣어서 전달함으로써 회원 조회 결과가 나타날 수 있게 한다. 

 

회원 리스트 HTML (resources/templates/members/membersList)

<!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}">
                <td th:text="${member.id}"></td>
                <td th:text="${member.name}"></td>
            </tr>
            </tbody>
        </table>
    </div>
</div> <!-- /container -->
</body>
</html>

 

model로 넘어온 members 객체를 each를 사용하여 각 member의 id와 name을 알아내어 화면에 나타내 준다.

 

실행결과

'개발 > 스프링 입문' 카테고리의 다른 글

(스프링 입문) 7. AOP  (0) 2022.09.25
(스프링 입문) 6. 스프링 DB 접근 기술  (0) 2022.09.24
(스프링 입문) 4. 스프링 빈과 의존관계  (0) 2022.09.24
(스프링 입문) 3. 회원 관리 예제  (0) 2022.09.24
(스프링 입문) 2. 스프링 웹 개발 기초  (0) 2022.09.24
    '개발/스프링 입문' 카테고리의 다른 글
    • (스프링 입문) 7. AOP
    • (스프링 입문) 6. 스프링 DB 접근 기술
    • (스프링 입문) 4. 스프링 빈과 의존관계
    • (스프링 입문) 3. 회원 관리 예제
    용꿀
    용꿀

    티스토리툴바