2주차에 백엔드 MVC가 대부분 완성되었기 때문에 이번 주차에는 테스트 시 발생하는 트러블을 해결하거나 코드를 리팩토링하는 과정을 진행하기로 결정했다.
무한 스크롤 구현이 예정되어 있어서 GET요청 시 조회하는 부분을 다시 확인하는 도중 검색 기능에 문제점을 발견했다. 기존의 검색기능은 챌린지 조회 시 모든 챌린지를 조회한 후 조건문을 이용해 제목, 태그, 카테고리에 검색어가 포함되는 지 구분하여 결과를 반환했다. 그 결과 중복된 글 판별이 불가능한 상황이었다.
이를 해결하기 위해 검색 로직을 변경하기로 결정했고 repository에서 JPQL을 사용해 distict를 사용해 중복을 제거하고 join을 이용해 tag 테이블을 join해서 검색어가 포함된 챌린지를 조회하도록 변경했다.
인증 게시글 및 댓글의 작성 날짜를 반환 시 LocalDateTime 형식을 toString 메서드를 이용해 String으로 변환 후 substring을 사용해 yyyy.MM.dd HH:mm:ss 형식으로 변환하여 반환했었다. 그런데 테스트시에 날짜에서 예외가 발생했고 이를 분석한 결과 초가 00초 일 경우 toString 변환 시에 생략되는 것을 발견했다.
이를 해결하기 위해 DateTimeFommater를 사용해 yyyy.MM.dd HH:mm:ss 형식을 지정하여 String 형식으로 변환하였고 테스트 결과 00초가 생략되지 않아 정확하게 표현되는 것을 확인했다.
채팅 기능은 잘 동작했으나 제작 과정에서 변경사항이 생겨 코드 수정시 중복된 코드가 많게 되었다. 따라서 채팅 기능의 리팩토링을 하기로 결정했다.
채팅 메세지 부분의 코드는 DB 저장 및 채팅 메세지를 send하는 것이 중요한 부분으로 이 부분에서 눈에 띄게 중복된 부분이 많아 이 부분의 메서드를 분리하여 필요없는 코드를 삭제하고 역할을 분리하여 200줄 이상의 코드를 줄이고 가독성을 높이는 결과를 가져왔다.