요 며칠동안 토이프로젝트느낌으로 개인공부 할 겸 jsp와 servlet으로 게시판을 만들었다. 내가 제작하는 동안 고려했던 점은 세가지이다.
view단은 최소화, servlet단에서 최대한으로 수행하도록 제작.
하나의 함수가 하나의 기능을 하게끔 구성.
추후에 스프링환경으로 적용하는 것을 고려하여 설계.
가장 먼저 로그인페이지다.
form
태그로 감싸서LoginController
로 매핑되어 있는 서블릿을 호출한다.LoginController
로 매핑되어 있는 서블릿에User_Id
와User_Pwd
를 넘겨준다.
사용자의 아이디와 비밀번호는 노출되면 안되는 정보이기에 get
이 아닌 post
를 사용하여 주소상에 나타나지 않게끔 했다.
그렇게 구현된 로그인창
그렇다면 이제 LoginController
로 매핑되어 있는 서블릿을 보자.
HttpServlet
의 기본 내장함수인doPost
를 이용하여User_Id
와User_Pwd
를 받는다.- 받은 데이터를
loginAfterMovePage
함수에 넣어 아이디와 비밀번호가 올바르면 게시판으로 들어갈 수 있게끔 해보자.
자 그러면 생각해보자.
view단에서 데이터를 받아왓으면 해당 서버가 가지고 있는 데이터와 확인을 해야하지 않겠는가 ?
- 로그인에 필요한 데이터베이스에 접근하는 인스턴스
logindao
를 생성했다.- 해당
logindao
인스턴스의 함수인getTokenOfLoginCheck
에userId
와userPwd
를 넣어 성공인지 실패인지 토큰을 받아오자. (아직은 해당로직이 어떤기능인지 생각을 안해도 괜찮다.)- 그렇게 받아온 토큰을
loginAfterMovePageSwitch
를 통해 화면을 이동하자.
- 받아온 토큰에 따라서 switch구문을 이용하여 각각 실행한다.
- 만약에
LOGINSUCCESS
토큰을 받아오면 해당 유저의 아이디를 세션에 저장하여 페이지를 이동해도 해당 아이디가 계속 유지되게 끔 한다.
여기까지 로그인의 대략적인 컨트롤러를 구현해보았다. 다음은 데이터베이스쪽을 구현해보자.
먼저 직관적으로 보기 위해 enum을 이용해 토큰을 세가지 종류로 만들었다.
로그인이 성공하면 LOGINSUCCESS
를, 실패하면 LOGINFAIL
을, 오류가 나면 LOGINERROR
을 토큰으로 내보낼것이다.
- 출력값이 Token인 함수를 만들었다.
- view에서 받은
userId
와userPwd
를 회원테이블인BOARDMEMBER
테이블에USERID
와USERPWD
에 각각 대입하기 위해getLoginPst
를 실행- 그 해당함수의 출력데이터인 ResultSet의 객체를 받아와
getTokenOfLoginCheckIfLogic
을 통해 토큰을 출력할 것이다.
- 해당 sql문에 view에서 받아온 데이터를 넣는 로직
rs.next()
를 통해 데이터가 만약 있으면LOGINSUCCESS
토큰 출력, 그렇지 않을경우엔LOGINFAIL
토큰 출력.- try문을 거치지 않을 경우에는 데이터베이스 오류이므로
LOGINERROR
토큰 출력
하나의 함수가 하나의 기능을 하게끔 짜려고 했는데, 너무 복잡해지는 느낌이 든다. 물론 내 로직이므로 나는 이해가 쉽지만 남이 보았을때 너무 어려울거 같다는 생각이 있다. 근데 좋은점은 기능을 나눠놧기 때문에 테스트도 쉽고 어디서 오류가 나오는지 디버깅하기도 쉬웠다.