스프링/스프링 MVC 패턴
상품 등록 전 로그인하기 - 회원가입 페이지 만들기
chanhee01
2023. 2. 28. 14:19
상품을 등록하고 수정하는데 아무나 할 수가 있기 때문에 상품 등록을 하기전에 로그인 페이지를 만들어서 로그인이 된 사람만 상품 등록 및 수정을 할 수 있도록 만들 것이다.
java.hello.login.domain.member에
Member 객체 클래스 생성
@Data
public class Member {
private Long id;
@NotEmpty
private String loginId; // 로그인 ID
@NotEmpty
private String name; // 사용자 이름
@NotEmpty
private String password;
}
MemberRepository 클래스 생성
@Slf4j
@Repository
public class MemberRepository {
private static Map<Long, Member> store = new HashMap<>(); // static 사용
private static long sequence = 0L; // static 사용
public Member save(Member member) {
member.setId(++sequence);
log.info("save: member={}", member);
store.put(member.getId(), member);
return member;
}
public Member findById(Long id) {
return store.get(id);
}
public Optional<Member> findByLoginId(String loginId) {
List<Member> all = findAll();
for (Member m : all) {
if (m.getLoginId().equals(loginId)) {
return Optional.of(m);
}
}
return Optional.empty();
}
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
public void clearStore() {
store.clear();
}
}
Member와 MemberRepository는 항상 해왔던 과정이기 때문에 자세한 설명을 생략하도록 하겠다.
이전 게시글에서는 url을 연결할 때 home 화면을 상품 목록 페이지로 이동하게 했다.
이번에는 상품 목록 페이지로 바로 이동하지 않고 로그인 페이지를 무조건 거쳐야하도록 설계할 것이다.
@Slf4j
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
home.html은 생략(실제로 코딩하지 않고 복사 붙여넣기 했음)

localhost:8080으로 들어가면 회원 가입과 로그인을 할 수 있는 홈 화면이 나온다.
@Controller
@RequiredArgsConstructor
@RequestMapping("/members")
public class MemberController {
private final MemberRepository memberRepository;
@GetMapping("/add")
public String addForm(@ModelAttribute("member") Member member) {
return "members/addMemberForm";
}
@PostMapping("/add")
public String save(@Valid @ModelAttribute Member member, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "members/addMemberForm";
}
memberRepository.save(member);
return "redirect:/";
}
}
컨트롤러에서 회원가입을 처리할 것이다. 저번에 배웠던 bindingReuslt를 통해서 값이 입력되지 않으면 오류가 나면서 페이지로 다시 돌아오고, 오류가 나지 않으면 홈 페이지로 리다이렉트를 한다.

홈 화면에서 회원가입을 누르면 /member/add로 이동하고 회원가입을 할 수 있는 페이지로 들어간다.
멤버 객체에 @NotEmpty가 있으므로 아무것도 입력하지 않고 회원 가입을 누르려하면 각각의 오류메시지를 출력하고 페이지에서 넘어가지 않는다.