반응형
Spring Boot와 Spring Security를 사용해 회원가입 및 로그인 API를 구현하고
📮 Postman으로 테스트까지 완료한 과정을 정리함 !
✅ 1. 회원가입 API 구현
📦 SignupRequest
DTO
public class SignupRequest {
@NotBlank @Email
private String email;
@NotBlank
private String password;
@NotBlank
private String nickname;
}
📦 SignupResponse
DTO
public class SignupResponse {
private Long userId;
private String message;
}
🧠 AuthService - 회원가입
public SignupResponse signup(SignupRequest request) {
if (userRepository.existsByEmail(request.getEmail())) {
throw new IllegalArgumentException("이미 사용 중인 이메일입니다.");
}
User user = User.builder()
.email(request.getEmail())
.password(passwordEncoder.encode(request.getPassword()))
.nickname(request.getNickname())
.build();
User savedUser = userRepository.save(user);
return new SignupResponse(savedUser.getId(), "회원가입이 완료되었습니다.");
}
🎯 AuthController - 회원가입
@PostMapping("/signup")
public ResponseEntity<SignupResponse> signup(@Valid @RequestBody SignupRequest request) {
SignupResponse response = authService.signup(request);
return ResponseEntity.status(HttpStatus.CREATED).body(response);
}
✅ 2. 로그인 API 구현
📦 LoginRequest
DTO
public class LoginRequest {
@NotBlank
private String email;
@NotBlank
private String password;
}
📦 LoginResponse
DTO
public class LoginResponse {
private String token; // 현재는 예시 문자열
private String nickname;
}
🧠 AuthService - 로그인
public LoginResponse login(LoginRequest request) {
User user = userRepository.findByEmail(request.getEmail())
.orElseThrow(() -> new IllegalArgumentException("이메일 또는 비밀번호가 일치하지 않습니다."));
if (!passwordEncoder.matches(request.getPassword(), user.getPassword())) {
throw new IllegalArgumentException("이메일 또는 비밀번호가 일치하지 않습니다.");
}
String fakeToken = "jwt-token-example"; // 실제 JWT는 추후 적용
return new LoginResponse(fakeToken, user.getNickname());
}
🎯 AuthController - 로그인
@PostMapping("/login")
public ResponseEntity<LoginResponse> login(@Valid @RequestBody LoginRequest request) {
LoginResponse response = authService.login(request);
return ResponseEntity.ok(response);
}
✅ 3. Postman으로 API 테스트
🔸 회원가입
- URL:
http://localhost:8080/api/signup
- Method: POST
- Body (raw / JSON):
{
"email": "test@example.com",
"password": "pass1234",
"nickname": "시은"
}
- 성공 응답 예시:
{
"userId": 1,
"message": "회원가입이 완료되었습니다."
}
🔸 로그인
- URL:
http://localhost:8080/api/login
- Method: POST
- Body (raw / JSON):
{
"email": "test@example.com",
"password": "pass1234"
}
- 성공 응답 예시:
{
"token": "jwt-token-example",
"nickname": "시은"
}
🧩 참고: 보안 설정
http
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/signup", "/api/login").permitAll()
.anyRequest().authenticated()
);
✅ 마무리
- 회원가입 & 로그인 API 구현 완료
- Spring Security 설정 추가
- Postman으로 정상 테스트 완료
- 다음 목표는 ✅ JWT 토큰 발급 기능 구현
반응형
'프로젝트 > SnapNote' 카테고리의 다른 글
Spring Boot에서 JWT 인증 구현하기 (정리) (0) | 2025.05.06 |
---|---|
Spring Boot API 테스트 중 401 Unauthorized 에러 해결기 (0) | 2025.05.06 |
SnapNote 프로젝트 개발환경 세팅기 (0) | 2025.04.26 |
Mac에서 MySQL 설치 후 SnapNote용 DB 생성하기 (0) | 2025.04.26 |