기존 SVN 레포지토리에 있던 소스를 다른 레포지토리로 옮기고 체크아웃 후 실행하는데 그 과정에서 발생한 문제들의 해결방법을 정리해본다. 1. properties 파일을 찾지 못하는 문제 프로퍼티 파일이 존재하는데 프로파일을 찾지 못하겠다며 다음과 같은 오류가 발생했다. class path resource [config/properties/system-properties-local.yml] cannot be opened because it does not exist 그래서 찾아보니 build path의 문제였다. 이클립스의 프로젝트 위에서 오른쪽 클릭 후 [Build Path] - [Configure Build Path]를 선택한다. Source탭에서 properties 파일이 존재하는 경로를 넣어준다...

쿼리를 작성하면서 이 쿼리는 테이블 풀 스캔이 일어나는 쿼리다, 일어나지 않는 쿼리다, 인덱스는 어떻게 사용하는 게 더 좋을 것 같다 등의 말을 들었는데, 도대체 그걸(테이블 풀 스캔이 일어나는지, 아닌지) 어떻게 아는지 궁금했다. 그러다가 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..