문제 발생 디스패처 서블릿 예제를 구현하는 도중 home.jsp를 요청하는 GET 요청을 보냈을 때 요청이 2번 들어가서 2번째 요청에서 null pointer Exception이 발생했다. @WebServlet("/") public class DispatcherServlet extends HttpServlet { private static final Logger logger = LoggerFactory.getLogger(DispatcherServlet.class); private RequestMappingHandlerMapping rmhm; @Override public void init() throws ServletException { rmhm = new RequestMappingHandlerMapp..
문제 Jsoup을 이용한 웹 크롤링을 하는 도중 TimeoutException이 발생했다. 세 가지 TimeoutException이 랜덤하게 발생했는데 Read Timeout, Connetion Timeout, socket timeout이었다. Connect Timeout: 웹 페이지에 연결하는데 걸리는 시간이 오래걸려 발생하는 예외이다. Socket Timeout: 서버와 클라이언트가 패킷을 주고 받을 때 전송 시간 차이가 생기는데 이 시간의 제한을 socketTimeout이라고 함 Read Timeout: 연결은 잘 되었으나 웹 페이지를 읽어오는데 걸리는 시간이 오래걸려 발생하는 예외 검색 해당 예외를 처리하기 위해 검색을 했을 때 가장 많이 나온 솔루션으로 Thread.sleep()을 사용해서 딜레..
위 사진과 같이 Mustache 파일을 리턴했을 때 한글이 물음표로 출력되는 에러가 발생했다. 해당 에러는 머스테치 사용 시 스프링 버전에 따라 한글이 깨지는 문제가 있다고하는데, 스프링부트 2.7.x 버전을 사용할 때 아래 코드를 properties 파일에 추가해주니까 해결되었다. server.servlet.encoding.force-response= true 2.6.x 버전에서는 build 설정을 gradle에서 intellij로 변경해서 해결됐다는 사례도 있는 것 같다.
Gradle 5.x 버전 이상부터는 Lombok dependency 추가 방식이 달라서 위와 같은 에러가 발생한다. 5.x 이전 버전 dependencies { implementation 'org.projectlombok:lombok' } 5.x 이후 버전 dependencies { compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' }
테스트 코드 작성 후 실행을 했을 때 아래와 같은 에러가 발생했다. 찾아보니 build 설정을 gradle에서 intellJ로 바꿔주어야한다. gradle과 intelliJ 둘 다 같은 빌드 툴을 사용하지만 빌드 방식이 다르다고 한다. intelliJ는 증분 빌드 방식을 사용해서 변경된 사항만 빌드를 하기 때문에 빌드 속도가 더 빠르다. 하지만 삭제된 파일에 대해서 반영이 되지않아 삭제된 파일을 포함하여 빌드하는 문제가 생길 수 있다.
에러 발생 JPA에서 JPQL을 통해 쿼리를 날렸을 때 ConverterNotFoundException이 발생 원인 분석 에러메세지: 응답값을 변환할 때 변환하는 컨버터를 찾을 수 없다. 구글링해본 결과 @Query를 사용해서 반환 받은 값을 DTO 클래스에 저장할 경우에 발생한다. 보통 Getter가 없거나 타입이 맞지않을 때 발생할 수 있다. 나의 경우에는 위 2가지 경우에 해당이 되지않아 다른 경우를 찾아본 결과 JPA에서 GROUP BY를 통해 결과를 받아오면 Object 타입으로 반환된다고 한다. 해결 1. 반환 타입을 Object 타입으로 바꾸고, 서비스 클래스에서 Object 타입을 DTO 클래스로 변환 2. DTO 인터페이스를 생성해서 인터페이스에 해당 필드의 getter 선언해서 사용