[Spring-입문] 회원관리 예제 - (등록, 조회)

DANI·2023년 11월 16일

Spring[김영한T]

목록 보기
7/31
post-thumbnail

📑 비즈니스 요구사항 정리

  • 회원등록
  • 회원조회


💻 결과

💾 MemberController

package com.hello.hellospring.controller;

import com.hello.hellospring.domain.Member;
import com.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;
    }

    // Get방식 매필
    @GetMapping("/members/join")
    public String join(){
        return "members/join";
    }

    
    // Post방식 매핑
    // 클라이언트가 입력한 데이터를 받아올 폼이 필요하다.
    // 클라이언트가 서버에 데이터를 "ninckname"이라는 name으로 보냄
    // 클라이언트로부터 전달받은 데이터를 저장할 Form이 필요함
    // MemberForm에는 "nickname"이라는 변수가 있다.
    @PostMapping("/members/join")
    // 매개변수 member는 클라이언트가 입력한 데이터
    public String join(MemberForm member){
        Member member1 = new Member();
        // 클라이언트가 입력한 데이터를 member1 인스턴스에 저장해주고
        member1.setName(member.getNickname());
        // member1 인스턴스를 join한다 (아직 db가 연결되지 않았기때문에 가상의 메모리 공간에 저장됨)
        memberService.join(member1);
        // 루트 경로로 리다이렉트
        return "redirect:/";
    }



    // 회원목록을 조회한다
    @GetMapping("/members")
    public String memberList(Model model){
        // 멤버를 조회한 후
        List<Member> member = memberService.findMembers();
        // 모델에 담아준다. (why? 모델에 담아주어야 view에서 불러올 수 있음)
        model.addAttribute("member", member);
        return "members/list";
    }

}


💾 join.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/members/join" method="post">
   <label for="id">이름</label>
   <input type="text" name="nickname" id="id"/>
   <button type="submit">등록</button>
</form>
</body>
</html>

form태그의 name속성은 서버로 전달되는 데이터를 의미함



💾 list.html

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul th:each="member : ${member}">
  <li th:text="${member.id}"></li>
  <li th:text="${member.name}"></li>
</ul>
</body>
</html>

model 객체에 저장된 ${member}는 리스트 타입이다. 여기서 th:each 는 타임리프가 제공하는 속성으로서, 자바의 for each문과 비슷한 기능이다.



💾 MemberForm

package com.hello.hellospring.controller;

public class MemberForm {
    private String
            nickname;

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
}


💻 실행화면

회원가입과 회원목록을 조회한 결과이다.





아직 DB에 연결하지 않았으므로 저장된 데이터는 가상메모리에 저장된다. 따라서 서버가 재시작하게 되면 기존에 저장되어있던 데이터는 사라진다. 데이터를 유지하기 위해서 DB를 연결해야한다.

0개의 댓글