SpringBoot 로그인 구현하기(Mybatis, Annotation)

유광진·2023년 10월 15일
0

📌 1 . 로그인 구현 (Login)

저번 회원가입 정보를 기반으로 로그인을 하는 구현이다.

회원가입의 코드 메커니즘과 똑같이 MariaDB를 데이터베이스로 사용하고 Java 언어를 사용하여 MyBatis 프레임워크를 이용하며 Annotation 방식으로 데이터베이스와 상호작용한다.

📌 2. DataMapperInter

	// User 로그인
	@Select("select * from user where user_id=#{user_id} and user_pwd=#{user_pwd}")
	UserDto userLoginProcess(@Param("user_id") String user_id, @Param("user_pwd") String user_pwd);

@Select 사용함으로서 해당 메소드가 데이터베이스에서 데이터를 조회하는 작업을 수행한다는 의미로 생각하면 된다.

#{} 은 동적인 표현을 의미한다. SQL 인젝션과 같은 보안 문제를 방지하고, 동적인 쿼리를 쉽게 생성한다.

사용자가 HTML 폼에서 입력한 값과 데이터베이스의 user 테이블에서 user_id 열의 값이 일치하는지를 검사하는 쿼리문이다.

Mybatis의 SQL 문장에 다수의 파라미터를 전달할 때는 전달되는 변수들에 꼭 @Param 어노테이션을 붙여줘야한다.

@Param("user_id") 는 MyBatis에서 메서드 파라미터와 SQL 쿼리의 매핑을 지정하는 어노테이션이다. 즉, 클라이언트에서 전달된 값을 MyBatis가 SQL 쿼리에 전달하는 방법이다.

따라서 userLoginProcess 메서드는 매개변수로 전달된 아이디와 비밀번호 값을 가지고 있다.

📌 3. UserDao

// 사용자 로그인 가능 여부 판단하는 메서드
public UserDto userLoginProcess(String user_id, String user_pwd) {
    return dataMapperInter.userLoginProcess(user_id, user_pwd);
}

데이터베이스에서 사용자 로그인 프로세스를 수행하기 위해 호출되는 메서드이다.

user_id와 user_pwd라는 두 개의 문자열 매개변수를 받는다.

@Autowired
private DataMapperInter dataMapperInter;

UserDao는 DataMapperInter 의존성 주입을 받고 있음으로 userInsertData() 호출해 클라이언트가 입력한 아이디와 비밀번호 값을 반환한다.

📌 4. UserController

@PostMapping("/userLogSuccess")
    public String processLoginForm(@RequestParam("user_id") String user_id,
            					   @RequestParam("user_pwd") String user_pwd,
            					   HttpSession session) {
        UserDto user = userDao.userLoginProcess(user_id, user_pwd);
        
        if (user != null) { 
        	session.setAttribute("userSession", user); 
        	session.setAttribute("user_id", user.getUser_id()); 
        	return "redirect:/usersessionkeep"; 
        }     
		else { 
			return "user/userlogin"; // 로그인 실패 시 userlogin.html로 이동.
		}
    }

클라이언트가 로그인을 하기 위해 Post방식으로 userLogSuccess 핸들러 매핑을 요청했을 때 수행되는 메서드이다.

기본적으러 processLoginForm()는 클라이언트가 요청한 아이디와 비밀번호 데이터를 받고, 세션 객체를 파라미터로 받는다.

세션(Session)은 여기서 설명하지 않고 따로 작성해서 설명하는점 참고해주세요

의존성 주입을 통해 userDao 객체를 사용하여 사용자 로그인을 처리한다. 이 메서드가 데이터베이스에서 사용자 정보를 가져오고, 가저온 정보를 UserDto 객체에 저장한다.

사용자 정보가 데이터베이스에서 확인되면, 해당 정보를 세션에 저장하고 usersessionkeep 핸들러 매핑으로 리다이렉션한다.

로그인에 실패하면 사용자를 다시 로그인 페이지로 이동시킨다.

profile
백엔드 개발자 유광진 입니다.

0개의 댓글