
쿼리를 작성하면서 이 쿼리는 테이블 풀 스캔이 일어나는 쿼리다, 일어나지 않는 쿼리다, 인덱스는 어떻게 사용하는 게 더 좋을 것 같다 등의 말을 들었는데, 도대체 그걸(테이블 풀 스캔이 일어나는지, 아닌지) 어떻게 아는지 궁금했다. 그러다가 EXPLAIN을 알게 되어 정리해본다. 아래의 링크들을 참고하여 작성했다. 8.8.1 Optimizing Queries with EXPLAIN MySQL :: MySQL 8.0 Reference Manual :: 8.8.1 Optimizing Queries with EXPLAIN 8.8.1 Optimizing Queries with EXPLAIN The EXPLAIN statement provides information about how MySQL executes ..
🔗 Window.sessionStorage Window.sessionStorage - Web API | MDN sessionStorage 읽기 전용 속성은 현재 출처 세션의 Storage 객체에 접근합니다. sessionStorage는 localStorage와 비슷하지만, localStorage의 데이터는 만료되지 않고, sessionStorage의 데이터는 페이지 세션이 끝날 developer.mozilla.org 🔗 Web Storage API 사용하기 Web Storage API 사용하기 - Web API | MDN Web Storage API는 브라우저에서 쿠키를 사용하는 것보다 훨씬 직관적으로 key/value 데이터를 안전하게 저장할 수 있는 메커니즘을 제공합니다. developer.mozil..
본 포스팅은 아래 링크의 글을 읽고 난 뒤 참고사항을 정리한 것입니다. 🔗 2022년 1월 100% 할인 이벤트 장애 부검 2022년 1월 100% 할인 이벤트 장애 부검 안녕하세요 인프런의 향로입니다. 인프런 서비스는 2022년 1월 3일 ~ 17일까지 지속적으로 서비스를 사용할 수 없는, 역대급 장애가 발생했습니다. 이번 장애 기간동안 정말 많은 분들의 질책을 들 tech.inflab.com 인덱스의 적절한 사용 인덱스가 적용이 안된 경우 성능 부하를 줄 수 있다.(쿼리 처리 지연 → 커넥션 고갈 → 요청이 대기상태로 빠짐 → 프로세스 강제 종료) → 인덱스 적용 테이블 컬럼을 변조하거나 부정조건 사용으로 인덱스를 사용할 수 없게 됨 테이블의 컬럼을 변조(lower(”컬럼명”)=lower(쿼리파라미터..
이번에 발생한 이슈에 대해 정리해본다. POI라이브러리는 오피스 파일들을 자바에서 사용하기 위해 사용하는 라이브러리로, 이 경우 엑셀을 다루기 위해 사용되었다. MS Excel은 기본적으로 저장할 때 .xlsx나 .xls의 확장자를 이용하는데, .xls은 2003 이전버전을, 이후는 .xlsx를 사용한다. 문제가 된 부분은 업로드한 엑셀파일을 서버 임시경로에 저장하는 부분에서 발생했다. 업로드하기 위해 작성이 필요한 양식을 다운로드받는 기능이 있는데, 이때도 .xslx로 다운로드되기 때문에 .xls까지는 테스트가 되지 않았던 모양이었다.(레거시코드인데, 개발 당시에 원래 테스트가 이루어졌어야 맞다고 본다...) 원래대로라면 업로드한 파일 그대로 임시경로에 저장되어서 읽어서 사용하는데, 이때 파일을 .xs..
내 실수로 발생한 건 아니지만 개발하다보면 이런 경우가 생길 수도 있을 것 같아서 정리해둔다. 얼마전 한 이슈 관련해서 유의사항을 전달받았는데, 보안상 보여지지 않거나, 보여지더라도 암호화를 통해 보여져야 할 데이터가 보란듯이 암호화도 거치지 않은 채로 로그에 info 레벨로 남겨지고 있었다는 것이다. 그래서 메일 주요 내용은 보안을 항상 고려하고 로그 레벨을 고려해서 로그를 남기라는 것이었다. 기계적으로 남기지 말고 로그에 어떤 데이터를 어떻게 보여줄지도 생각해야함을 깨달았다. 이미 알고 있는 내용이지만 간단히 정리해보자면 로그 레벨은 일반적으로 아래와 같다. FATAL : 심각 ERROR : 예외 발생 WARN : 실행에는 문제 없지만 경고 INFO : 정보성 DEBUG : 개발시 디버그 용도 TRA..
최근에 성능 개선을 하면서 dead code를 발견했는데 처음엔 왜 dead code인지 모르겠다가 원인을 찾았다. 아래는 내가 발견했던 코드를 최대한 단순화해서 표현한 예시이다. MultipartFile excelFile = request.getFile("excelFile"); List excelContent = null; ... try { // 파일 업로드 작업 } catch (IOException e) { LOGGER.error("excel file error {}", e.getMessage()); if (excelFile != null) { excelFile = null; } if (excelContent != null) { excelContent.clear(); // 이 부분이 dead code..
최근에 담당한 건에 대해 정리해보려고 한다. 기존 프로젝트에는 엑셀업로드를 통해 대량등록하는 기능이 있었는데, 엑셀 한 줄 한 줄씩 처리하다보니 성능이 느렸다. 기존에 요구된 처리량은 많아야 몇백건정도라 그동안 문제가 되지 않았지만 이번에 몇만건을 처리해야 하는 경우가 생기면서 성능을 개선하게 되었다. 요구사항 - 구분코드와 문장으로 유일한 데이터인지 판단한다. 같은 구분코드와 문장의 데이터는 존재할 수 없다. - 데이터를 구성하는 요소는 구분코드, 문장, 대체문장인데, 문장과 대체문장은 같을 수 없다. - 엑셀내에 중복된 데이터가 존재한다면 가장 최신(가장 아래)의 데이터로 등록되어야 한다. - DB에도 존재하는 중복된 데이터는 새로 등록하는 데이터로 업데이트한다. - 구분코드 2, 3의 경우, 문장에..