(SpringBoot+JPA CRUD 게시판) 로그인 구현하기

김지인·2022년 8월 17일
0
post-thumbnail

들어가기 앞서서...

기존에 진행했던 서블릿으로 구성한 CRUD 게시판을 스프링부트로 옮긴 것입니다.


로그인 view화면


(위: 기존의 서블릿CRUD 로그인 view / 아래: 스프링부트+JPA 로그인 view)

  • 크게 달라진건 없다. 로그인 버튼을 눌렀을때 매핑정보만 수정했다.

로그인 컨트롤러

  • 기존의 servlet에서는 클래스 자체에 매핑을 해서 클래스 자체가 action을 수행하도록 했다면, 스프링부트에서는 각 메서드마다 어노테이션으로 매핑을 통해 수행하도록 수정했다.
  • 기존의 servlet에서는 데이터베이스를 다루는 객체를 new를 통해 직접 선언했다면, 스프링 부트에서는 @Autowired어노테이션을 이용해 데이터베이스를 다루는 객체를 자동으로 주입되게끔 했다.
  • 기존의 servlet의 로그인 구조랑 비슷하게 view로 부터 데이터를 받아와서 데이터베이스에 접근하여 해당 아이디체크 후 토큰을 받아 성공, 실패 여부를 체크하는 식으로 구현했다.
  • 다만 차이점은 servlet에서는 session.setAttribute를 통해 로그인 성공시에 userId를 세션에 저장했고, 스프링 부트에서 model은 세션으로도 이용이 가능하기에 userId를 모델에 저장했다.
    그리고 세션에 저장을 알리는 @SessionAttribute어노테이션을 이용해 명시했다.

로그인 DAO, 서비스

  • servlet에서는 직접 sql문을 작성해서 그 결과를 직접 ResultSet객체에 담아와 해당값을 통해 로그인 성공여부를 결정했다면, JPA에서는 따로 sql문을 작성할 필요 없이 JPA를 상속받는 boardMemberRepository를 통해 로그인 성공여부를 결정한다.
  • 컨트롤러로 부터 받아온 BoardMemberuserId를 JPA의 findByuserId의 인자로 넘겨줘서 기존의 데이터와 비교하여 해당 결과를 loginInfo 인스턴스에 담아준다.
  • 해당 loginInfo가 비어있으면 토큰 LOGINFAIL를 반환하고, 만약에 비어있지는 않은데 컨트롤러로부터 온 BoardMemberuserPwd데이터가 기존의 데이터베이스의 데이터를 담고있는 loginInfouserPwd와 같지 않다면 LOGINFAIL를 반환한다.
  • 이 과정에서 문제가 없었으면 LOGINSUCCESS를 반환한다.

단순히 기존의 servlet의 로직을 스프링부트+JPA로 옮긴거 이기때문에 시큐리티 등이 적용이 안됏다. 추후에 업데이트를 통해 구현해보도록 하자.

profile
에러가 세상에서 제일 좋아

0개의 댓글