본문 바로가기
Spring/SpringBoot

[SpringBoot] 호텔예약사이트 - 로그인 구현

by 코딩맛 2024. 3. 10.
해당 글은 Spring으로 구현한 프로젝트를 SpringBoot로 리팩토링 하는 과정을 담은 글입니다.

 

이번 시간에는 간단하게 로그인 기능 구현을 하려고 합니다.

 

1. 세션 값 없을 시 로그인 | 회원가입 버튼 노출

2. 로그인 성공 후 세션 값 등록

3. 세션 값 있을 시 로그아웃 | 마이페이지 버튼 노출

ㄹ
로그인 전 / 로그인 화면 / 로그인 후 단계별 모습

 

1. Entity 선언

@Entity
@Data
@Table(name = "MEMBER")
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long Id;
    
    @Column(name = "M_ID")
    private String mId;
    
    @Column(name = "M_PW")
    private String mPw;
}

@Entity : 객체임을 명시해주고 테이블과 매핑 (name 지정 안 할 시 기본값은 클래스 명)

@Table : entity와 매핑할 테이블 지정( name : 매핑할 테이블 이름 지정)

 

@Id : 식별자 필드로 , 엔티티 필드를 테이블이 기본키에 매핑하는 역할

@GeneratedValue

- 주키의 값을 위한 자동 생성 전략 명시, 선택적 속성 : generator, strategy

- strategy = GenerationType.IDENTITY : 기본키 생성을 데이터 베이스에 위임.

 

@Column : 데이터베이스 테이블과 필드를 매핑하기 위해 사용 ( name : 필드와 매핑할 테이블 컬럼명)

 

2. Service 선언

@Service
public class SonorousMemberService {

    @Autowired
    SonorousMemberRepository sonorousMemberRepository;

    public Member getLogin(String mId){
       Member member = sonorousMemberRepository.findBymId(mId);
       return member;
    }
}

 

 

getLogin 메서드에서 mid값을 받아 회원 정보를 조회하기 위해

sonorousMemberRepository.findBymId의 인자로 전달

 

3. Repository 선언

@Repository
public interface SonorousMemberRepository extends JpaRepository<Member, Integer> {

    Member findBymId(String mId);

}

JpaRepository<Member, Integer> : 어떤 Entity인지, pk는 어떤 타입인지 명시

SonorousMemberRepository에 findBymId 메서드를 만듬

-> 아이디로 회원 정보 조회 (select * from member where mId = ?)

 

4. controller 선언

@Controller
public class SonorousLoginController {

    @Autowired
    private SonorousMemberService sonorousMemberService;

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

    @PostMapping("/login")
    public String login(@ModelAttribute Member member,
                        Model model,
                        HttpSession session) throws Exception{

        String message = "";
        boolean isError = true;

        String viewPage = "common/message";

        String mId = member.getMId();
        Member loginMember = sonorousMemberService.getLogin(mId);
        if(loginMember != null && member.getMPw().equals(loginMember.getMPw())){
            session.setAttribute("loginMember", loginMember);
            message = member.getMId()+" 님 환영합니다.";
            isError = false;
        } else {
            message = "로그인에 실패하였습니다. 아이디와 비밀번호를 확인해주세요.";
            isError = true;
        }

        model.addAttribute("isError", isError);
        model.addAttribute("message", message);
        model.addAttribute("locationURL", "/main");

        return viewPage;
    }

}

sonorousMemberService의 getLogin을 호출하여 회원정보를 조회해옴.

1) 로그인 성공 시

    세션값에 회원정보를 넣고 메세지 값과 에러 여부를 false로 세팅

2) 로그인 실패 시

   메세지값과 에러 여부를 true로 세팅

 

그 후 viewPage를 리턴