전체글623 1. 페이징 성능 개선하기 - No Offset 사용하기 일반적인 웹 서비스에서 페이징은 아주 흔하게 사용되는 기능입니다. 그래서 웹 백엔드 개발자분들은 기본적인 구현 방법을 다들 필수로 익히시는데요. 다만, 그렇게 기초적인 페이징 구현 방식은 서비스가 커짐에 따라 큰 장애를 유발할 수 있는데요. 서비스 초기에는 수천 ~ 수십만건정도로 데이터가 적어서 큰 문제가 없지만, 점차 적재된 데이터가 많아짐에 따라 페이징 기능이 수십초 ~ 수분까지 조회가 느려지는걸 경험하게 됩니다. 특히 1억건이 넘는 테이블에서의 페이징은 단순히 인덱스만 태운다고해서 성능 문제가 해결되진 않습니다. 그래서 이번 시간에는 일반적인 페이징 기능에서 성능을 개선하는 방법을 알아보겠습니다. 당연하겠지만, 인덱스를 이용한 쿼리 튜닝이 되어있다는 가정하에 진행됩니다. 조회 쿼리의 인덱스 사용조차.. 2020. 10. 15. Spring Boot에서 yyyy-MM 포맷으로 날짜 받고싶을때 Spring Boot에서 Request 항목으로 년월 (2020-09, 202009 등)만 필요할때가 종종 있습니다. 2020-09-01과 같은 일자의 경우 Request Dto로 LocalDate를 사용할 수 있었는데요. Spring Boot 환경에서의 LocalDate, LocalDateTime에 대한 상세한 내용은 이전에 작성된 SpringBoot에서 날짜 타입 JSON 변환에 대한 오해 풀기을 참고해보시면 좋습니다. 년/월만 있을 경우 LocalDate로 처리할 수가 없습니다. 그래서 아래와 같이 문자열로 받고, LocalDate로 치환한 뒤에 다시 월 연산을 시작하곤 하는데요. @ToString @Getter @NoArgsConstructor public class YearMonthRequest.. 2020. 10. 2. Spring Batch에서 socket was closed by server 발생시 시스템 이관을 진행하면서 각종 설정들이 기존 설정들과 달라 운영 테스트에서 여러 이슈를 만나게 되는데요. 최근 Spring Batch 환경 이관에서 기존 Job 들을 테스트 하던 중 다음과 같은 이슈를 만나게 되었습니다. Caused by: java.io.EOFException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server) 기존에 잘 작동하던 Batch Job에서 왜 이런 문제가 발생하는지, 어떻게 하면 해결할 수 있는지 확인해보겠습니다. 1. 테스트 환경 상황 재현에 사용된 환경은 다음과 같습니다. Java 8 Spring Boot Data & Batch 2.3.2 Spring Batch 4.2.4 HikariC.. 2020. 9. 29. 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. 이전 1 ··· 40 41 42 43 44 45 46 ··· 104 다음