본문 바로가기
✨ Back-end/Spring-Boot

[Spring] 보드게시판 만들기(2) 로그인 Session

by 환풍 2023. 3. 22.
728x90
Spring을 활용해서 보드게시판 만들어보기 (2) 로그인 Session

위와 같이 데이터베이스에 저장된 정보로 로그인을 실행하면

 

로그인 성공 창과함께

위와 같이 환풍님 환영합니다. 라는 문구가 뜨며 접속할 수 있다. 이 기능은 Session을 이용해서 구현한 것이다.

여기서 다른 정보로 입력도 해보겠다.

 

이렇게 로그인 실패 알람이 뜨면서 다시 로그인 창으로 되돌아 온다. 

 

login.html

로그인 html에서 ID와 PW를 입력한 후 Login버튼을 누르면 submit을 통해 action의 컨트롤러 주소를 찾아가게 된다.

이때 method="post"를 통해 @Postmapping으로,

th:object를 통해 memberVO 객체에 있는 th:field 속성으로 준 memId와 memPw를 가지고 간다.

 

MemberController

컨트롤러의 /member에 있는 로그인 경로 /login을 찾아가 해당 메소드를 실행하게 되는데,

HttpSession은 VO처럼 따로 만들어주지 않고, 위와 같이 객체를 선언만 해주면 자유자재로 사용할 수가 있다.

따라서 MemberVO 객체에 있는 login쿼리를 memberVO에 담아 loginInfo에 담아줄 수 있는데,

이전에 회원 등록 쿼리만 만들었기 때문에 이를 담아줄 쿼리가 필요하다. 바로 만들러 mapper로 가보자.

 

member-mapper.xml

먼저 Session에 loginInfo라는 정보를 담기 위해서는 SELECT 쿼리를 이용해 조회를 해야한다. SPRING_BOARD_MEMBER에서 만들어주었던 데이터들을 모두 mapper에 컬럼 값으로 넣어주고, java 값으로 property를 세팅해준 후 resultMap의 id 값을 select에 있는 resultMap에 연결시켜주었다.

 

MemberService 인터페이스

매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음
2. 채워줄 값이 하나일 경우
 2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나
 2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나
3. 채워줄 값이 여러개인 경우 : 매개변수는 DTO 객체.
리턴타입 : 쿼리 실행 결과를 어떻게 받아올지에 대한 정의
INSERT, UPDATE, DELETE 쿼리 실행 결과는
리턴타입을 int 혹은 void 사용하면됨. int로 받을 땐 return 필요o  void는 필요x
SELECT 쿼리 결과의 리턴타입은 크게 두 가지로 나뉨.
조회결과 데이터가 무조건 한줄만 조회 : DTO 객체.
조회 결과 데이터가 0줄이상 가변적일 경우 : List<DTO> 객체.

MemberServiceImpl 클래스

 @Autowired를 사용해 SqlSession을 선언하고

컨트롤러에서도 사용할 수 있게 @Service 어노테이션으로 "memberService" 값을 넣어준다.

 

다시 MemberController의 login경로를 찾아와 만들었던 login 쿼리를 memberVO에 담아 변수 loginInfo에 저장한다.

이를 보라색 네모로 감싼 출력문으로 출력해보면 사진 맨 아래와 같이 MemberVO가 콘솔창에 뜨면서 확인할 수 있다.

 

여기서 if문을 사용하여 loginInfo가 null값이 아니면 로그인 성공으로 간주하여, 

session 값에 setAttribute를 이용해 loginInfo 데이터를 "loginInfo"라는 이름으로 저장시켜준다.

이후 return "content/member/login_result";로 인해 페이지 이동을한다.

 login_result.html

컨트롤러에서 memId 라는 속성을 hidden으로 받아왔다.

th:value 속성을 이용하면 컨트롤러에서 사용했던 VO를 가져올 수 있다.

이렇게 가져온 값을 통해 session.loginInfo의 값이 null 인지 아닌지 확인할 수 있으며,

null 유무를 통해 자바스크립트로 alert을 설정해주고, 페이지 이동처리를 하였다.

 

로그인을 실패 하면 잘못된 로그인 Id를 가지고 로그인 화면으로 가면서 자동으로 입력받게 해주었고, 

로그인이 성공되면 게시판 리스트로 갈 수 있도록 경로를 지정해주었다.

 

로그인이 성공했을때 보드 게시판 board_list.html로 온 화면이다. 하지만 로그인 기능이 아직 끝나지 않았다.

만약 오른쪽 그림과 같이 LOGOUT을 하면 재 로그인 창이 뜨면서 Session 또한 지워주어야 한다.

로그인 부분은 header에서 관리했으니 해당 html로 가자.

header.html

위와 같이 session에 저장된 loginInfo가 null이 아니면 LOGOUT 표시가 뜬다. 

경로를 @로 시작하면서 컨트롤러로 가서 무언가 하게 해놨다. 해당 컨트롤러로 이동해보자.

 

MemberController 컨트롤러

해당 컨트롤러로 오게 되면, HttpSession session 을 이용해 매개변수 session을 사용할 수 있다.

removeAttribute를 이용하여 loginInfo에 저장된 MemberVO 객체 값들을 지워주면서

다시 board 컨트롤러에 있는 list 경로로 이동할 수 있다. 

 

BoardController 컨트롤러

컨트롤러에 의해 board_list로 온 화면

 

다음 포스팅에서는 글쓰기에 대해 알아보자.

반응형

댓글