프로듀서-컨슈머 패턴은 '해야 할 일' 목록을 가운데에 두고 작업을 만들어 내는 주체와 작업을 처리하는 주체를 분리하는 설계 방법이다. 프로듀서-컨슈머 패턴을 사용하는 작업을 만들어 내는 부분과 작업을 처리하는 부분을 완전히 분리할 수 있기 때문에 개발 과정을 좀 더 명확하게 단순화시킬 수 있고, 작업을 생성하는 부분과 처리하는 부분이 각각 감당할 수 있는 부하를 조절할 수 있다는 장점이 있다. 프로듀서-컨슈머 패턴을 적용해 프로그램을 구현할 때 블로킹 큐를 사용하는 경우가 많다. 예를 들어 프로듀서는 작업을 새로 만들어 큐에 쌓아두고, 컨슈머는 큐에 쌓여 있는 작업을 가져다 처리하는 구조다. 프로듀서는 어떤 컨슈머가 몇 개나 동작하고 있는지 전혀 신경 쓰지 않을 수 있다. 단지 새로운 작업 내용을 만들..
분류 전체보기
데이터 클래스는 주로 데이터를 보유하는 데 사용된다.각 데이터 클래스에 대해 컴파일러는 인스턴스를 읽을 수 있는 출력으로 인쇄하고, 인스턴스를 비교하고, 인스턴스를 복사하는 등의 작업을 수행할 수 있는 추가 멤버 함수를 자동으로 생성한다. 컴파일러는 기본 생성자에서 선언된 모든 프로퍼티에서 다음 멤버를 자동으로 파생한다.equals()/hashCode()toString()componentN()copy()컴파일러는 자동으로 생성된 함수에 대해 기본 생성자 내부에 정의된 프로퍼티만 사용한다.생성된 구현에서 프로퍼티를 제외하려면 클래스 본문 안에 프로퍼티를 선언해야 한다. 생성된 코드의 일관성과 의미 있는 동작을 보장하기 위해 데이터 클래스는 다음 요구 사항을 충족해야 한다.기본 생성자에는 매개변수가 하나 이..
EnableJpaRepositoriesEnableJpaRepositories에서 JpaRepository를 위한 설정을 구성한다.주요 설정basePackages: JpaRepository를 스캔할 기준 패키지repositoryImplementationPostfix: Custom Repository 구현의 Postfix, 기본 값은 ImplentityManagerFactoryRef: 엔티티 매니저 팩토리 이름, 기본 값은 entityManagerFactorytransactionManagerRef: 트랜젝션 메니저 이름, 기본 값은 transactionManager JpaRepositoriesRegistrar를 임포트한다.ImportBeanDefinitionRegistrar를 구현한 클래스로 @Configu..
정의마커 인터페이스 확인이나 프록시로 빈을 래핑하는 등 새 빈 인스턴스의 사용자 정의 수정을 허용하는 팩토리 훅이다.일반적으로 마커 인터페이스 등을 통해 빈을 채우는 포스트 프로세서는 postProcessBeforeInitialization(java.lang.Object, java.lang.String)을 구현하고, 프록시로 빈을 래핑하는 포스트 프로세서는 일반적으로 postProcessAfterInitialization(java.lang.Object, java.lang.String)을 구현한다.등록ApplicationContext는 빈 정의에서 BeanPostProcessor 빈을 자동 감지하고 이후에 생성되는 모든 빈에 해당 포스트프로세서를 적용할 수 있다.일반 BeanFactory를 사용하면 Bea..

최근 프로젝트를 진행하며 SQS를 사용하여 이벤트를 다룰 기회가 있어 해당 구현을 글로 남겨 보려 합니다.SQS 설정스프링에서 SQS를 사용을 지원하는 의존성은 spring-cloud-aws-messaging와 spring-cloud-aws-starter-sqs 두 가지가 존재합니다.레퍼런스의 경우 spring-cloud-aws-messaging 조금 더 많이 존재하였지만 저는 aws-starter-sqs를 선택하였습니다.그 이유는 mvn 저장소에서 해당 의존성의 개발 상황을 확인해 본 결과 spring-cloud-aws-messaging는 2021년 이후 더 이상 업데이트가 없는 반면, aws-starter-sqs는 지금까지 꾸준히 업데이트되고 있었기 때문입니다. 의존성dependencies { ..

이벤트 자동 발행EventPublishingRepositoryProxyPostProcessorspring-data-commons 라이브러리의 EventPublishingRepositoryProxyPostProcessor는 CrudRepository.save(Object)와 CrudRepository.delet(Object) 메서드를 인터셉트하여 @DomainEvent를 발행하고 @AfterDomainEventPublication 어노테이션이 붙은 메서드를 실행하는 MethodInterceptor를 등록합니다.@DomainEvent와 @AfterDomainEventPublication를 직접 선언하거나 AbstractAggregateRoot를 상속하는 방식으로 이벤트를 다루는 객체는 자유롭게 만들 수 있지..