요구사항
/
- 로그인 전이면 로그인 페이지(/login)로 이동
- 로그인한 사용자만 / 접근 가능
- 로그인한 사용자 정보 표시
- 탈퇴하기 버튼 → /delete
- 로그아웃 버튼 → /logout
- 수정하기 버튼 → /update
/signup
- 회원가입 페이지
- 회원가입 후 로그인 페이지(/login)로 이동
/login
- 로그인 페이지
- 로그인, 회원가입 버튼 표시
- 이미 로그인했으면 /로 이동
/update
- 현재 사용자 정보 표시 및 수정 가능
- 저장하기 버튼
Session
- 사용자(브라우저)로부터 들어온 데이터를 서버에 연결해 여러 페이지에서 일정하게 유지하는 기술
- 사용자(클라이언트)와 서버 간의 상태를 유지시켜 주는 방법
참고
- 현업에서는 session을 거의 사용하지 않는다.
- session은 이중화된 서버에서 오류 발생 가능
ex) 한 쪽 서버에서 로그인을 했지만, 다른 쪽 서버에서는 로그인을 했다고 인식하지 못하는 경우
/
경로를 다루는 controller/login
, /logout
, /signup
, /update
, /delete
, /userList
)를 다루는 controller요구사항
/login
- 로그인 페이지
- 로그인, 회원가입 버튼 표시
- 이미 로그인했으면 /로 이동
UserMapper.xml에 DB의 데이터를 다루는 SQL문을 작성한다.
Mapper.xml의
id
는 Mapper 인터페이스에 선언된 메서드 이름과 반드시 같아야 한다!
UseMapper.java에 getUserByEmail
메서드 선언
email로 검색한 User의 데이터 전체를 가져오는 것이므로 데이터 타입은 UserVo
입력 받은 email을 넘겨줘야 하므로 email을 매개변수로 넘겨준다.
Mapper
는 DB의 데이터와 관련된 파일이므로 메서드 이름도 DB 관점에서 작성한다!
UserService.java에 입력받은 email과 password를 매개변수로 받아 id 값을 반환하는 login
메서드 작성
getUserByEmail 메서드로 User 정보를 가져와 입력받은 password와 저장된 password가 같으면 id 값을 반환 (로그인 성공)
입력받은 password와 저장된 password가 다르면 null 반환 (로그인 실패)
/login
경로로 POST
요청이 들어오면
로그인 창에서 입력 받은 email과 password를 userService 클래스의 login 메서드로 넘겨주어 id 값을 받는다.
id 값이 null이면 로그인이 되지 않은 상태이므로 /login 으로 redirect
id 값이 존재하면 session에 userId라는 이름으로 id 값을 저장하고 / 경로로 redirect
session
에 비밀번호나 개인 정보를 담으면 유출될 수 있기 때문에 key 값(여기서는 id)만 저장하는 것이 좋다.
/login
경로로 GET
요청이 들어오면
세션에 저장되어 있는 userId라는 attibute를 받아 id에 저장
id 값이 존재하면 로그인되어 있는 상태이므로 / 경로로 redirect
id 값이 존재하지 않으면 로그인되지 않은 상태이므로 login view(login.jsp)를 보여줌
로그인이 되지 않은 상태일 때 로그인 창을 보여주는 login.jsp
를 작성한다.
로그인
버튼을 누르면 입력받은 email과 password를 /login 경로로 post
회원가입
버튼을 누르면 /signup 경로로 이동
요구사항
/signup
- 회원가입 페이지
- 회원가입 후 로그인 페이지(/login)로 이동
UseMapper.java에 insertUser
메서드 선언
User 데이터 전체를 넣는 것이므로 UserVo 객체를 매개변수로 넣어준다.
DB에 데이터를 insert 하는 메서드로, return 값은 없으므로 void로 선언
signup
메서드 작성UserController.java에 signup 관련 controller를 작성한다.
/signup
경로로 GET
요청이 들어오면
/signup
경로로 POST
요청이 들어오면
입력받은 데이터를 UserVo 타입으로 userService의 signup 메서드로 넘겨주어 DB에 데이터를 insert한다.
DB에 데이터를 insert하는 과정이 끝나면 /login 으로 redirect
회원가입 창을 보여주는 signup.jsp
를 작성한다.
회원가입
버튼을 누르면 입력받은 데이터를 /signup 경로로 post요구사항
/
- 로그인 전이면 로그인 페이지(/login)로 이동
- 로그인한 사용자만 / 접근 가능
- 로그인한 사용자 정보 표시
- 탈퇴하기 버튼 → /delete
- 로그아웃 버튼 → /logout
- 수정하기 버튼 → /update
UserMapper.java에 getUserById
메서드 선언
id로 검색한 User 데이터 전체를 가져오는 메서드이므로 데이터타입은 UserVo
id를 매개변수로 넘겨준다.
getUserById
메서드 작성/
경로로 GET
요청이 들어오면
세션에 저장되어 있는 userId라는 attribute를 받아 id에 저장
id 값이 null이 아니면 로그인되어 있는 상태이므로 id 값으로 검색해 가져온 User 데이터를 model에 넣어 home view(home.jsp)에 넘겨준다.
id 값이 null이면 로그인되지 않은 상태이므로 /login 으로 redirect
로그인이 된 상태일 때 메인 페이지를 보여주는 home.jsp
를 작성한다.
현재 로그인된 사용자의 정보를 보여준다.
수정하기
버튼을 누르면 /update 경로로 이동
로그아웃
버튼을 누르면 /logout 경로로 post
탈퇴하기
버튼을 누르면 /delete 경로로 post
요구사항
/update
- 현재 사용자 정보 표시 및 수정 가능
- 저장하기 버튼
UserMapper.java에 updateUser
메서드 선언
User 데이터 전체를 수정하는 메서드이므로 입력받은 데이터를 UserVo 타입의 객체로 넘겨준다.
DB의 데이터를 update하는 메서드로, return 값은 없으므로 void로 선언
modifyInfo
메서드 작성UserController.java에 update 관련 controller를 작성한다.
/update
경로로 GET
요청이 들어오면
세션에 저장되어 있는 userId라는 attribute를 받아 id에 저장
userService의 getUserById 메서드에 id를 매개변수로 넘겨주어 id로 검색한 User 데이터를 가져와 UserVo 타입의 객체에 저장
model에 UserVo 타입의 객체를 담아 update view(update.jsp)에 넘겨주어 기존의 회원 정보가 보여질 수 있도록 한다.
/update
경로로 POST
요청이 들어오면
세션에 저장되어 있는 userId라는 attribute를 받아 id에 저장
입력받은 데이터를 UserVo 타입으로 설정하고, id를 세션에 저장되어 있던 id로 지정하여 userService의 modifyInfo 메서드에 매개변수로 넘겨준다.
DB의 데이터를 수정하는 과정이 끝나면 / 경로로 redirect
회원 정보 수정 페이지를 보여주는 update.jsp
를 작성한다.
현재 사용자의 정보를 보여준다.
저장하기
버튼을 누르면 입력받은 데이터를 /update 경로로 post
로그아웃 기능은 DB에 접근하거나 페이지를 보여줘야 할 필요가 없으므로 Controller만 작성한다.
UserController.java에 메인 페이지에서 로그아웃 버튼을 눌렀을 때 들어오는 post 요청을 처리하는 logout controller를 작성한다.
/logout
경로로 POST
요청이 들어오면
세션에 저장되어 있는 값과 세션을 삭제한다.
로그아웃 과정이 끝나면 / 경로로 redirect
UserMapper.java에 deleteUser
메서드 선언
id 값으로 데이터를 검색하여 삭제하는 메서드이므로 id를 매개변수로 넘겨준다.
DB의 데이터를 delete하는 메서드로, return 값은 없으므로 void로 선언
withdraw
메서드 작성UserController.java에 메인 페이지에서 탈퇴하기 버튼을 눌렀을 때 들어오는 post 요청을 처리하는 withdraw controller를 작성한다.
/delete
경로로 POST
요청이 들어오면
세션에 저장되어 있는 userId라는 atrribute를 받아 그 값을 id에 저장
id의 값이 null이 아니면 userService의 withdraw 메서드에 id를 매개변수로 넘겨준다.
DB의 데이터를 삭제하는 과정이 끝나면 세션에 저장된 값과 세션을 삭제하고 / 경로로 redirect
Source Code
https://github.com/wooryung/Spring_Boot_Basic.git
이클립스로 작성해도 문제 없는 건가요?