[REST API] 13. Blog v3 : User

문정준's avatar
May 09, 2025
[REST API] 13. Blog v3 : User

REST API 서버는 데이터만 돌려주는 서버

  • 변경된 값을 항상 다시 돌려줘야 함
  • GET, POST, PUT, DELETE
 

1. 회원가입

  • UserController
@PostMapping("/join") public @ResponseBody Resp<?> join(@Valid @RequestBody UserRequest.JoinDTO reqDTO, Errors errors) { UserResponse.DTO respDTO = userService.회원가입(reqDTO); return Resp.ok(respDTO); }
  • UserService
    • 회원가입 시 원래 정보를 DB에 저장하면 안 됨
    • 해시를 이용한 암호화 진행 후 DB에 삽입
    • 해시 값을 비교할 때에는 라이브러리에서 입력값과 저장된 해시값을 비교하는 함수 사용
// RestAPI 규칙1 : insert 요청시에 그 행을 dto에 담아서 리턴한다 @Transactional public UserResponse.DTO 회원가입(UserRequest.JoinDTO reqDTO) { try { String encPassword = BCrypt.hashpw(reqDTO.getPassword(), BCrypt.gensalt()); reqDTO.setPassword(encPassword); User userPS = userRepository.save(reqDTO.toEntity()); return new UserResponse.DTO(userPS); } catch (Exception e) { throw new ExceptionApi400("잘못된 요청입니다"); } }
 

결과

  • 회원가입 성공
notion image
  • H2 Database
notion image

2. 로그인

  • UserController
@PostMapping("/login") public @ResponseBody Resp<?> login(@Valid @RequestBody UserRequest.LoginDTO loginDTO, Errors errors, HttpServletResponse response) { UserResponse.TokenDTO respDTO = userService.로그인(loginDTO); return Resp.ok(respDTO); }
 
  • UserService
public UserResponse.TokenDTO 로그인(UserRequest.LoginDTO loginDTO) { User userPS = userRepository.findByUsername(loginDTO.getUsername()) .orElseThrow(() -> new ExceptionApi401("유저네임 혹은 비밀번호가 틀렸습니다")); boolean isSame = BCrypt.checkpw(loginDTO.getPassword(), userPS.getPassword()); if (!isSame) throw new ExceptionApi401("유저네임 혹은 비밀번호가 틀렸습니다."); // 토큰 생성 String accessToken = JwtUtil.create(userPS); return UserResponse.TokenDTO.builder().accessToken(accessToken).build(); }
 

결과

  • 로그인 성공 시
    • accessToken 반환 - 인가 시 사용
notion image
 
  • 로그인 실패 시
notion image

3. 로그아웃

 
 
Share article

sxias