[Spring Boot] Session으로 로그인, 회원가입 구현하기

우롱차·2022년 11월 2일
1

Spring Boot

목록 보기
3/7

요구사항

  • /
    • 로그인 전이면 로그인 페이지(/login)로 이동
      • 로그인한 사용자만 / 접근 가능
    • 로그인한 사용자 정보 표시
    • 탈퇴하기 버튼 → /delete
    • 로그아웃 버튼 → /logout
    • 수정하기 버튼 → /update
  • /signup
    • 회원가입 페이지
    • 회원가입 후 로그인 페이지(/login)로 이동
  • /login
    • 로그인 페이지
    • 로그인, 회원가입 버튼 표시
    • 이미 로그인했으면 /로 이동
  • /update
    • 현재 사용자 정보 표시 및 수정 가능
    • 저장하기 버튼

Session

  • 사용자(브라우저)로부터 들어온 데이터를 서버에 연결해 여러 페이지에서 일정하게 유지하는 기술
  • 사용자(클라이언트)와 서버 간의 상태를 유지시켜 주는 방법

    참고

    • 현업에서는 session을 거의 사용하지 않는다.
    • session은 이중화된 서버에서 오류 발생 가능
      ex) 한 쪽 서버에서 로그인을 했지만, 다른 쪽 서버에서는 로그인을 했다고 인식하지 못하는 경우

📄 프로젝트 구조

  • HomeController: / 경로를 다루는 controller
  • UserController: User와 관련된 경로(/login, /logout, /signup, /update, /delete, /userList)를 다루는 controller

💡 로그인 구현하기

요구사항

  • /login
    • 로그인 페이지
    • 로그인, 회원가입 버튼 표시
    • 이미 로그인했으면 /로 이동

1. Mapper.xml 작성

  • UserMapper.xml에 DB의 데이터를 다루는 SQL문을 작성한다.

    • 로그인 창에서 입력 받은 email로 User 정보 가져오기

      Mapper.xml의 id는 Mapper 인터페이스에 선언된 메서드 이름과 반드시 같아야 한다!

2. Mapper 인터페이스 작성

  • UseMapper.java에 getUserByEmail 메서드 선언

    • email로 검색한 User의 데이터 전체를 가져오는 것이므로 데이터 타입은 UserVo

    • 입력 받은 email을 넘겨줘야 하므로 email을 매개변수로 넘겨준다.

      Mapper는 DB의 데이터와 관련된 파일이므로 메서드 이름도 DB 관점에서 작성한다!

3. Service 작성

  • UserService.java에 입력받은 email과 password를 매개변수로 받아 id 값을 반환하는 login 메서드 작성

    • getUserByEmail 메서드로 User 정보를 가져와 입력받은 password와 저장된 password가 같으면 id 값을 반환 (로그인 성공)

    • 입력받은 password와 저장된 password가 다르면 null 반환 (로그인 실패)

4. Controller 작성

  • UserController.java에 login 관련 controller를 작성한다.
    • /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)를 보여줌


5. JSP 작성

  • 로그인이 되지 않은 상태일 때 로그인 창을 보여주는 login.jsp를 작성한다.

    • 로그인 버튼을 누르면 입력받은 email과 password를 /login 경로로 post

    • 회원가입 버튼을 누르면 /signup 경로로 이동

💡 회원가입 구현하기

요구사항

  • /signup
    • 회원가입 페이지
    • 회원가입 후 로그인 페이지(/login)로 이동

1. Mapper.xml 작성

  • UserMapper.xml에 입력받은 데이터를 User 테이블에 추가하는 SQL문을 작성한다.

2. Mapper 인터페이스 작성

  • UseMapper.java에 insertUser 메서드 선언

    • User 데이터 전체를 넣는 것이므로 UserVo 객체를 매개변수로 넣어준다.

    • DB에 데이터를 insert 하는 메서드로, return 값은 없으므로 void로 선언

3. Service 작성

  • UserService.java에 userVo 객체를 매개변수로 받아 입력받은 데이터를 DB에 insert하는 signup 메서드 작성

4. Controller 작성

  • UserController.java에 signup 관련 controller를 작성한다.

    • /signup 경로로 GET 요청이 들어오면

      • signup view(signup.jsp)를 보여준다.
    • /signup 경로로 POST 요청이 들어오면

      • 입력받은 데이터를 UserVo 타입으로 userService의 signup 메서드로 넘겨주어 DB에 데이터를 insert한다.

      • DB에 데이터를 insert하는 과정이 끝나면 /login 으로 redirect

5. JSP 작성

  • 회원가입 창을 보여주는 signup.jsp를 작성한다.

    • 회원가입 버튼을 누르면 입력받은 데이터를 /signup 경로로 post

💡 로그인 후 메인 페이지 구현하기

요구사항

  • /
    • 로그인 전이면 로그인 페이지(/login)로 이동
      • 로그인한 사용자만 / 접근 가능
    • 로그인한 사용자 정보 표시
    • 탈퇴하기 버튼 → /delete
    • 로그아웃 버튼 → /logout
    • 수정하기 버튼 → /update

1. Mapper.xml 작성

  • UserMapper.xml에 id 값으로 User 데이터를 불러오는 SQL문을 작성한다.

2. Mapper 인터페이스 작성

  • UserMapper.java에 getUserById 메서드 선언

    • id로 검색한 User 데이터 전체를 가져오는 메서드이므로 데이터타입은 UserVo

    • id를 매개변수로 넘겨준다.

3. Service 작성

  • UserService.java에 id로 User 데이터를 가져오는 getUserById 메서드 작성

4. Controller 작성

  • HomeController.java에 controller를 작성한다.
    • / 경로로 GET 요청이 들어오면

      • 세션에 저장되어 있는 userId라는 attribute를 받아 id에 저장

      • id 값이 null이 아니면 로그인되어 있는 상태이므로 id 값으로 검색해 가져온 User 데이터를 model에 넣어 home view(home.jsp)에 넘겨준다.

      • id 값이 null이면 로그인되지 않은 상태이므로 /login 으로 redirect

5. JSP 작성

  • 로그인이 된 상태일 때 메인 페이지를 보여주는 home.jsp를 작성한다.

    • 현재 로그인된 사용자의 정보를 보여준다.

    • 수정하기 버튼을 누르면 /update 경로로 이동

    • 로그아웃 버튼을 누르면 /logout 경로로 post

    • 탈퇴하기 버튼을 누르면 /delete 경로로 post

💡 회원 정보 수정 구현하기

요구사항

  • /update
    • 현재 사용자 정보 표시 및 수정 가능
    • 저장하기 버튼

1. Mapper.xml 작성

  • UserMapper.xml에 입력받은 값으로 데이터를 수정하는 SQL문을 작성한다.

2. Mapper 인터페이스 작성

  • UserMapper.java에 updateUser 메서드 선언

    • User 데이터 전체를 수정하는 메서드이므로 입력받은 데이터를 UserVo 타입의 객체로 넘겨준다.

    • DB의 데이터를 update하는 메서드로, return 값은 없으므로 void로 선언

3. Service 작성

  • UserService.java에 입력받은 값으로 DB의 데이터를 수정하는 modifyInfo 메서드 작성

4. Controller 작성

  • 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

5. JSP 작성

  • 회원 정보 수정 페이지를 보여주는 update.jsp를 작성한다.

    • 현재 사용자의 정보를 보여준다.

    • 저장하기 버튼을 누르면 입력받은 데이터를 /update 경로로 post

💡 로그아웃 구현하기

로그아웃 기능은 DB에 접근하거나 페이지를 보여줘야 할 필요가 없으므로 Controller만 작성한다.

1. Controller 작성

  • UserController.java에 메인 페이지에서 로그아웃 버튼을 눌렀을 때 들어오는 post 요청을 처리하는 logout controller를 작성한다.

    • /logout 경로로 POST 요청이 들어오면

      • 세션에 저장되어 있는 값과 세션을 삭제한다.

      • 로그아웃 과정이 끝나면 / 경로로 redirect

💡 탈퇴 구현하기

1. Mapper.xml 작성

  • UserMapper.xml에 User 테이블의 데이터 중 id 값이 일치하는 데이터를 삭제하는 SQL문을 작성한다.

2. Mapper 인터페이스 작성

  • UserMapper.java에 deleteUser 메서드 선언

    • id 값으로 데이터를 검색하여 삭제하는 메서드이므로 id를 매개변수로 넘겨준다.

    • DB의 데이터를 delete하는 메서드로, return 값은 없으므로 void로 선언

3. Service 작성

  • UserService.java에 id 값으로 DB의 데이터를 삭제하는 withdraw 메서드 작성

4. Controller 작성

  • 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

profile
아직 따끈따끈합니다🍵

1개의 댓글

comment-user-thumbnail
2023년 6월 30일

이클립스로 작성해도 문제 없는 건가요?

답글 달기