Spring Framework 를 사용한다면 ApplicationEventPublisher를 사용해 이벤트 발행을 시킬 수 있다.만약 이벤트 대상 메서드에서 예외가 발생하면 어떻게 될까?이벤트 메서드에서 예외가 던져지면 이벤트를 발행한 메서드까지 전파된다. @Async를 사용해 비동기 처리를 하지 않는 이상 같은 스레드에서 동기 방식으로 실행되기 때문이다.그럼 TransactionalEventListener 에서도 마찬가지일까? TransactionalEventListener@TransactionalEventListener애너테이션은 이벤트 발행 메서드의 트랜잭션 상태에 따라 이벤트 호출 시점을 결정해 준다.BEFORE_COMMIT - 커밋 직전 후AFTER_COMMIT - 커밋 성공 후 호출AFTER_..
보통의 웹 서비스에서 쓰기 작업 보단 읽기 작업이 비교적 빈번하게 일어난다. 그렇기 때문에 웹 서비스를 운영하며 읽기 작업 개선은 매우 중요하다고 생각한다. 조회 성능 개선 방법 중 인덱스를 이용하는 방법에 대해 알아보았다.1줄 요약(TL;DR)인덱스 선택은 사용 빈도, 사용 컬럼, 카디널리티 분석 등 다방면으로 고려할 줄 알아야 한다.들어가며가상의 이커머스 서버를 설정으로 진행했다. 브랜드, 상품 테이블이 존재하고 상품 목록 조회에 대한 성능 비교를 진행했다.브랜드 테이블이름이 중복되지 않은 가상의 브랜드를 2000개 생성하였다.상품 테이블브랜드 id, 이름, 판매 상태, 삭제 여부, 좋아요 카운트를 가지고 있고 총 1000만개의 데이터를 준비했다.브랜드 당 5000개의 상품을 생성하였다.조회 성능이 ..
1줄 요약 (TL;DR)성능은 가상스레드, 멋들어진 방법은 코루틴 코루틴으로 테스트를?보통 자바 환경에서 테스트 코드로 동시성 로직을 검증할 때 스레드 풀과CountDownLatch 를 사용할 텐데, 코틀린을 쓴다면 코루틴을 사용해도 좋다. 테스트를 위한 코루틴 세팅코루틴은 테스트를 위한 api 를 제공한다. TestScope, runTest 등 여러 기능을 사용할 수 있다.testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:{coroutine-version}") 동시성 테스트 속도 비교흔히 동시성 테스트를 만들면 아래와 같을 것이다. @Test fun `자바 동시성 테스트`() { val threadSize = ..