▶ 필수 기능 과제
▷ 트러블 슈팅
1. BeanCreationException 에러
● 발단
: 프로그램 제작 후 테스트를 위해서 실행했을 때 실행이 되지 않으면 BeanCreationException이 나타났다는 에러문이 나타나게 되었다.
● 원인 및 해결
: 원인은 해당 프로그램에 @Repository 어노테이션을 작성하지 않아 나타나게 되었다. 그래서 이를 작성한 후 다시 실행했더니 정상적으로 작동하게 되었다.
2. NoSuchElementException 에러
● 발단
: 수정되는 현 시간을 자동으로 삽입하여 날짜가 작성되도록 기능을 제작한 후 프로그램을 실행하면서 나타나게 되었다.
● 전개
: 프로그램 자체는 원활하게 진행되었지만, 수정하는 기능을 실행하면 500 Internet Servlet 에러가 나타나게 되었다. 그래서 나타나는 에러문을 통해 NoSuchElementException 에러가 나타났음을 알 수 있었다.
다만, 수정기능에 에러가 나타났지만 조회 기능을 실행하면 수정한 부분이 정상적으로 기입되어 있었다.
● 해결과정
: NoSuchException은 불러오는 요소에 값이 없는 경우 발생한다고 한다. 그래서 나는 아래의 코드 뒤에 여러 조건을 두어 어떤 값이 null 값으로 오는지 알아보았다.
if(todo==null || name==null){
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Todo and Name are required value.");
}
진행한 결과 date==null 조건으로 두었을 때 해당 에러문이 실행됨을 알 수 있었지만, 애초에 date 값은 따로 기입 받지 않고 LocalDateTime.now()를 통해서 값을 저장하기 때문에 뭔가 이상하다고 느꼈다.
그렇게 다른 문제를 살펴보던 도중 해당 매서드를 실행하기 위한 매개변수에 id 값을 넣고 실행을 하쟈 오류 없이 진행되게 되었다.
● 원인
: 원인은 id 값을 빼고 조회를 했기 때문이라고 생각하지만 NoSuchElementException 오류가 나타난 정확한 원인은 알 수 없었다.
● 해결된 코드
@Override
public SMResponseDto updateSMByPassword(Long id, String todo, String name, String password, String date) {
if(todo==null || name==null){
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Todo and Name are required value.");
}
//날짜는 수정된 날짜를 넣어야하기 때문에 수정한 시간을 date에 저장한다.
int updateRow=smRepository.updateSM(id, password, todo, name, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
if(updateRow==0){
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "No data has been modified.");
}
return new SMResponseDto(smRepository.findSMById(id).get());
}
● 의문점
: 진행하면서 date 값이 null로 받는다는 것을 알 수 있었는데, 저장되면서 작성된 시간을 저장하는 date 값이 어째서 null로 받게 되는지 알 수가 없었다.
'TIL' 카테고리의 다른 글
| CH3 일정 관리 앱 Develop 과제 TIL (0) | 2025.02.12 |
|---|---|
| 내일배움캠프 TIL 22. (1) | 2025.02.05 |
| 내일배움캠프 TIL 21. (1) | 2025.01.23 |
| 내일배움캠프 TIL 20. (2) | 2025.01.22 |
| 내일배움캠프 TIL 19. (0) | 2025.01.21 |