본문 바로가기

전체 글

(24)
TypeORM 타임존 옵션 관련 Timezone option TypeORM을 사용해 작업중에 TypeORM이 테이블에서 가져오는 값과 실제 테이블 내 컬럼값이 상이함을 발견했다. 예를들어 DB 내 실제 값은 2021-09-04 00:00:00 인데, 이 값을 TypeORM으로 가져왔을 때는 2021-09-03 15:00:00으로 변경되어 있었다. 처음에는 서버 리눅스 내부의 timezone이 상이해서 그런줄 알았는데, 똑같이 seoul로 맞춰봐도 동일했다. 혹시 ORM 수준에서 변환을 하고 있지 않을까 해서 찾아보니, 관련한 Github issue에서 해결법을 발견했다. 코드 상에서 DB 연결을 위한 ORM 설정 부분에서 timezone 파라미터를 추가해주면 된다. const connectionInfo = ({ type: 'mysql', name: 'mysql',..
ElasticSearch 인덱스에 동의어 사전 적용하기 동의어 적용은 검색에 있어 사용자에게 wow 및 ai를 활용하는 듯한 느낌을 줄 수 있다. 동의어 적용 자체는 mysql로도 어찌어찌 적용해본 경험은 있으나, DB에 쓸데없는 부하가 있어 ES에 직접 사전을 넣어 동의어 적용을 하는 것이 가장 좋다고 느껴진다. 예를 들어 생로랑과 입생로랑의 경우, 생로랑이 공식단어라 그것만 있을 경우 입생로랑을 검색했을때 생로랑이 뜨지 않을 것이다.(만약 반대조건이라면 생로랑이 입생로랑에 포함되어 상황에 따라 좀더 검색확률이 올라갔을 것이다) 현재 나는 AWS의 ElasticSearch Service를 통해 ES를 쓰고 있으므로 이를 기준으로 작성할 것이다. (ver 6.8) 예시 사전은 다음과 같다. dict.txt 생로랑, 입생로랑 구찌, 구지, 구띠 사전이라고 해서..
MySQL / MariaDB 서브 쿼리 내의 order by 안 되는 현상 + 해결법 작업을 하다 보면 다루어야 할 데이터도 많아지고, 테이블도 많아집니다. 그에 따라서 사용하는 쿼리문이 길어지기도 합니다. 쿼리가 길어지다 보면 과거 심플하던 시절에는 없던 문제가 생기기도 하는데, 이번에 제가 발견한 케이스가 있어 공유하고자 합니다. 사용했던 쿼리의 형태는 아래와 같았습니다. 3개의 테이블을 A 테이블의 m_id를 중심으로 join하고, 그 결과값을 원하는 기준으로 정렬한 후에 특정 컬럼을 기준으로 group하는 쿼리입니다. SELECT * FROM (SELECT A.m_id, A.name, B.gender, C.items FROM A JOIN B ON A.m_id = B.m_id JOIN C ON A.m_id = C.m_id ORDER BY A.regdt DESC ) AS RESULT ..