트러블슈팅

트러블슈팅

[트러블슈팅] MySQL FULLTEXT 특정 문자 검색 안될 때

N-gram Parser를 이용해 검색 기능을 구현하던 중 특정 문자에 대해 검색이 안되는 것을 확인했다. 현재 'name'이라는 칼럼에 FULLTEXT INDEX를 걸어놓은 상태인데, 'b'라고 검색하면 정상적으로 결과가 나오지만 'a'라고 검색하면 결과가 나오지 않는 것을 확인할 수 있다. 쿼리문은 다음과 같다. SELECT * FROM products WHERE MATCH(name) AGAINST ( IN BOOLEAN MODE); 이는 'a'가 구분자(Stopword)이기 때문에 발생한 문제이다. 자세한 설명은 관련 링크를 참고하면 된다. MySQL innoDB에는 내부적으로 다음과 같은 stopword들이 존재한다. mysql> SELECT * FROM INFORMATION_SCHEMA.INNO..

트러블슈팅

[트러블슈팅] Invalid keyPath 에러

리덕스 스토어 내에서 Invalid keyPath 에러가 발생했다. 에러가 발생한 코드는 다음과 같다. 상태는 다음과 같은 구조다. 일반적으로 이 에러가 발생하는 이유는 에러명 그대로 인자로 정의된 keyPath가 잘못 정의되어 있기 때문이다. 우선 공식문서와 스택오버플로우를 뒤져봤지만, 코드 자체가 안 돌아갈 이유는 없었다. 원래 다른 컴퓨터에선 잘 돌아갔기도 했다. npm 모듈 버전 문제라는 생각이 들어서 설치된 npm 모듈 리스트를 확인했다. immutable의 버전이 3.8.2로, 최신 버전인 4.0.0-rc.12버전과 상당한 차이가 났다. 기존 immutable 모듈을 삭제하고, 다시 설치해줬더니 정상적으로 작동했다. $ npm uninstall immutable $ npm install imm..

트러블슈팅

[트러블슈팅] UseEffect에서 clean up이 되지 않을 때 (feat. async)

문제 아래 코드와 같이 UseEffect를 작성했다. 이 함수는 다음과 같은 기능을 한다. 1) mount되면 thunk를 이용해 데이터를 fetch한 후 스토어에 있는 상태 값을 변경하고, 2) unmount되면 clean up 함수를 통해 상태 값을 비워준다. 문제 해결 1번 동작은 잘 이루어졌지만, 2번 동작이 이루어지지 않았다. 콘솔을 찍어보니 아예 clean up 함수 자체가 호출이 되지 않았다. 문제는 바로 async 키워드를 붙여 useEffect 함수를 async 함수로 만든 것이었다. 아마도 비동기 처리가 필요한 코드를 작성했다가 지운 것 같은데 async 키워드는 까먹고 제거하지 못했다. 다음과 같이 코드를 수정하니 정상적으로 clean up 함수가 작동됐다. async function..

트러블슈팅

[트러블슈팅] ER_CON_COUNT_ERROR: Too many connections

유저 마이페이지에서 GET요청을 보내던 도중 다음과 같은 에러가 발생했다. 문제는 이 에러가 계속해서 발생하는 것이 아니라, 잘 되다가 한 번씩 발생하는 것이었다. ER_CON_COUNT_ERROR: Too many connections 콘솔창에 출력된 에러 그대로 connection을 너무 많이 만들어준 것이 문제였다. 대체로 트랜잭션 내에서 connection release를 안 해주는 것이 이 에러의 원인이었지만, 나의 경우엔 pool을 생성하는 미들웨어 내에서 에러의 원인이 있었다. module.exports = { database(req, res, next) { const pool = mysql.createPool({...}); res.pool = pool; next(); }, ... } 나는 ..

트러블슈팅

[트러블슈팅] Uncaught ReferenceError: kakao is not defined

리액트에 Kakao 지도 API를 적용하던 중 다음과 같은 에러가 발생했다. Uncaught ReferenceError: kakao is not defined public/index.html index.html의 head태그에 다음과 같이 추가해주고 src/Register.jsx Register 컴포넌트 내에서 다음과 같이 변수를 선언해줬다. const geocoder = new kakao.maps.services.Geocoder(); ... 문제는 index.html에 저렇게 선언하면 지도 API를 불러들이지 못한다는 것이다. 이런 방식으로 리액트에서 지도 API를 사용하기 위해선 kakao 앞에 window를 붙여줘야 한다. 다음과 같이 말이다. const geocoder = new window.ka..

코택
'트러블슈팅' 카테고리의 글 목록 (4 Page)