안녕하세요. 오늘은 MyBatis를 활용하던 도중 발생했던 에러에 대해서 공유하고자 합니다. 먼저 발생한 Exception은 postgresql 쪽에서 PSQLException으로 던지고 MyBatis 에 의해 Exception이 Wrapping 되어 가장 가까운 Exception은 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: 이런 메시지로 노출되게 됩니다. cause를 쫓아 가게되면 결국 PSQLException으로 Caused by: org.postgresql.util.PSQLException: Th..
오브젝트 컨버터로 Mapstruct 라이브러리를 활용하는 중에 보통 컴파일 실패시 어떤 추상 메소드에서 어떤 매핑에 실패했는지에 대해서 알려준다. 하지만 어떤 원인인지는 모르겠지만 maven을 활용하면서 굉장히 raw한 에러메시지를 만났고 전혀 어떤 원인에 의한 에러인지 확인할 길이 없었다. 컴파일 에러면 보통 컴파일러가 어느 지점에서 어떤 정확한 사유때문에 컴파일 할 수 없다고 알려주게 되는게 보통 나의 경험이었는데.. 오류를 해결하기가 매우 까다로웠다. 그때, 아래의 스택오버플로우를 발견하여 해결했다. 우선 에러메시지는 아래 참조페이지에서 본것과 마찬가지로 빌드 실패하며 stack을 띄우는데 "C:\Program Files\Java\jdk-14\bin\java.exe" -Dmaven.multiModu..
예전에 받았던 질문중에서 "MyBatis를 쓰고 실행 계획에 기반한 쿼리 튜닝을 통해서 성능을 많이 향상시킨다고 하셨는데, 랜덤 엑세스에 대해서 아시나요?" 라는 질문이 있었다. 랜덤 엑세스?? 분명 내가 보던 실행 계획에는 그런 워딩은 없었던 것 같다. 단순히 slow를 유발하는 컬럼에 대해 인덱스를 생성하고 해당 컬럼에 대한 쿼리 플랜에 index scan이 일어나는 것을 확인하고 쿼리의 실행 속도정도만 확인했었다. 나는 확실히 where 절에 활용되는 컬럼만을 집중했었다. 랜덤엑세스 랜덤 엑세스란 데이터를 저장하는 블록을 한번에 여러 개 액세스하는 것이 아니라 한 번에 하나의 블록만을 액세스하는 방식이다. 한 번에 여러 개의 블록을 액세스한다면(랜덤 엑세스와 반대) 같은 양의 데이터에 대해 적은 횟..