[Spring] 5. 회원관리 예제(웹 MVC 개발)

2025. 4. 29. 11:09·BE/스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
728x90

회원 웹 기능 - 홈 화면 추가

홈 컨트롤러 추가

@Controller
public class HomeController {

    // localhost 8080으로 들어오면 home()이 호출된다.
    @GetMapping("/")
    public String home(){
        return "home";
    }
}

회원관리용 홈

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

실행하고 localhost:8080에 들어가면 이전에 만들어둔 index.html이 아닌 home.html이 뜬다. 왜일까?

  • index.html 은 컨트롤러 매핑이 아예 없을 때 자동으로 뜨는 화면
  • Spring Boot는 resources/static/ 폴더 안에 있는 index.html을 기본 정적 리소스로 인식한다.
  • 만약 /에 대한 별도 매핑이 없으면 static/index.html을 보여준다!
  • 하지만 @GetMapping("/") 이 존재하면 정적 리소스(index.html) 보다 컨트롤러 메서드가 우선 적용되기 때문에 home.html이 뜨는 것.
즉, 컨트롤러가 정적 파일보다 우선순위가 높다.

회원 웹 기능 - 등록

회원 등록 폼 개발

회원 등록 폼 컨트롤러

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

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

등록은 GET으로 한다.

회원등록 폼 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>

회원등록 컨트롤러

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

package hello.hello_spring.controller;

public class MemberForm {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Command+N 사용해서 getter, setter 생성해준다.

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

@PostMapping("/members/new")
public String create(MemberForm form){
    Member member = new Member();
    member.setName(form.getName());

    memberService.join(member);

    return "redirect:/";
}

회원등록 폼 HTML에서 <form>태그로 "/members/new" 로 post 요청을 보내면,

@PostMapping("members/new")가 동작하여 Member객체인 member에 form에서 받아온 name을 저장한 뒤,

memberService에 있는 join에 객체 member를 전달하여 가입시킨다.

이후 "redirect:/"를 사용해서 가입 후 홈으로 넘긴다.

회원 웹 기능 - 조회

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

@GetMapping(value = "/members")
public String list(Model model) {
    List<Member> members = memberService.findMembers();
    model.addAttribute("members", members);
    return "members/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>

지금은 데이터베이스가 없이, 데이터를 메모리에 저장해두고 있기 때문에 스프링을 껐다가 다시 키면 데이터는 사라진다.

728x90

'BE > 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 카테고리의 다른 글

[Spring] 어노테이션 정리  (1) 2025.04.29
[Spring] 6_2. 스프링 DB 접근기술 - 순수 JDBC  (0) 2025.04.29
[Spring] 4. 스프링 빈과 의존관계  (1) 2025.04.29
[Spring] 3_2. 회원 관리 예제 - 회원 레포지토리 테스트 케이스 작성 / 서비스 개발 / 서비스 테스트  (0) 2025.04.25
[Spring] 3_1. 회원 관리 예제 - 비즈니스 요구사항 정리 / 회원 도메인과 레포지토리 생성  (1) 2025.04.19
'BE/스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 카테고리의 다른 글
  • [Spring] 어노테이션 정리
  • [Spring] 6_2. 스프링 DB 접근기술 - 순수 JDBC
  • [Spring] 4. 스프링 빈과 의존관계
  • [Spring] 3_2. 회원 관리 예제 - 회원 레포지토리 테스트 케이스 작성 / 서비스 개발 / 서비스 테스트
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • categories (408) N
      • App/Android (1)
      • BE (41) N
        • HTTP 웹 기본 지식 (8)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (12)
        • 스프링부트와 JPA 활용 (8) N
        • 스프링부트 시큐리티 & JWT (0)
        • PHP (6)
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (12)
        • AI (4)
        • Bigdata (6)
        • Database (1)
        • 빅데이터분석기사 (0)
      • Infra (0)
      • CS (7)
        • CS 면접 준비 (3)
      • 취준 (13)
        • 자격증·인턴·교육 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (3)
      • 코테 (270) N
        • Algorithm (222) N
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    구현
    누적합
    오블완
    그래프탐색
    너비우선탐색
    백준
    그리디알고리즘
    그래프이론
    수학
    티스토리챌린지
    시뮬레이션
    문자열
    최단경로
    이분탐색
    매개변수탐색
    자료구조
    투포인터
    브루트포스 알고리즘
    다이나믹프로그래밍
    정렬
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[Spring] 5. 회원관리 예제(웹 MVC 개발)
상단으로

티스토리툴바