문제 발견
어제 프로젝트에서 테스트를 진행하던 중 계속해서 해결되지 않던 문제가 있었습니다. 데이터 save를 테스트 하고 있었는데 계속해서 데이터가 들어가지 않는 것 처럼 보이는 상황이었습니다. 그러나 DB를 살펴보니 데이터가 들어가 있었고 save 자체에는 문제가 없었습니다.
위의 과정들을 진행해가며 문제점이 save 자체가 아니라 최근에 변경한 UserResponse로 변환하는 과정에서 error가 발생하는 것으로 판단을 하고 확인을 하기 시작했습니다.
해결 과정
일단 정확한 문제 발생 지점을 찾기 위해서 해당 save 요청이 실행되는 과정을 모두 체크 하였고, 단계 단계 마다 System.out.println(); 을 이용하여 디버깅을 진행하였습니다. 그 결과 생성한 객체를 UserResponse객체로 변환하는 과정에서 Error가 발생한다는 것을 알게 되었습니다.
문제 부분의 메소드는 아래와 같이 Utils 클래스에서 받아 사용을 하고 있었습니다.
@Component
public class Utils {
//user를 userResponse로 변환
public UserResponse convertUserResponse(User user){
return UserResponse.builder()
.id(user.getId())
.username(user.getUsername())
.boardResponses(convertBoardsResponses(user.getBoards()))
.build();
}
//List<Board>를 List<BoardResponse>로 변환
public List<BoardResponse> convertBoardsResponses(List<Board> boards){
List<BoardResponse> boardResponses = new ArrayList<>();
for( Board board : boards ){
if(!board.isDeleteYn()){
boardResponses.add(BoardResponse.builder()
.title(board.getTitle())
.content(board.getContent())
.regdate(board.getRegdate())
.username(board.getUser().getUsername())
.searchCnt(board.getSearchCnt())
.id(board.getId())
.build());
}
}
return boardResponses;
}
}
원인은 convertUserResponse의 .boardResponses(convertBoardsResponses(user.getBoards()); 부분에서 발생하고 있었는데 새로 생성한 user는 Boards가 null 일 것이었고, 저는 convertBoardsResponses에 null을 입력하면 for문이 알아서 실행되지 않을 것이라 생각하고 그대로 두었지만 이 향상된 for문에 null 이 들어가게 될 경우 error 가 발생하는 것 이었습니다.
그래서 convertBoardsResponses의 시작 부에 입력받은 boards가 null인지 판단하는 if문을 추가하여 간단하게 대응하였고 문제를 해결할 수 있었습니다.
public List<BoardResponse> convertBoardsResponses(List<Board> boards){
//null 체크
if(boards == null){
return null;
}
List<BoardResponse> boardResponses = new ArrayList<>();
System.out.println("convertBoardsResponses, 1");
for( Board board : boards ){
if(!board.isDeleteYn()){
boardResponses.add(BoardResponse.builder()
.title(board.getTitle())
.content(board.getContent())
.regdate(board.getRegdate())
.username(board.getUser().getUsername())
.searchCnt(board.getSearchCnt())
.id(board.getId())
.build());
}
}
System.out.println("convertBoardsResponses, 2");
return boardResponses;
}
후기
사실 어제 저녁에 이리저리 시도를 해보다가 다른 일이 생겨서 그만두고 작업을 끝냈었습니다. 그리고 오늘 다시 이어서 확인을 하는데 이상하게도 테스트가 계속해서 성공하는 것 이었습니다.. 어제 마지막 즈음에 테스트를 통과 시켰던가..? 뭘 바꿨었지..? 이런 생각을 하게 되었고 뭘 바꿔서 해결이 되었나 찾는데 조금의 시간이 소요되었습니다. 조금만 더 복잡한 수정이었다면 더 오래 걸렸을 것이라는 생각이 들었고, 앞으로는 무얼 하던간에 메모를 더 잘 하자라는 교훈을 얻게 되었습니다.
'Study > Spring' 카테고리의 다른 글
[Spring] Spring rest docs generated-snippets adoc 안 생김 문제 (0) | 2022.04.03 |
---|---|
[Spring] @RequiredArgsConstructor 이란? (0) | 2022.03.06 |
[Spring] Spring Boot NoUniqueBeanDefinitionException 문제 (0) | 2022.01.30 |
[Spring] data.sql으로 입력된 데이터 9시간 차이 문제 (1) | 2022.01.28 |
[Spring] Spring Boot data.sql 적용 안됨 문제 (0) | 2022.01.28 |