게시글 만들기 #4

Yullc·2025년 3월 27일
post-thumbnail

1. 로그인, 로그아웃 구현

이제 파일들을 정리좀 했으니 다시 기능 구현을 해보자. 게시판에 들어갔는데 누가 작성했는지랑 수정, 삭제 이런거를 하려면 로그인이 되어있어야 하지? 그래서 로그인과 로그아웃을 만들어볼거야.

private boolean isLogined() {
        return loginedMember != null;
    }

    private void doLogin() {
        if (isLogined()) {
            System.out.println("이미 로그인중");
            return;
        }
        System.out.println("==로그인==");

        System.out.print("로그인 아이디 : ");
        String loginId = sc.nextLine().trim();
        System.out.print("비밀번호 : ");
        String password = sc.nextLine().trim();

        // 얘 내 회원인가??? -> 사용자가 방금 입력한 로그인 아이디와 일치하는 회원이 나한테 있나?

        Member member = getMemberByLoginId(loginId);

        if (member == null) {
            System.out.println("일치하는 회원이 없어");
            return;
        }

        // 있어. // 내가 알고있는 이 사람의 비번이 지금 얘가 입력한거랑 같아?

        if (member.getPassword().equals(password) == false) {
            System.out.println("비번이 틀렸어");
            return;
        }

        // 로그인 성공
        loginedMember = member; // 로그인 상태 저장

        System.out.printf("%s님 로그인 성공!\n", loginedMember.getName());
    }


    private void doLogout() {
        if (!isLogined()) {
            System.out.println("이미 로그아웃중");
            return;
        }

        loginedMember = null;

        System.out.println("로그아웃 되었습니다");
    }
  • bool 타입인 로그인 판별하는 메서드를 하나 만들자.loginedMember()가 null이면 비어있는거니까 로그인 해도 되고, null이 아니면? 뭔가가 들어있는거니까 로그인이 안되겠지?

  • 그런다음에 doLogin() 메서드를 만들건데, 먼저 isLogined()메서드를 수행해서 로그인중인지 아닌지를 판별해.

  • 그리고 로그인을 할 수 있으면 loginId를 사용자로 부터 받아 password도 받아!

  • 이제 또 판별을 해야돼..getMemberByLoginId 함수를 실행해서 내가 입력한 Id값이랑 회원가입한 Id값이랑같은지 비교를 또 해보는거야.

  • Id가 뭐 성공했대! 그러면 password도 member에 들어있는 값이랑 비교를 또 해 그래서 getPassword랑 password랑 false가 나오면 다시 하고 같으면 이제 로그인 성공이야!

  • 그런 다음 로그인 상태를 loginedMember변수에 저장 하는거지

private Member getMemberByLoginId(String loginId) {
        for (Member member : members) {
            if (member.getLoginId().equals(loginId)) {
                return member;
            }
        }
        return null;
    }
  • 이거는 loginId랑 member에 저장되어있는, 내가 회원가입한 Id랑 비교 해보는 함수야.

2. 작성, 수정, 삭제 할 때 로그인된 사람만 할 수 있도록

이제 세부적으로 들어가서 글을 작성, 수정, 삭제 할때 로그인이 되어있는 상태에서만 할 수 있도록 구현 해 볼거야.

아까 우리가 isLogined라는 함수를 사용해서 로그인이 되어있는지 안되어있는지 확인 했잖아? 이 함수를 Controller클래스에 옮길거야.

왜냐하면 Article 부분에서도 로그인이 되어있는지 안되어있는지 판별을 해야하니까 Article이랑 Member 컨트롤러의 상위 클래스인 Controller클래스에 저장하면 얘가 다 뿌려 주도록 설계를 해보았어.

switch (actionMethodName) {
            case "write":
                if (isLogined() == false) {
                    System.out.println("로그인 필요");
                    return;
                }
                doWrite();
                break;

그래서 이렇게 doWrite 메서드 수행하기전에 먼저 로그인이 되어있는지 판별 후 진행하는거야!!

profile
아자아자자

0개의 댓글