1. user table이 자동 생성되지않는 오류
user create 테스트 도중, user table이 자동으로 생성되지 않는 오류를 발견했다.
'user' 이라는 테이블 이름은 예약어라서 users로 변경해주니 정상적으로 반영됐다.
@Table(name = "users")
2. session 사용 시 dto와 entity 간 오류
ClassCastException이 발생했다. dto 객체를 entity 객체로 캐스팅하려 시도하면서 발생하였다.
HttpSession에 dto를 저장한 후, 이를 다시 사용할 때 entity와 dto를 무차별 혼용하면서 생긴 에러다.
따라서 session관련 데이터들은 모두 entity로 처리하도록 했다. dto는 클라이언트와의 request - response를 위한 것으로, dto를 사용해 인증인가를 거치게 되면 데이터의 무결성이 유지되지 않을 수 있다.
@Service
@RequiredArgsConstructor
@Transactional
public class UserSignupService {
private final UserRepository userRepository;
private final UserValidationService userValidationService;
public User registerUser(SignupRequestDto dto){
userValidationService.isEmailTaken(dto.getEmail());
User user = UserMapper.toEntity(dto);
userRepository.save(user);
return user;
}
}
추가로 엔티티를 세션에 저장하기 전에 데이터가 모두 로드되지 않으면 문제가 될 것 같아서 로그인, 회원가입 관련 service들에 transaction을 적용해주었다.
현재 password가 인코딩되어있지 않아서 session에 이게 쌩 값으로 추가되어 있다는 사실이 불편하지만.. 나중에 도전과제 할 떄 bcrypt를 적용하고 방법을 모색해야겠다.
->수정 : 도전과제에선 session에 Long 형의 userid를 넣어주었다.
3. requestHeader 키-값 쌍으로 인한 오류
public UserResponseDto updateUser(
UpdateRequestDto dto,
CurrentPasswordRequestDto currentPasswordRequestDto,
HttpServletRequest req){
User user = userValidationService.validateUser(req);
userValidationService.validatePassword(user.getPassword(), currentPasswordRequestDto.getCurrentPassword());
User updatedUser = user.updateUser(dto.getName(), dto.getUpdatePassword());
userRepository.save(updatedUser);
return UserMapper.toDto(updatedUser);
}
public void validatePassword(String sessionPassword, String inputPassword){
if(!sessionPassword.equals(inputPassword)){
throw new BadInputException("비밀번호가 일치하지 않습니다.");
}
}
유저 update시에 currentPassword를 검증하는 과정에서 오류가 생겼다.
String2#을 입력했는데, 서버에는 currentPassword,String2# 으로 키 - 값 쌍의 형태로 보내진다.
값을 requestHeader로 보내고 있었는데 이것이 문제였다. 스프링에서 헤더를 통해 데이터를 전달할 경우 키-값 쌍 형태로 표현된다.
updateRequestDto에 currentPassword 항목을 추가하고 requestBody로 동시 처리하는 것으로 해결했다.
'개인 공부용 프로젝트 > calendar.jpa.api' 카테고리의 다른 글
java persistence api 도전과제 도전기 (1) | 2024.12.12 |
---|