본문 바로가기

전체글368

ListItemReader 성능상 주의사항 Spring Batch를 사용하다보면 종종 ListItemReader 가 필요한 경우가 종종 있습니다. 물론 일반적으로는 ListItemReader를 사용하기 보다는 FlatFileItemReader, JdbcItemReader, MongoItemReader 등 Spring Batch에서 공식적으로 지원하는 ItemReader나 Custom ItemReader등을 만들어 사용하는 것을 추천합니다. 다만, 현재 Spring Batch의 ListItemReader에서는 성능 이슈가 하나 있는데요. 이번 시간에는 해당 성능 이슈가 무엇인지, 어떻게 해결할 수 있는지 간단하게 소개 드리겠습니다. 문제 상황 다음과 같은 테스트 코드를 구현해서 실행해봅니다. @ExtendWith(MockitoExtension.cl.. 2020. 9. 21.
설거지까지가 요리다 한참 마녀사냥을 재밌게 볼 때가 있었다. 그린라이트라는 희대의 유행어를 만든 프로인데, 남녀사이의 고민을 4명의 남자 MC의 입담으로 풀어나가는 재미가 대단한 프로였다. 당시 기억에 남는 회차가 있었는데, 일일 MC로 조정치씨가 나와서 신혼 생활의 고충을 얘기하던 회차였다. 와이프인 정인씨가 요리 초보다 보니 설거지 거리가 잔뜩 나와 조정치씨가 결혼 후 주부습진이 생겼다는 것이다. 어디서나 흔하게 볼 수 있는 이야기인데, 여기서 성시경씨가 한 답변이 몇 년이 지난 지금에도 계속 머릿속에 남아있다. 이별까지가 사랑이라는 말이 있듯이 설거지까지가 요리다 똑같은 음식을 만들더라도, 누군가는 음식 만들면서 주방을 난장판으로 만든 사람이 있고, 누군가는 음식 만들면서 뒤처리 생각해서 틈틈이 뒷정리, 설거지해서 끝.. 2020. 9. 5.
Querydsl select에서 상수 사용하기 쿼리 성능을 개선할 수 있는 여러 방법 중에 가장 쉬운 방법은 조회하는 컬럼의 수를 최소화하는 것입니다. dzone-6-simple-performance-tips-sql 무분별하게 Entity를 가져오기 보다는 Dto로 필요한 필드만 가져오길 권장하는 이유이기도 한대요.(물론 Entity를 사용하지 않음으로 Hibernate 1차 캐시도 없다는 것도 주요 이유입니다.) 조회에 필요한 필드들만 조회하였지만, 그럼에도 더 줄일 수 있는 방법은 무엇이 있을까요? 가장 쉽게 해볼 수 있는 것이 이미 선언되어있는 값은 그대로 사용하는 것입니다. 메소드의 인자값으로 넘어왔거나, 다른 메소드를 통해서 이미 알고 있는 값을 굳이 DB에서 다시 조회해올 필욘 없겠죠? 그래서 이번 시간에는 Querydsl에서 상수를 사용.. 2020. 9. 3.
MySQL Update Subquery 성능 비교 (ver.5.6) 지난 포스팅으로 select ~ where in (서브쿼리)와 같은 서브쿼리가 MySQL 5.6 버전에서 대폭 최적화 되었음을 확인하였는데요. 이번에는 update (update ~ where in (서브쿼리)) 에서도 서브쿼리 최적화가 잘 작동하는지 확인해보겠습니다. 0. 테스트 환경 테스트 환경은 이전 select 테스트때와 같습니다. 메인 테이블 100만건 서브 테이블1 (인덱스 O) 1000건 서브 테이블2 (인덱스 X) 1000건 DDL 쿼리는 다음과 같습니다. 메인 테이블 -- 업데이트 대상 테이블 create table main_table ( id int not null auto_increment, target_id int not NULL, primary key (id) )ENGINE=Inn.. 2020. 9. 1.
직장인으로서의 시작 예전에 정말 재밌게 했던 게임중에 도탑전기 라는 게임이 있다. (도타 저작권 문제와 별개로)(출처 - 도탑전기 나무위키) 지금은 한국에서 더이상 서비스를 하지 않는 게임이다. 요즘 나오는 조각 모으기 모바일 게임의 시초 인 게임이다. 여러 신화에 나올 법한 영웅들을 5명 조합하여 전투를 하는 게임이다. 100명이 넘는 영웅들로 나만의 5명을 조합한다는 재미가 솔솔했다. 그 게임에는 "국민덱" 이라고 하는게 있었다. (덱이란 영웅들의 조합을 지칭한다.)(출처 - 도탑전기 공식 카페)유료 아이템을 산 사람이 아니라, 무료로 게임을 즐기는 사람도 쉽게 따라할 수 있는 보편적인 조합이다. 즉, 웬만하면 따라만 하면 실패하지 않는 고효율의 조합이라는 것이다. 국민덱은 너무 많은 사람들이 하고 있고, 나만의 영웅 .. 2020. 8. 31.
MySQL where in (서브쿼리) vs 조인 조회 성능 비교 (5.5 vs 5.6) MySQL 5.5에서 5.6으로 업데이트가 되면서 서브쿼리(Subquery) 성능 개선이 많이 이루어졌습니다. 이번 시간에는 MySQL 2개의 버전 (5.5, 5.6) 에서 서브쿼리를 통한 조회 (Select)와 Join에서의 조회간의 성능 차이를 비교해보겠습니다. MySQL의 정석과도 같은 Real MySQL 책이 MySQL 5.5 버전을 기준으로 하다보니 5.6 변경분에 대해서 별도로 포스팅하게 되었습니다. 0. 테스트 환경 테스트용 테이블은 2개를 만들었습니다. 메인 테이블 100만건 서브 테이블1 (인덱스 O) 1000건 서브 테이블2 (인덱스 X) 1000건 DDL 쿼리는 다음과 같습니다. 메인 테이블 -- 업데이트 대상 테이블 create table main_table ( id int not .. 2020. 8. 27.