Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Semina3 #3

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Semina3 #3

wants to merge 2 commits into from

Conversation

dltnals317
Copy link
Collaborator

@dltnals317 dltnals317 commented Nov 4, 2024

[3주차 과제] 회원가입 및 로그인 기능 구현


1. 회원가입

1.1 구현 방식

  • 회원가입 기능은 /users/signup 경로에 POST 요청을 통해 동작
  • UserController 클래스의 registerUser 메서드에서 회원가입 요청을 처리
  • 요청 본문은 UserSignupRequest DTO 객체로 매핑되도록 했다.
  • 서비스 계층의 UserService에서 비즈니스 로직을 처리하고, 최종적으로 UserRepository에서 사용자 데이터를 DB에 저장한다.

1.2 예외 처리

  • 닉네임 중복 시 예외가 발생하도록 별도의 checkDuplicateNickname 메서드에서 중복성을 검사하도록 했음!
  public void checkDuplicateNickname(String nickname){
      if (userRepository.existsByNickname(nickname)) {
          throw new IllegalArgumentException("닉네임이 이미 존재합니다");
      }
  }

1.3 특징

  • @Transactional을 사용하여 사용자를 등록하는 과정에서 데이터 일관성을 보장

2. 로그인

2.1 구현 방식

  • 로그인 기능은 /users/login 경로에서 POST 요청을 통해 동작
  • UserController 클래스의 loginUser 메서드에서 로그인 요청을 처리
  • UserLoginRequest DTO 객체로 본문 데이터를 매핑합니다.
  • 서비스 계층의 UserService에서 사용자 자격을 검증하는 로직이 수행됩니다.
  • 최종적으로 UserRepository에서 사용자 데이터를 DB에 저장합니다.

2.2 예외 처리

  • UserRepository에서 username을 기준으로 사용자를 조회한 후 예외를 처리합니다.

    private UserEntity validateUserCredentials(String username, String password) {
        UserEntity user = userRepository.findByUsername(username)
                .orElseThrow(() -> new IllegalArgumentException("유저가 존재하지 않습니다."));
        if (!user.getPassword().equals(password)) {
            throw new IllegalArgumentException("비밀번호가 틀렸어요");
        }
        return user;
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant