본문으로 바로가기
반응형

 

 

 

지난 포스팅(회원 가입, 회원 등록)에 이어

회원 조회와 전체 회원 조회를 해보고자 한다.

https://healthdevelop.tistory.com/entry/spring19

 

[Spring boot] 스프링 회원 가입(회원 등록) 예제 | 타임리프(Thymeleaf)

지난 포스팅(홈 화면)에 이어 회원 가입과 등록을 해보고자 한다. https://healthdevelop.tistory.com/entry/spring18 [Spring boot] 스프링 홈 화면 | 메인 화면 | 메인 페이지 | 타임리프(Thymeleaf) 컨트롤러를..

healthdevelop.tistory.com

 

 

 

 

기존 코드(Service, Repository, Domain 등)는 아래 링크에서 

순차적으로 볼 수 있다

 

https://healthdevelop.tistory.com/entry/spring12

 

[Spring boot] 스프링 - 회원 가입, 회원 조회

간단한 회원관리 예제를 구현하고자 한다. 순서는 아래를 참조하면 된다. ● 회원관리 예제 - 백엔드 개발  1. 회원 도메인과 리포지토리 만들기  2. 회원 리포지토리 테스트 케이스 작성  3. 회

healthdevelop.tistory.com

 



 

 

 

 

 


 

1. MemberController 작성  

 

 

 

 

 

 

 

MemberController.java

package hello.hellospring.controller;

import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@Controller
public class MemberController {

    private MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService){
        this.memberService = memberService;
    }

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

    @PostMapping("/members/new")
    public String create(MemberForm form){
                        // post로 넘어온 input 데이터(name)는 매개변수로 입력한 MemberForm에 있는 name에 자동으로 setName이 됨
        Member member = new Member();
        member.setName(form.getName());

        memberService.join(member);

        return "redirect:/";
    }

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

        return "members/memberList";
    }
}

 

 

이전 포스팅에서 작성한 MemberController에서

제일 하단에 public String list <- 이 메서드만 추가된 것이다.

 

 

클라이언트로부터 "/members" 화면 요청이 오면

 

스프링 컨테이너 안에 있는 컨트롤러에서 관련 컨트롤러가 있는지 찾는다.

 

 

만약 "/members" url로 요청이 왔으면

memberService의 기능 findMembers를 통해

 

전체 회원을 List인 members에 담는다.

 

그리고 매개변수로 작성한 model에 addAttribute를 통해

members란 속성에 우리가 조회한 전체 회원 members의 값을 넣는다.

 

 

반환 값으로 "members/memberList"을 주었으니 

개발자는 members/memberList.html을 작성해야 한다.

 

 

 

그러면 클라이언트가 "/members" 화면 요청 시

members/memberList.html을 볼 수 있는 것이다.

 

 

 

 

 

 

 

 

 

 

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

 

일반 html과 거의 동일하지만

 

14 ~ 17줄에 타임리프(thymeleaf) 문법이 쓰였다.

 

 

 

 

 

<tr th:each="member : ${members}">

- 이전 코드 controller에서

  model에 members라는 속성명에 전체 회원정보를 담았다.

 

  th:each 를 통해 반복문을 수행하는데

  member는 members안에 있는 members의 첫 번째 요소를 말한다.

 

 

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

- members의 첫번째요소 member의 id와 name을 가져온다.

  반복문은 members의 루프가 끝날 때까지(모든 회원이 조회될 때까지) 반복된다.

 

 

 

 

 

 


 

 

 

그럼 이제 클라이언트가 각기 다른 이름을 입력 후 등록을 한 다음

회원 조회 url을 요청해보자

 

 

 

 

 

 

 

 

 

두 개의 이름을 등록하고 전체 조회 url을 요청하면..

 

 

 

 

 

 

 

 

 

입력한 이름들이 조회가 되었다..!

 

 

 

 


 

하지만 우리는 치명적 단점을 가지고 있다.

 

단순히 PC 메모리 repository에 회원들을 저장하다 보니

서버를 내렸다가 다시 올리거나, pc를 껐다가 켜면

 

기존에 등록했던 회원 정보는 초기화된다.

 

 

 

이러한 문제를 방지하고자 DB 연결을 통해 

데이터를 보존해야 한다.

 

 

 

 

 

 

 

다음 포스팅에선 h2 데이터베이스를 설치하고자 한다.

 

 

 

반응형