23년 7월 13일 목요일
오늘의 목표 : 나만의 항해 블로그 백엔드 서버 만들기 Lv2 튜터님 피드백 확인
오늘 공부한 내용🤓
지난 Lv2 개인과제 관련해서 튜터님 피드백이 도착했기 때문에 Lv3 구현 전에 피드백 받은 부분의 코드부터 수정해봤다.
[UserController]
튜터님 피드백 : 위 코드에서처럼 DTO를 그대로 응답하고있는데 ResponseEntity 로 감싸서 응답하는것을 추천드립니다.
<기존코드>
@PostMapping("/user/signup")
public UserResponseDto signup(@RequestBody SignupRequestDto requestDto,HttpServletResponse res){
return userService.signup(requestDto,res);
}
<수정코드>
@PostMapping("/user/signup")
public ResponseEntity<UserResponseDto> signup(@RequestBody SignupRequestDto requestDto, HttpServletResponse res){
UserResponseDto userResponseDto = userService.signup(requestDto, res);
return new ResponseEntity<>(userResponseDto, HttpStatus.OK);
}
UserResponseDto를 튜터님 말씀대로 ResponseEntity로 감싸서 응답하는코드로 수정하고, 응답코드를 반환시켰다.
[BlogController]
튜터님 피드백 : 위 코드에서 throws 를 통해 예외를 던지는 메서드가 있는데요.
Controller 는 요청을 처리하는 마지막 지점이기 때문에 예외를 던지지않고 받아줘야 합니다.
해당 예외를 받아서 에러응답을 구성해 리턴하도록 수정해주세요.
<기존코드>
@PostMapping("/posts")
public BlogResponseDto createPost(@RequestBody BlogRequestDto requestDto) throws InvalidTokenException {
return blogService.createPost(requestDto);
}
<수정코드>
@PostMapping("/posts")
public ResponseEntity<BlogResponseDto> createPost(@RequestBody BlogRequestDto requestDto){
try {
BlogResponseDto post = blogService.createPost(requestDto);
return new ResponseEntity<>(post, HttpStatus.OK);
} catch (InvalidTokenException e) {
return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
}
}
throws 예외를 던지는 메서드를 삭제하고 try-catch로 예외를 받아서 응답코드를 리턴시키는 코드로 수정했다.
튜터님 피드백 : requestDto 를 넘겨주는데 그안에있는 비밀번호를 또 넘겨주고 있는게 중복으로 불필요해보입니다.
<기존코드>
//선택한 게시글 수정 API
@PutMapping("/post/{id}")
public BlogResponseDto updatePost(@PathVariable Long id,@RequestBody BlogRequestDto requestDto) {
return blogService.updatePost(id, requestDto, requestDto.getPassword());
}
//선택한 게시글 삭제 API
@DeleteMapping("/post/{id}")
public BlogDeleteDto deletePost(@PathVariable Long id, @RequestBody BlogRequestDto requestDto) {
return blogService.deletePost(id, requestDto.getPassword());
}
<수정코드>
//선택한 게시글 수정 API
@PutMapping("/post/{id}")
public BlogResponseDto updatePost(@PathVariable Long id,@RequestBody BlogRequestDto requestDto) {
return blogService.updatePost(id, requestDto);
}
//선택한 게시글 삭제 API
@DeleteMapping("/post/{id}")
public BlogDeleteDto deletePost(@PathVariable Long id, @RequestBody BlogRequestDto requestDto) {
return blogService.deletePost(id, requestDto);
}
blogService.updatePost에서 넘겨줄 때 password부분 삭제로 처리 완료!
[BlogService]
<기존코드>
//헤더에서 토큰 추출 - 튜터님 피드백으로 주석처리
// private String getTokenFromHeader() throws InvalidTokenException {
// HttpServletRequest request // 현재 요청 정보 받고
// = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// String authorizationHeader = request.getHeader("Authorization");
// if (StringUtils.hasText(authorizationHeader) && authorizationHeader.startsWith("Bearer")) //Authorization -> null X,Bearer로 시작하는 토큰값만 추출
// {
// return subStringToken(authorizationHeader); // 토큰 값을 추출
// }
// return authorizationHeader;
// }
튜터님 피드백 : 토큰 처리에 대한 코드들은 JwtUtil 클래스로 모아서 처리하도록 해야합니다.
왜냐하면 토큰처리는 Blog의 기능이 아니고 JWT의 기능이기 때문입니다.
이건 애시당초 왜 Service class에 들어가있는지... 나도 모르는 상태.. (심지어 JwtUtil class에는 똑같은 내용이 주석처리 되어있음...)
냉큼 튜터님 말씀대로 바꿔서 적용 후 커밋!
어려웠던 내용😵💫
궁금&부족한 내용❓
UserService에도 아래와 같은 피드백을 하나 받았다.
내 코드를 보면 아래와 같이 Service로직에서 쿠키와 세션관련까지 전부 처리 한 후 Controller에서 메서드만 호출해서 작업을 수행하도록
되어있는데... 강의에서 배운 그대로 작성해놓은거라 뭐가 맞는건지..? 잘 모르겠다.
@Transactional(readOnly = true)
public UserResponseDto login(LoginRequestDto requestDto, HttpServletResponse res) throws IOException {
// - username, password를 Client에서 전달받기
String username = requestDto.getUsername();
String password = requestDto.getPassword();
//username 확인
// - DB에서 username을 사용하여 저장된 회원의 유무를 확인하고 있다면 password 비교하기
User user = userRepository.findByUsername(username).orElseThrow(
()-> new IllegalArgumentException("회원가입 된 사용자가 없습니다."));
//password 확인
if (!user.getPassword().equals(password)) {
throw new IllegalArgumentException("비밀번호가 일치하지 않습니다.");
}
//로그인에 성공한 유저의 정보와 JWT를 활용하여 토큰을 발급
//JWT Token 생성 및 쿠키에 저장
String token = jwtUtil.createToken(user.getUsername());
//Response 객체에 추가,
jwtUtil.addJwtToCookie(token, res);
// 로그인 성공
UserResponseDto userResponseDto = new UserResponseDto("로그인에 성공하였습니다.",HttpServletResponse.SC_OK);
return userResponseDto;
}
튜터님께 확인이 한번 더 필요할 듯 싶어 아직 수정 전이다.
느낀 점💡
'📌TIL [Today I Learn]' 카테고리의 다른 글
[TIL] 23년 7월 25일 화요일 (0) | 2023.07.26 |
---|---|
[TIL] 23년 7월 14일 금요일 (0) | 2023.07.14 |
[TIL] 23년 7월 12일 수요일 (0) | 2023.07.12 |
[TIL] 23년 7월 11일 화요일 (0) | 2023.07.11 |
[TIL] 23년 7월 10일 월요일 (0) | 2023.07.10 |