MySQL 쿼리 사용 시, IN절 최적화 MySQL 쿼리 사용 시, IN절을 자주 사용하는 편이다. 지금까지 알고 있었던 내용으로 IN절은 최대 1,000개까지 사용해도 성능에 크게 문제가 없을 줄 알았다. 그런데 1,000개를 사용해도 MySQL 옵션에 따른 옵티마이저의 실행 계획에 따라 성능이 좋지 않을 수도 있다는 것을 알게 되었다. 상황에 따라 1,000개까지 사용하고 싶다면, IN절의 개수를 조금씩 늘려가면서 성능 테스트를 진행해야 한다는 것도 추가로 알게 되었다. 주요 키워드 Index Range Scan, index dive Index Range Scan, index statistics MySQL의 eq_range_index_dive_limit 옵션 MySQL의 range_optimizer_..
Hibernate 구현체에서 Auto Commit 최적화 방법 Hibernate 사용하면서, 서비스 상황에 따라 Auto Commit 상태를 최적화하는 방법에 대해서 공부했고, Hibernate 구현체는 Database Connection Pool의 Auto Commit 설정 상태를 신뢰하지 않는다는 것을 알게 되었다. 정리한 내용 https://github.com/bestdevhyo1225/dev-log/blob/master/JPA/Hibernate_AutoCommit.md GitHub - bestdevhyo1225/dev-log: :memo: Record :memo: Record. Contribute to bestdevhyo1225/dev-log development by creating an acc..

Spring Batch 복습 Spring Batch의 Step에서 Chunk 처리를 하다가 에서 예외로 인해 처리가 실패한 경우, Batch Job을 재실행하면 실패한 Chunk부터 처리된다는 것을 알게 되었다. Spring Batch Starter 버전은 3.1.0이며, Spring Batch Core 버전은 5.0.2이다. 단일 Step chunkSize 값이 2이고 데이터가 10건이면, 2건씩 쪼개서 작업하기 때문에 총 5번을 통해 Batch 작업이 마무리된다. 근데 이때, 2번째 작업에서 실패한 경우, 재실행하면 2번째부터 이어서 작업한다. 파티셔닝 기반의 멀티 스레드 Step 파티셔닝 기반의 멀티 스레드로 Step을 병렬적으로 처리하는 경우에는 당연히 실패 지점부터 다시 처리되지 않을 줄 알았는..
강의 수강 패스트 캠퍼스의 백엔드 개발자를 위한 한 번에 끝내는 대용량 데이터 & 트래픽 처리 초격차 패키지 Online. 강의에서 Redis를 활용해서 LeaderBoard를 구현했다. 사용했던 Redis 명령어를 간단히 정리하고자 한다. 사용했던 Redis 명령어 Redis 자료구조에서 정렬을 잘 관리할 수 있는 SortedSet(ZSet) 자료구조를 사용했다. 유저의 스코어 등록 zadd(key, value, score) 특정 유저의 랭크 조회 zrevrank(key, value) 탑 랭커 리스트 조회 zrevrange(key, start, end) 정리 순위로 나타낼 수 있는 다양한 대상에 응용이 가능하다는 것을 배웠다. 최대 구매 상품순으로 유저에게 상품을 노출한다던지 상품의 리뷰순으로 유저에게..
2023.06.06 [OS] 컨텍스트 스위칭 복습 [OS] CPU Bound, I/O Bound 공부 2023.06.07 [OS] 스핀락, 뮤텍스, 세마포어 복습 2023.06.10 [Java] NIO 공부 및 실습 예제 만들기 [OS] 모니터 복습 [OS] 교착상태 복습 2023.06.12 [Java] 스레드 상태 정리 2023.06.13 [OS] 인터럽트와 시스템 콜 공부 2023.06.14 [OS] 스레드 종류(하드웨어, OS, 네이티브, 커널, 유저, 그린 스레드) 공부