본문 바로가기
728x90

Java33

Java 동시성 이슈를 해결할 수 있는 방법 - Lock 개요최근 동시성 처리에 대한 관심이 생겨 자바에서 동시성 이슈를 처리하는 방법에 대해 공부해 보았고, 일부 내용을 정리해 두려고 한다. 각 방법별로 테스트를 위해 간단한 재고 감소 로직을 구현해 테스트하였다. 재고 감소 테스트 코드이번 글에서는 동시성을 해결할 수 있는 방법 별로 실제 동시성이 해결되는지를 확인하기 위해. 간단한 재고 감소 코드를 작성하여 테스트하였다. 재고 감소를 위해 Stock이라는 엔티티를 생성한 뒤, 주어진 id에 해당하는 재고를 quantity만큼 감소시키는 아래 메서드를 작성하여 테스트하였다.@Transactionalpublic void decrease(Long id, Long quantity) { Stock stock = stockRepository.findById(id).o.. 2025. 7. 31.
자바 Stream peek()이 skip된다? 개요운영 업무를 처리하는 도중, 특정 api 호출 시 성공 응답을 받지만 실제 데이터를 확인해 보면 관련 데이터의 변화가 없다는 문의가 들어왔다. 실제로 로그를 확인해 보니 성공 응답이 리턴되었고, 서비스 로그 상 예외 로그도 발견되지 않았다. 이번 포스트에서는 해당 이슈를 트래킹 하는 과정과 그 과정에서 알게 된 자바 stream의 peek()에 대해 정리해 본다. 원인 파악로그 확인우선 api를 호출한 프로세스의 로그와 응답한 프로세스의 로그를 함께 확인해 보았다. 해당 기능은 기능이 정상 수행되면 변경된 데이터의 수를 리턴해주는데, api 호출 프로세스에서는 해당 데이터를 정상적으로 수신했다. 또한 응답 프로세스에서도 요청 인입 시에 기록되는 로그를 확인할 수 있었고, 예외 로그 또한 찍히지 않았다.. 2025. 7. 15.
왜 ParallelStream을 써도 느릴까? - 자료구조의 중요성 개요담당하고 있는 회사 서비스에는 요청 처리가 지연될 시 알람을 받도록 되어 있는데 아래와 같은 지연 알림을 받게 되어 원인을 파악해 보고, 개선한 과정을 정리하려 한다. 1차 원인 파악지연 관련 정보우선 지연이 발생한 기능이 무엇인지, 어느 정도로 지연이 발생했는지를 정리하면 아래와 같다.기능: 문자 발송 시, 내가 수신자에 번호를 포함하여 발송하더라도 자동으로 필터링할 수신 거부 번호를 저장하는 기능기능 제약 사항: 한 번에 총 5만건 까지 저장이 가능하며, 저장 내용은 휴대폰 번호 - 메모 쌍으로 구성되어 있음지연 정보: 1시간동안 동일 경로 지연 약 10건 이상 발생지연 기능 로직 분석위 내용을 토대로 해당 시간대 발송을 요청했던 사용자의 로그를 파악해보았고, 해당 사용자가 호출한 기능의 구성을 .. 2025. 5. 11.
Optional.ifPresentOrElse로 자바의 조건 분기 깔끔하게 처리하기 개요자바에서 Optional은 널 값 처리와 관련된 문제를 효과적으로 해결해주는 유용한 클래스이다. 최근 프로젝트에서 Optional을 사용하다가 값을 조건에 따라 다르게 처리해야 하는 상황을 만났다. 기존에는 if-else 구문으로 처리했지만, Java 9부터 추가된 ifPresentOrElse 메서드를 사용하니 훨씬 깔끔하고 가독성이 좋아졌다. 이번 글에서는 ifPresentOrElse의 사용법과 활용 사례를 정리해보려고 한다. Optional.ifPresentOrElse란?Optional.ifPresentOrElse는 Optional에 값이 존재할 때와 존재하지 않을 때의 처리를 각각 지정할 수 있는 메서드이다. 이 메서드는 다음과 같은 구조를 가진다:public void ifPresentOrEls.. 2024. 11. 19.