관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

데이터베이스를 이용한 회원 관리 시스템 구축하기 6 - 로그인 인증 처리를 위한 프로그래밍 본문

웹 · 앱 개발/JSP & Servlet

데이터베이스를 이용한 회원 관리 시스템 구축하기 6 - 로그인 인증 처리를 위한 프로그래밍

huenuri 2024. 12. 15. 19:50

로그인 폼을 완성한 후 이를 실행할 서블릿도 만들어 두었다면 이번에는 로그인 인증 처리를 할 차례이다.


 

 

 

 

로그인 인증 처리를 위한 프로그래밍

아이디와 암호를 입력한 후에 <로그인> 버튼을 클릭하면 회원 인증 처리를 하기 위해 서블릿이 요청된다. 서블릿에서는 인증 처리에 실패한 회원은 다시 로그인 작업을 하기 위해서 login.jsp 페이지로 이동한다.

 

 

 


 

 

 

 

 

[직접 해보기] 회원 인증을 위한 메서드 추가하기

 

이 코드는 회원 관리를 위한 MemberDAO 클래스이며, 데이터베이스와 연동하여 회원 관련 작업을 처리하는 역할을 한다. 주요 메서드와 역할을 간단히 요약하면 다음과 같다.

 

1. getInstance()

  • 역할 : 싱글톤 패턴으로 MemberDAO의 유일한 인스턴스를 반환
  • 설명 : 외부에서 new 키워드로 객체를 생성하지 않고, 이 메소드를 통해 하나의 인스턴스를 공유하도록 함

 

2. getConnection()

  • 역할 : 데이터베이스 연결 객체(Connection)를 반환
  • 설명
    1. Context를 이용해 JNDI(Java Naming and Directory Interface)를 조회
    2. jdbc/myoracle 이름의 데이터소스를 찾아 데이터베이스와 연결
    3. 생성된 Connection 객체를 반환

 

3. userCheck(String userid, String pwd)

  • 역할 : 사용자가 입력한 아이디와 비밀번호가 데이터베이스와 일치하는지 확인
  • 설명
    1. 전달받은 userid로 member 테이블에서 비밀번호를 조회
    2. 비밀번호가 일치하면 1, 틀리면 0, 아이디가 존재하지 않으면 -1 반환

 

4. getMember(String userid)

  • 역할 : 특정 아이디를 가진 회원의 상세 정보를 조회
  • 설명
    1. 전달받은 userid로 member 테이블에서 데이터를 조회
    2. 조회된 데이터를 MemberVO 객체에 저장
    3. MemberVO 객체를 반환

 

5. MemberVO 객체

  • 역할 : 회원 정보를 담는 데이터 전달 객체(Data Transfer Object, DTO)
  • 설명
    • name, userid, pwd, email, phone, admin 필드에 회원 정보를 저장
    • DAO와 다른 클래스 간 데이터 전달에 사용

 

6. 자원 정리 (finally 블록)

  • 역할 : ResultSet, PreparedStatement, Connection 등의 자원을 닫아 메모리 누수를 방지
  • 설명
    • 모든 메소드의 finally 블록에서 각각의 자원이 null이 아닌 경우 close()를 호출

 

 

 

 

요청 방식은 get과 post 두 가지 방식이 있는데 login.do가 get 방식인지 post 방식인지에 따라 그 처리가 달라진다. 일반적으로 get 방식으로 요청할 경우에는 회원 가입이나 게시끌 작성 등의 작업에서 입력 폼을 출력할 때 사용한다. 회원 정보와 게시글 정보를 모두 입력하고 난 후에 데이터베이스에 정보를 저장하기 위한 작업은 post 방식으로 요청하여 처리한다.

 

로그인 페이지 이동을 클릭하면 다음과 같은 폼이 나타나도록 코드를 작성했다.

 

 

 


 

 

 

 

이번에는 아이디와 암호를 입력한 후 <로그인> 버튼을 클릭하면 입력된 정보를 받아서 데이터베이스에 해당 정보가 저장되어 있는지 확인 작업을 해야 한다. 이 작업 역시 서블릿에서 해야 하는데 요청이 일어날 때마다 서블릿 클래스를 별도로 만들어서 처리하기보다는 로그인 입력 폼을 띄우기 위해 사용했던 동일한 요청에 요청 방식만 post로 주어서 로그인을 위한 데이터베이스 처리 작업을 한다.

<form> 태그의 action 속성에 login.do를 두고 <form> 태그의 method 속성에 post를 지정한다.

<form action="login.do" method="post" name="frm">

 

 

로그인 인증을 위한 데이터베이스 처리를 위해 login.do는 post 방식으로 요청되므로 doPost()에 다음과 같이 기술한다.


 

 

 

 

 

[직접 해보기] 회원 인증을 위한 서블릿 클래스 만들기

 

 

 

 

 

이번 장에서는 구현하지 않지만 만일 게시판을 구현한다면 게시판 관련 페이지들은 board 폴더에, 상품 관련 페이지는 product 폴더에 둔다. 하지만 메인 페이지는 회원 관리를 위한 목적으로 작성된 것이 아니기 때문에 따로 폴더에 분류해 두지 않고 웹 사이트를 구축할 때 루트 디렉터리처럼 인식하는 Webapp 폴더 바로 아래에 둔다.


 

 

 

 

 

[직접 해보기] 회원 인증된 사용자에게 제공되는 JSP 페이지

 

1. 코드 작성하기

 

3번 줄은 JSTL 태그 라이브러리를 사용하기 위한 지시자이다. <로그아웃> 버튼을 클릭하면 logout.do가 요청되며 이 요청을 받는 서블릿에서 logout.jsp로 이동한다. 여기서는 인증된 사용자의 인증을 무효화한다.

<회원정보변경> 버튼을 클릭하면 회원 정보 수정 페이지로 이동한다. 이전에 입력된 회원 정보를 보여주어야 하기 때문에 memberUpdate.do 요청 시 사용자 아이디를 파라미터로 전달한다.


 

 

 

 

 

2. 오라클에서 테이블 조회하기

여기 등록한 회원을 사용해서 로그인을 하면 된다. 근데 김수연은 잘못 입력되어 이 사람은 삭제하고 싶다.


 

 

 

 

 

3. 필요 없는 데이터 삭제 및 저장하기

 

 

이제 김수연이라는 사람은 삭제되었다.


 

 

 

 

 

4. 코드 실행하기

 

 

 

 

 

 

비밀번호를 잘못 쓰자 맞지 않는다는 문구가 든다.

 

 

 

 

 

아이디와 비밀번호가 맞자 이렇게 회원 전용 페이지가 나타난다.


 

 

 

 


 

 

 

 

 

학습을 마치고

이제 로그인을 하는 기능을 만들었다. 오늘의 배움이 참으로 값지다. 나중에 홈페이지를 만들면 이런 기능들도 충분히 만들 수 있을 것 같은 마음이 든다.

다음 포스트에서는 회원 가입을 하는 실습을 진행해보겠다.