[Spring] 게시판 로그인 및 회원가입 구현

이신영·2023년 3월 13일
0

게시판 만들기

목록 보기
5/5
post-thumbnail
post-custom-banner

자세한건 깃허브에 커밋하였다.

만드는 생각 순서

  • 엔티티 정의하기 - 간단하게 로그인정보랑 별명정도
  • 엔티티를 담을 리포지토리 정의하기 - jpa사용
  • 컨트롤러에 메소드 정의하기 - 로그인폼, 로그인처리, 회원가입폼, 회원가입처리
  • 서비스에 메소드 구현하기
  • 템플릿 구현하기

써보니 되게 당연한거네 😅 대충 생각했으니 레츠고


Entity

User.java

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 30, unique = true)
    private String username;

    @Column(nullable = false, length = 100)
    private String password;

    @Column(nullable = false, length = 50)
    private String nickname;

: id를 pk로 두고 @GenaratedValue로 pk를 자동생성
: 근데 첨엔 UUID를 기본키로 두려했는데 VARCHAR는 Auto-Increment가 안된다는사실을 알아냄(부끄) 해당 오류


Repository

package com.study.board.repository;

import com.study.board.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, String> {
	//username이랑 password찾는 JPA메소드
    User findByUsernameAndPassword(String username, String password);
}

: JPA 사용


Controller


@Controller
public class UserController {
	
    @Autowired
    private UserService userService;

    //회원가입 폼
    @GetMapping("/user/signup")
    public String userSignupForm(){
        return "userSignup";
    }

    //회원가입 처리
    @PostMapping("/user/signuppro")
    public String userSignupPro(User user, Model model){

        userService.insertUser(user);

        model.addAttribute("message", "회원가입이 완료되었습니다.");
        model.addAttribute("searchUrl", "/board/list");
        return "message";
    }

    //로그인 폼
    @GetMapping("/user/login")
    public String userLoginForm(){
        return "userlogin";
    }

    //로그인 처리
    @PostMapping("/user/loginpro")
    public  String userLoginPro(User user, Model model){
    	//로그인 유무
        User loginUser = userService.findUserByUsernameAndPassword(user.getUsername(), user.getPassword());
		
        //로그인 실패
        if(loginUser==null){

            model.addAttribute("message", "로그인 실패");
            model.addAttribute("searchUrl", "/user/login");
            return "message";
        }
        //성공
        else {
            return "redirect:/board/list";
        }
    }

}

userSignupPro : 회원정보(user) 저장과 완료될 때 메세지 출력
userLoginPro : 회원정보를 db에서 찾아보고 실패 메세지 혹은 리다이렉트 출력


Service

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    //회원가입
    public void insertUser(@NotNull User user){

        user.setUsername(user.getUsername());
        user.setPassword(user.getPassword());
        user.setNickname(user.getNickname());

        userRepository.save(user);
    }


    public User findUserByUsernameAndPassword(String username, String password) {
        return userRepository.findByUsernameAndPassword(username, password);
    }
}

insertUser : 유저정보 저장
findUserByUsernameAndPassword : JPA메소드로 username과 password 찾기


View

boardlist.html

    <form th:action="@{/user/signup}" method="get">
        <button type="submit">회원가입</button>
    </form>
    <form th:action="@{/user/login}" method="get">
        <button type="submit">로그인</button>
    </form>

: 회원가입과 로그인 추가

usersignup.html, userlogin.html 추가(보고싶다면 깃허브에.. 자세한건 생략한다)


실행 결과


: 회원가입과 로그인 버튼이 추가됨


: 회원가입버튼을 누르면 회원가입됨


: db에 갱신된 모습


: 로그인 시도


: 성공하여 게시판으로 리다이렉트(아직 세션구현은 안함)


: 잘못된 로그인 시 실패창과 함께 다시 로그인창으로 돌아감


후기

로그인을 성공하는것까지는 참 쉽다!(사실 힘들었음) 하지만 로그인은 유지되어야 로그인이지.. 😅 Spring Security를 안쓰고 하다가 좀 귀찮아져서 하다가 말아버림 ㅎ; 내일은 Spring Security를 사용하여 로그인과 로그아웃을 마저 구현해봐야지~

profile
후회하지 않는 사람이 되자 🔥
post-custom-banner

0개의 댓글