본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : 로그인 기능 구현하기

by 오주현 2022. 2. 17.
반응형

이번에는 로그인 기능을 개발해 봤다.

 

로그인의 핵심 기능은 회원을 조회하고 파라미터로 넘어온 password와 비교해 같으면 회원을 반환하고 다르면 null을 반환하는 것이 로그인의 핵심 비즈니스 로직이라고 한다.

 

Optional<Member> findMemberOptional = memberRepository.findByLoginId(loginId);
  Member member = findMemberOptional.get();
  if (member.getPassword().equals(password)) {
      return member;
  } else {
      return null;
  }

Optional을 통해 이렇게 서비스 로직을 작성했는데 강사님이 비추하고 람다식으로 코드를 작성하는 것을 추천하셨다. 그렇게 작성한 코드가 아래와 같다.

 

return memberRepository.findByLoginId(loginId)
        .filter(m -> m.getPassword().equals(password))
        .orElse(null);

매우 간단해졌다. filter와 stream 사용법은 잘 알아두는 게 좋다고 했다.

 

지금 이 서비스 로직이 핵심인데 회원을 조회하고 다음에 파라미터로 넘어온 password와 비교해 같으면 회원을 반환하고 아니면 null을 반환하도록 하였다.

 

이렇게 서비스 로직을 완성하고 다음으로 넘어간다.

 

@NotEmpty
private String loginId;
@NotEmpty
private String password;

이번에는 로그인 아이디와 비밀번호를 위해 객체를 만들어 주었다.

 

@Data 어노테이션을 활용해 만들어 주었다.

 

@GetMapping("/login")
 public String loginForm(@ModelAttribute("loginForm") LoginForm form) {
 return "login/loginForm";
 }

컨트롤러 코딩이다. GetMapping과 PostMapping을 나누어 적용했다.

 

@PostMapping("/login")
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return "login/loginForm";
    }

    Member loginMember = loginService.login(form.getLoginId(), form.getPassword());

    if (loginMember == null) {
        bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
        return "login/loginForm";
    }

    //로그인 성공 처리 TODO

    return "redirect:/";
}

저번에 배운 검증 로직까지 추가했다.

 

로그인 컨트롤러는 로그인을 서비스를 호출하고 성공하면 홈 화면으로 실패하면 bindingResult.reject()를 통해 글로벌 오류ObjectError를 생성하고 다시 정보를 입력하도록 로그인 폼을 뷰 템플릿으로 사용했다.

 

로그인 폼 뷰 템플릿에서 loginId와 password가 틀리면 글로벌 오류가 나타나게 된다.

 

이렇게 코딩하고 실행하면 로그인이 성공하면 홈으로 이동되고, 로그인에 실패하면 검증 오류가 뜨게 된다. 강의 특성상 이것을 업그레이드해 나갈 것 같다.

 


스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다.

반응형

댓글