본문 바로가기
  • Coding & Book
Back-End/Springboot

[Spring boot] 간단한 회원가입 코드 구현해보기_2

by 루이3 2024. 4. 7.

이전 포스팅

https://loui3.tistory.com/210

 

[Spring boot] 간단한 회원가입 코드 구현해보기

이전 포스팅 https://loui3.tistory.com/207 [Spring boot] 간단한 회원가입 구현해보기 구현해 볼 것 오늘은 Spring Boot와 JWT(JSON Web Token)를 사용하여 간단한 회원가입 및 로그인 기능을 구현하는 방법에 대해

loui3.tistory.com

 

 

구현해 보기

이번 포스팅에서는 회원가입에서 RepositoryService를 구현해 보도록 하겠습니다.

이들은 데이터베이스와의 로직을 처리하거나 상호작용하는데 중요한 역할을 합니다.

각 부분을 자세히 살펴보면서 어떻게 동작하는지 알아보겠습니다.

 

Repository: 데이터베이스와 상호작용을 처리하기 위한 클래스

  • Repository에서는 CRUD 작업을 수행하는 메서드를 제공합니다.
  • CRUD는 Create, Read, Update, Delete 작업을 뜻합니다.
  • existsByUserid 메소드를 선언하여 사용자 ID가 이미 있는 경우에는 true, 없는 경우 false를 반환합니다.
import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository<User, Long> {
    boolean existsByUserid(String userid);
}

 

Database에서는 아래와 같은 코드일 것입니다.

SELECT COUNT(*) FROM User WHERE userid = :userid

 

 

UserService: 사용자 관련 비즈니스 로직을 처리하는 클래스

1. 사용자 id 확인

  • isUseridExists(String Userid)는 주어진 사용자 id가 데이터베이스에 이미 저장되어 있는지 확인합니다.

2. 사용자 등록

  • registerUser 메서드는 새로운 사용자를 등록합니다.
  • 전송한 정보를 이용하여 User 객체를 생성하고 비밀번호는 암호화하여 저장합니다.
  • 그 후 userRepository.save(newUser)를 사용하여 데이터베이스에 저장합니다.
  • registerUser 메서드는  컨트롤러에서 사용한 userService.registerUser 부분을 말합니다.
  • BCryptPasswordEncoder는 Spring Security에서 제공하는 비밀번호 암호화 도구입니다.
    (해시 알고리즘 사용)
package com.example.blog.blog;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import java.time.LocalDate;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    // BCryptPasswordEncoder를 사용하여 비밀번호 암호화
    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

    // 아이디 중복 확인
    public boolean isUseridExists(String userid) {
        return userRepository.existsByUserid(userid);
    }

    // 사용자 등록
    public User registerUser(String id, String password, LocalDate birthdate, String nickname, String profilePictureUrl) {
        User newUser = new User();
        newUser.setUserid(id);
        newUser.setPassword(passwordEncoder.encode(password)); // 비밀번호 암호화하여 저장
        newUser.setBirthdate(birthdate);
        newUser.setNickname(nickname);
        newUser.setProfilePictureUrl(profilePictureUrl);
        // 데이터베이스에 사용자 정보 저장
        return userRepository.save(newUser);
    }
}

 

 

 

테스트해 보기

이제 테스트를 해보겠습니다.

테스트는 postman에서 진행해 보도록 하겠습니다.

local환경에서 진행할 것이므로 post - http://localhost:8080/register를 넣어주시면 됩니다. 

 

 

그 후 Body -> raw ->JSON을 선택해 준 후 값들을 넣어줍니다.(필드에 해당하는 값)

 

 

그리고 전송버튼을 눌러주시면 회원가입이 되신 것을 확인하실 수 있습니다.

데이터베이스에도 값들이 저장되며 패스워드 경우 해시함수로 저장됩니다.

전송 하기

 

데이터베이스 사진

 

 

만약에 userid가 이미 저장되어 있는 상태면 데이터베이스에 값들이 저장이 안 되고
아래와 같은 문구가 뜨는 것을 확인하실 수 있습니다.