본문 바로가기

Programming/트러블슈팅

(5)
[Mysql] IN쿼리가 인덱스를 타지 않는 현상 실 운영 환경을 Mysql5.6 -> 5.7로 업그레이드 했을 때 발생하던 현상이였다. 분명히 같은 IN쿼리지만, 5.6에서는 인덱스를 타던 것이 5.7로 넘어오면서 인덱스를 타지 않게 된 것이다. 정확히 말하자면, 아예 안타는 것은 아니고 id IN (대략 만개이상) 의 경우에 인덱스를 타지 않았다. 즉, 특정 개수 이상의 ID를 IN쿼리 안에 넣으면 인덱스를 타지 않았다. 결론부터 말하면 쿼리 자체를 메모리에 올리는 것 또한 메모리 제한이 있었다. 그 제한은 range_optimizer_max_mem_size 옵션을 통해 확인할 수 있다. > 참고링크 : https://dev.mysql.com/doc/refman/5.7/en/range-optimization.html#range-optimization..
< json parsing error 외부 업체와 통신 작업을 하고 있는데, 우리쪽 응답받는 부분에서 계속해서 < json parsing error ~ 에러가 계속해서 발생하였다. 뭔데 < 이걸 json으로 파싱하려 하는걸까?? 생각을 해보니 저 형태는 무언가 json형태가 아닌 html형식으로 response를 주는 것이 아닌가라는 추측을 하였다. 우리는 통신 라이브러리를 retrofit을 사용하고 있었다. retrofit의 converter 설정을 json converter를 사용하고 있었기 때문에 응답을 json으로 파싱하려한다. 실제 응답 결과를 보기 위해 curl을 날려본 결과 html로 응답을 오는 것을 확인하였고 json형태로 응답형식을 바꿔달라고 요청해서 해결하였다. 따라서 저러한 에러가 난다면, 응답의 형태가 json형태가 ..
[Spring] IntelliJ에서 종종 Build가 깨지는 오류 가끔가다 이유없이 IntelliJ에서 Build가 깨지는 오류가 있다. (→ 직접 gradle로 build하면 잘되는 경우) 어디간에서 꼬인 것 같은데, 이유는 잘 모르겠고 다음을 순서대로 수행해보며 해결해본다. Gradle Refresh 첫번째 방법으로 라이브러리가 꼬인 경우가 많으니 Gradle Refresh를 해준다. (IntelliJ 오른쪽 Gradle Tab -> refresh모양 버튼 클릭) Project Structure → Problem build가 깨지면 해당 페이지에 Problem이 표시된다. 라이브러리가 꼬인 케이스인데 여기서 수동으로 삭제해줄 수도 있다. (상위 File 탭 -> Project Structure -> Problem) File → Cache 삭제 IntelliJ Cac..
JPA 테이블 updated_at이 갱신안되는 문제 DDL에 updated_at을 다음과 같이 설정해주었다. `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 하지만, JPA로 데이터를 갱신할 때 updated_at이 갱신안되는 문제가 있었다. JPA로 UPDATE할 때는 보통 findBy~ 로 객체를 조회하고 save를 하는 형식으로 필드를 업데이트하는 형식인데, 객체를 조회할 때 당연히 updated_at도 함께 조회된다. 그럼 이 때 save를 할 때 조회했던 updated_at이 set되서 save가 되므로, 스키마 단에서 ON UPDATE을 해주었더라도 이미 set하서 save하므로 이전에 조회했던 updated_at이 저장됐던 것이다. 해결법은..
@RequestParam 날짜형식 LocalDate 매핑 API에서 Param 타입을 LocalDate로 받았을 때 문제가 발생했다. @RequestBody 로 받았을 때는 Json으로 파싱을 하므로, 보통 전역적으로 걸려있는 Json Serializer 에서 yyyy-MM-dd 포맷 String을 자동으로 LocalDate로 파싱해주는 설정을 해준다. 하지만 @RequestParam 을 사용할 때는 쿼리스트링으로 Param을 받으므로 전역적으로 걸려있는 Json Serializer가 작동하지 않는다. 그렇다는 말은, 쿼리스트링으로 Param이 들어올 땐 String이 LocalDate로 변환되지 않는다는 말이다. 그래서 @RequestParam 어노테이션 앞에 @DateTimeFormat(pattern = "yyyy-MM-dd") 을 붙여서 해결할 수 있다...