전체 글

github: https://github.com/belljun3395 email: belljun3395@gmail.com
· 자바
public interface Job : CoroutineContext.Element { // ...}Job은 CoroutineContext의 Element를 확장한 객체이다.Job은 백그라운드에서 동작하고 개념적으로 완료 시 종료되는 라이프사이클을 가진 취소 가능한 것이다. 계층 구조의 JobJob은 부모-자식 계층 구조로 배열할 수 있다.이때 부모가 취소되면 모든 자식이 재귀적으로 즉시 취소된다. 그리고 취소 예외(CancellationException)가 아닌 예외가 있는 자식이 실패하면 그 부모와 결과적으로 다른 모든 자식도 즉시 취소된다.이러한 예외의 전파는 SupervisoerJob을 사용하여 예외 전파를 막을 수 있다. Job의 생성Job 인터페이스의 가장 기본적인 인스턴스는 다음과 같..
· 스프링
HandlerMethod 등록스프링에서 requestMappingHandlerMapping이 생성되며 선언한 컨트롤러의 메서드들이 요청처리를 위한 메타정보과 함께 HandlerMethod로 등록된다.public HandlerMethod( String beanName, BeanFactory beanFactory, @Nullable MessageSource messageSource, Method method) { super(method); Assert.hasText(beanName, "Bean name is required"); Assert.notNull(beanFactory, "BeanFactory is required"); this.bean..
· 자바
SupervisorJob은 자식 Job으로부터 예외를 전파받지 않아 서로 독립적으로 실패할 수 있다.참고로 Supervisor의 뜻은 감독자다 자식 Job이 실패하거나 취소되어도 SupervisorJob이 실패하지 않고 다른 Job의 작업에 영향을 미치지 않는다.SupervisorJob은 자식 Job의 실패를 처리하기 위한 사용자 지정 정책을 구현할 수 있다.launch를 사용하여 생성된 자식 Job의 실패는 컨텍스트에서 CoroutineExceptionHandler를 통해 처리할 수 있다.async를 사용하여 만든 자식 Job의 실패는 결과 지연 값에 대한 Deferred.await을 통해 처리할 수 있다. 상황Job자식 코루틴끼리 운명을 같이 해야 하는 경우Job()자식 중 하나가 실패해도 다른 작업..
· 자바
새 코루틴의 범위를 정의한다.코루틴을 생성하기 위한 명세서이다. 모든 코루틴 빌더(예: launch, async 등)는 코루틴 스코프의 확장이며, 코루틴 컨텍스트를 상속받아 모든 요소와 취소를 자동으로 전파한다.public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit ): Job { // 기존의 컨텍스트와 합쳐진 새로운 컨텍스트 val newContext = newCoroutineContext(context) ..
· 스프링
기존 AbstractPlatformTransactionManager에서의 이벤트 발행AbstractPlatformTransactionManager를 사용하는 경우 commit을 수행하는 과정에서 TransactionSynchronizationUtils의 메서드를 활용하여 @TransactionalEventListener에게 이벤트를 전달합니다.조금 더 구체적으로는 TransactionSynchronizationManager.getSynchronizations()을 통해 해당 트랜잭션에서 등록된 synchronizations을 조회하고 synchronization에 등록된 콜백을 실행하는 방법으로 이벤트를 전달합니다. ReactiveTransactionManager에서의 이벤트 발행하지만 Webflux에서..
· 개발
네임드 락을 활용한 동시성 제어동시성 문제 - 중복 저장@Componentclass SubscribeWorkbookUseCase( private val subscriptionDao: SubscriptionDao, private val applicationEventPublisher: ApplicationEventPublisher,) { @Transactional fun execute(useCaseIn: SubscribeWorkbookUseCaseIn) {belljundev.tistory.com 최근 AOP에 대해 다시 공부하며 AOP와 네임드 락을 활용하여 중복 구독 방지를 위해 구현하였던 LockAspect가 문제가 있지 않을까? 하는 생각을 하였습니다.AOP를 다시 공부하기 이전 제가 생각하였던 기존 ..
belljun
belljundev