분류 전체보기

· 스프링
정의마커 인터페이스 확인이나 프록시로 빈을 래핑하는 등 새 빈 인스턴스의 사용자 정의 수정을 허용하는 팩토리 훅이다.일반적으로 마커 인터페이스 등을 통해 빈을 채우는 포스트 프로세서는 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를 상속하는 방식으로 이벤트를 다루는 객체는 자유롭게 만들 수 있지..
· 개발
이벤트 모듈 설계 다이어그램Eventabstract class Event( val eventId: String, val eventTime: LocalDateTime, )eventId와 eventTime은 필수로 가질 수 있도록 정의하였습니다. @EventDetails@Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME) @DomainEvent annotation class EventDetails( val outBox: Boolean = false, )Event 클래스가 비즈니스 로직을 처리하는 과정에서 필요하지 않은 정보를 위한 어노테이션입니다.outBox: 해당 이벤트가 외부까지 전달되어야 하는..
· 스프링
스프링에서 특정 메서드를 비동기적으로 수행하기 위해서 @Async를 사용한다. @Async 메서드가 포함된 빈 등록@Async가 메서드에 선언된 빈은 프록시 객체로 등록된다. @EnableAsync로 AsyncConfigurationSelector가 임포트 된다.@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(AsyncConfigurationSelector.class) public @interface EnableAsync { // ...} 별도의 설정을 하지 않으면 AdviceMode의 기본 값은 PROXY로 AsyncConfigurationSelector에서 ProxyAsyncConfigura..
· 스프링
이벤트 리스너 등록@EventListener@EventListener public void onApplicationEvent(MyEvent event) { // doSomething}위와 같이 @EventListener로 등록된 이벤트 리스너는 EventListenerMethodProcessor에 의해 컨텍스트에 ApplicationEventListener로 등록된다. public class EventListenerMethodProcessor implements SmartInitializingSingleton, ApplicationContextAware, BeanFactoryPostProcessor { // ... @Override public voi..