개발일지 3

문자열 탐색 성능 개선

필자는 웹메일 업체에서 스팸 차단 솔루션 개발을 담당하고 있다.스팸 차단 솔루션의 특성상 관리자/사용자가 등록한 필터들을 활용한 많은 문자열 탐색이 일어난다.이 기능을 개선하면 솔루션의 성능이 크게 향상될 것이라고 판단하여 진행하게 되었다. 우선 결론부터 말하자면 패턴 매칭의 성능 개선은 진행되지 못하였다.허나 누군가가 나와 같은 고민을 하고 있을 경우 도움을 받을 수 있도록, 또 나와 같은 실수를 하지 않도록 하기 위해 기록하고자 한다.시작 - 어떻게 개선하려 하였는가?우선 회사에서 열심히 놀고 있는 도중 우아한형제 블로그의 아래 글을 보게 되었다.https://techblog.woowahan.com/15764 고르곤졸라는 되지만 고르곤 졸라는 안 돼! 배달의민족에서 금칙어를 관리하는 방법 | 우아한형..

개발일지 2024.05.30

MySQL SELECT 쿼리 성능 개선

최근 회사에서 저장기간이 지난 데이터 삭제 중 slow query가 발생하였다. 해당 운영 환경에는 2천만건의 데이터가 저장되어있고 과거의 데이터를 추출하려다보니 이 있어 문제가 되었다. 문제가 발생한 데이터와 쿼리는 아래와 유사한 구조였다.(예시를 위한 테스트 테이블,쿼리) SELECT seq, date, subject, content FROM test_data WHERE date < {date} AND type IN ({type},{type}...) LIMIT {offset}, {limit}; 결합 인덱스 수정 우선 처음으로 select 시 해당 테이블의 인덱스를 정상적으로 사용하지 못하여 문제가 발생한다 생각하였다. 실행 계획을 확인하였을 때 아래와 같았다. 따라서 인덱스를 date와 type 모두..

개발일지 2023.08.20

자바 시큐어 코딩(CWE-495) 그리고 캡슐화

시작은 시큐어 코딩 가이드에 나와있는 public한 메소드를 통하여 반환된 private한 배열(CWE-495)을 보고 시작되었다. https://cwe.mitre.org/data/definitions/495.html CWE - CWE-495: Private Data Structure Returned From A Public Method (4.12) div.collapseblock { display:inline} CWE-495: Private Data Structure Returned From A Public MethodWeakness ID: 495Abstraction: VariantStructure: Simple The product has a method that is declared public, ..

개발일지 2023.07.11