[미니프로젝트] 회원가입 구현

김동혁·2025년 12월 7일

미니프로젝트

목록 보기
3/16

API 리스트 작성

기능을 구현하기 전에 기능에 필요한 API 리스트를 작성해보기로 했다
우리 서비스는 일반 로그인과 소셜 로그인을 지원한다

일반

  • 회원가입: [POST] /api/auth/signup
  • 로그인: [POST] /api/auth/login
  • 로그아웃: [POST] /api/auth/logout

소셜

  • 구글 로그인 시작: [GET] /oauth2/authorization/google
  • 카카오 로그인 시작 [GET] /oauth2/authorization/kakao
  • 네이버 로그인 시작 [GET] /oauth2/authorization/naver

DTO 작성

회원가입을 구현하기 위해 회원가입에 필요한 정보를 담은 DTO를 만들었다

/**
 * 회원가입 요청에 사용되는 DTO
 */
@Data
public class SignupDto {

	private String username;
	private String password;
	private String name;

	public User toEntity(String encodedPassword) {
		return User.builder()
				.username(username)
				.password(encodedPassword)
				.name(name)
				.provider("NONE")
				.role(Role.ROLE_USER)
				.build();
	}
}

Service 작성

다음은 회원가입 로직이 있는 Service를 만들어보자
앞으로 로그인, 토큰 재발급 기능 등을 AuthService에서 관리할 예정이다
signupDto에서 아이디를 획득하여 DB에 회원이 존재하는지 확인하고 DB에 저장한다

@Service
@RequiredArgsConstructor
public class AuthService {

	private final UserRepository userRepository;
	private final PasswordEncoder passwordEncoder;

	// 회원가입
	@Transactional
	public void signup(SignupDto signupDto) {
		// DB에 입력한 username이 존재하는지 확인
		if (userRepository.existsByUsername(signupDto.getUsername())) {
			throw new RuntimeException("이미 가입되어 있는 유저입니다.");
		}

		// 없으면 DB에 회원 저장
		User user = signupDto.toEntity(passwordEncoder.encode(signupDto.getPassword()));
		userRepository.save(user);
	}
}

Controller 작성

사용자가 /api/auth/signup 에서 정보를 입력하면, 정상적인 경우 "회원가입 성공"을 보여준다

@RestController
@RequestMapping("/api/auth")
@RequiredArgsConstructor
public class AuthController {

	private final AuthService authService;

	@PostMapping("/signup")
	public ResponseEntity<String> signup(@RequestBody SignupDto signupDto) {
		authService.signup(signupDto);
		return ResponseEntity.ok("회원가입 성공");
	}
}

테스트

Postman에서 테스트
body에 JSON으로 회원가입 정보를 넣어서 요청

DB에도 잘 저장되는 것을 볼 수 있다

다음은 로그인을 구현할 것이다
로그인하면 JWT 토큰을 발급해야 하기 때문에 JWT 설정을 할 예정

0개의 댓글