개요 로컬에서 개발할 때 h2 In-Memory DB를 사용하던 중, h2.console.enabled 설정을 true로 하고 애플리케이션을 기동시켰는데 애플리케이션 기동이 안되고 오류가 발생했다. 📍 오류 내용 This is because there is more than one mappable servlet in your servlet context: {org.h2.server.web.JakartaWebServlet=[/h2-console/*], org.springframework.web.servlet.DispatcherServlet=[/]}. This method cannot decide whether these patterns are Spring MVC patterns or not. If this..
Trouble Shooting
슬로우 쿼리 발생 내가 운영하던 그룹웨어 게시판 서비스에는 '최근 게시글'이라는 특수한 게시판이 존재했다. 보통 게시글은 사용자가 등록한 게시판에 접근해서 조회하지만, 해당 게시판은 모든 게시판의 게시글을 등록 순으로 보여주는 게시판이었다. 내가 막 게시판 서비스를 맡게 되었을 때 전임자 분께서 "해당 API가 속도가 안나오니 언젠간 튜닝을 해야 할거에요"라는 말을 하셨는데, 그 때 속도 체크 해봤을 때는 2~3초 나와서 아직 튜닝할 때는 아니라고 판단하고 냅두고 있었다. 그런데 어느날 인프라 팀에서 특정 고객사에서 해당 게시판의 게시글 리스트를 조회할 때 속도가 너무 오래걸린다는 안내를 받았고, 해당 고객사에 들어가서 확인해보니 API 속도가 약 7초 가량 소요되고 있었다. 속도 저하의 원인이 되었던 ..
개요 회사 업무를 진행하던 중 특정 쿼리를 수행할 때 마다 아래와 같은 Collations 관련 오류가 연달아 3번이나 발생했다. Illegal mix of collations (~~) and (~~) for operation '=’ Collation이란 ?? 문자열을 비교, 정렬하기 위해서 정의된 규칙들의 집합이다 (Character Set은 글자 자체의 인코딩에 대한 정의) 이 Collation 오류에 대한 히스토리와 해결 방법을 공유하고자 한다. 첫번째 오류 가장 처음 발생한 Collation 오류 메시지는 다음과 같다 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operati..
오류 내용 Mybatis에서 #{} 문법으로 파라미터 바인딩 된 곳에 주석 처리를 하면 아래와 같이 오류가 발생한다. java.sql.SQLSyntaxErrorException: (conn=554682) Could not set parameter at position 원인 및 해결방안 mybatis에서는 #{ } 이 있는 곳을 -- 주석이나 또는 /* */ 주석으로 감싸면, 주석 내에 있는 코드여도 파라미터를 지정하는 대상으로 판단한다. 그래서 #{} 코드를 주석처리하려면 을 사용해야한다. : 사용 가능 /* #{} */ : 오류 -- #{} : 오류
이슈 내용 그룹웨어 게시판 운영 중 있었던 이슈사항을 기록하고자 한다. 내가 맡은 그룹웨어 게시판 기능 중에는 [게시글 프린트] 기능이 있는데, 해당 버튼을 클릭하면 현재 게시글의 게시글을 팝업 형태로 요약해주고 프린트 기능을 제공한다. 그런데 고객사 중 이전 버전의 그룹웨어를 사용하다가 업그레이드 진행한 이력이 있는 고객사가 있는데 해당 고객사에서 [게시글 프린트] 버튼을 클릭하면, 이전버전 그룹웨어 도메인으로 팝업이 호출된다는 오류 사항을 전달 받았다. 원인 및 해결 게시글 조회 API 호출 전에는 헤더 부분의 요청 URL이 정상적으로 현재 그룹웨어 도메인으로 들어가 있었지만, 호출 뒤에 다시 확인해보니 해당 URL이 과거 그룹웨어 도메인으로 변경되었다. 원인을 파악해 보니 게시글 조회 API 리턴값..
개요 코드 변경사항이 발생한 경우 branch 이동이나 원격 저장소의 코드 병합을 하기 위해서는 commit을 해야 하는데, 종종 commit을 하기 애매한 상황이 있다. 이런 경우 git의 stash 기능을 사용해서 코드 변경사항을 임시저장하고 진행하면 되는데 이때 신규 파일의 경우에는 git의 관리 대상이 아니기 때문에 (한 번은 commit을 해야 함) 그냥 stash 명령어를 수행하면 그대로 날라가게 된다. 만약 stash 할 때 신규 파일까지 임시저장 하려면 아래 명령을 사용하면 된다. git stash --include-untracked 그러나 이 방법을 모르고 stash를 한 경우에는 아래 방법대로 없어진 파일을 복구하기를 추천한다 ! 해결 방법 안타깝게도 git에는 reset을 잘못한 경우..