728x90 전체 글62 왜 ParallelStream을 써도 느릴까? - 자료구조의 중요성 개요담당하고 있는 회사 서비스에는 요청 처리가 지연될 시 알람을 받도록 되어 있는데 아래와 같은 지연 알림을 받게 되어 원인을 파악해 보고, 개선한 과정을 정리하려 한다. 1차 원인 파악지연 관련 정보우선 지연이 발생한 기능이 무엇인지, 어느 정도로 지연이 발생했는지를 정리하면 아래와 같다.기능: 문자 발송 시, 내가 수신자에 번호를 포함하여 발송하더라도 자동으로 필터링할 수신 거부 번호를 저장하는 기능기능 제약 사항: 한 번에 총 5만건 까지 저장이 가능하며, 저장 내용은 휴대폰 번호 - 메모 쌍으로 구성되어 있음지연 정보: 1시간동안 동일 경로 지연 약 10건 이상 발생지연 기능 로직 분석위 내용을 토대로 해당 시간대 발송을 요청했던 사용자의 로그를 파악해보았고, 해당 사용자가 호출한 기능의 구성을 .. 2025. 5. 11. 오라클 like 슬로우 쿼리 개선 개요운영하는 서비스에서 간혹 슬로우 쿼리가 발생하여 DBA로부터 연락이 오는 경우가 있었는데, 운영팀과 협의하여 아파치 유입값 중 10초 이상의 지연이 발생하는 건에 대해 메신저를 통해 알람을 받도록 설정을 해 둔게 있었다.서비스 운영 중 위와 같은 알림을 받게 되었고 해당 로그를 추적해본 결과, 발송 결과를 조회하는 특정 케이스에 슬로우 쿼리가 발생함을 인지할 수 있었다. 원인 파악현재 운영중인 서비스에는 핀포인트라는 모니터링 툴이 연동되어 있는데 해당 툴을 통해 체크해본 결과, 슬로우 쿼리가 발생한 쿼리를 특정할 수 있었다.슬로우 쿼리가 발생했던 쿼리는 대략 아래와 같다 (실제 쿼리를 바탕으로 임의로 작성한 쿼리임).# 수행시간 대략 20초SELECT *FROM message_batch mbLEFT .. 2025. 5. 6. Gradle의 api와 implementation의 차이: 효과적인 의존성 관리 개요회사에서 스프링 부트 프로젝트 버전업 업무를 진행하며 Gradle 버전까지 함께 올려야 할 일이 생겼다. 기존에는 Gradle 5 버전을 사용했는데 8 버전으로 올리며 자료조사를 하던 중 기존 방식과 차이를 발견하여 해당 내용을 정리한다. Gradle은 3.4 버전부터 api와 implementation이라는 새로운 키워드를 도입하며 의존성 관리 방식을 개선했다. 이전에는 compile이라는 단일 키워드로 모든 의존성을 처리했지만, 빌드 성능 최적화와 의존성 관리의 명확성을 위해 compile은 Gradle 7.0에서 완전히 deprecated(사용 중단)되었다. 이번 글에서는 Gradle의 api와 implementation의 차이를 알아보고, 각각을 언제 어떻게 사용하는지 정리해 보려고 한다. a.. 2024. 11. 22. Optional.ifPresentOrElse로 자바의 조건 분기 깔끔하게 처리하기 개요자바에서 Optional은 널 값 처리와 관련된 문제를 효과적으로 해결해주는 유용한 클래스이다. 최근 프로젝트에서 Optional을 사용하다가 값을 조건에 따라 다르게 처리해야 하는 상황을 만났다. 기존에는 if-else 구문으로 처리했지만, Java 9부터 추가된 ifPresentOrElse 메서드를 사용하니 훨씬 깔끔하고 가독성이 좋아졌다. 이번 글에서는 ifPresentOrElse의 사용법과 활용 사례를 정리해보려고 한다. Optional.ifPresentOrElse란?Optional.ifPresentOrElse는 Optional에 값이 존재할 때와 존재하지 않을 때의 처리를 각각 지정할 수 있는 메서드이다. 이 메서드는 다음과 같은 구조를 가진다:public void ifPresentOrEls.. 2024. 11. 19. 이전 1 2 3 4 ··· 16 다음