@Async 여부의 차이가 궁금합니다.
@Async
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void handleEventJoinCompleted(EventJoinCompletedEvent event) {
try {
kakaoTalkMessageApi.sendEventJoinMessage(
event.getPhoneNumber(),
event.getEventName()
);
} catch (Exception e) {
log.error("알림 발송 실패. eventId={}, eventName={}",
event.getEventId(),
event.getEventName(),
e);
}
}이 로직은 비동기적으로 이벤트를 처리하는 알림서비스 로직입니다.
@TransactionalEventListner(Aftercommit)를 사용하면 메인 로직이 commit 된 이후에 해당 이벤트가 실행하는 걸로 알고있는데
@Asnyc를 붙히지 않았더라도 메인 로직에서 끝마치고 해당 이벤트를 실행하니깐 똑같은 결과가 나오지 않나요?
차이가 궁금합니다!
답변 2
0
안녕하세요 kongminoo님, 좋은 질문 감사합니다!
맞습니다! 민우님이 스스로 찾으신 답변이 정확합니다!!
@Async 없이 @TransactionalEventListener만 사용
클라이언트 → (쓰레드 A) 메인로직 수행 → (쓰레드 A) 이벤트 처리 → (쓰레드 A 반환) 클라이언트에게 응답
문제점: 카카오톡 API 호출이 2초 걸린다면, 사용자는 이벤트 참가 후 2초를 더 기다려야 함
실제 응답 시간: 메인 로직 + 알림 발송 시간
@Async와 @TransactionalEventListener 함께 사용
클라이언트 → (쓰레드 A) 메인로직 수행 → (쓰레드 A 반환) 클라이언트에게 즉시 응답 → (쓰레드 B) 이벤트 처리
장점: 사용자는 이벤트 참가 완료 후 즉시 응답을 받음
실제 응답 시간: 메인 로직 시간만
실무에서는 이런 부분도 고려해야 해보시는 걸 추천드립니다!
비동기 처리 실패 시 재시도 로직
스레드 풀 설정 (기본 SimpleAsyncTaskExecutor는 위험)
알림 발송 실패에 대한 모니터링
이런 경험을 쌓아서 이력서에 써보시는 걸 추천드리빈다!! 항상 좋은 질문 감사드립니다!
좋은 주말 보내세요~~~
0
찾아보니
@Async를 사용하지 않은 경우
클라이언트 -> (쓰레드 A)메인로직 수행-> (쓰레드 A)이벤트 수행 -> (쓰레드 A 반환) 클라이언트에게 응답
@Async를 사용한 경우
클라이언트 -> (쓰레드 A)메인로직 수행-> (쓰레드 A 반환) 클라이언트에게 응답 -> (쓰레드 B)이벤트 수행 후 쓰레드 반환
맞나용?
조회속도 개선에서 더 개선하는 방법이 궁금합니다.
0
44
2
Build 관련 문제 (테스트 관련 문제)
0
44
2
인덱스 관련 질문 있습니다.
0
75
2
비관적 락 구현 방식 문의 건
0
82
2
외부 api 처리 방안에 대하여 궁금한 점이 있습니다.
0
93
2
네임드 락 사용 시 커넥션 풀을 분리하는 방법에 대한 질문
0
88
2
이벤트) 백엔드 기술면접 실전문제집
0
107
2
로컬에서 테스트 한 결과를 이력서에 써도 괜찮을까요?
0
134
2
데드락 발생 시, 외래 키를 제거하는 방법 관련 질문
0
91
2
Redis 캐싱을 도입하는데 db조회와 성능이 차이가 거의 없습니다.
0
115
2
k6 부하테스트 중인데 개선 전 성능이 너무 안나와서 고민
0
142
2
강의와 성능수치 비교
0
105
2
13강 강의 뒷부분의 과제 안내부분은 어디있나요?
0
52
2
이벤트 참가자 수 증가 후, save 메서드 호출 코드 질문
0
66
2
[수업 자료 질문] Cache Aside의 특징 문의
0
89
2
[수업자료 문의] RedisTemplate으로 SETNX 시 리턴값 문의
0
83
2
블로그에 학습 내용 정리 포스트를 올려도괜찮나요?
0
113
2
멀티스레드 상황인데 currentParticipants 가 AtomicInteger가 아닌 이유?
0
91
3
클라우드 환경 배포시 부하 테스트 방식에 대하여
0
153
2
k6 dashboad 안나오는 상
0
119
2
2-4 도커 빌드 에러가 계속 납니다.
0
302
2
AWS EC2에 도커 컨테이너가 동작하지 않을 때 확인 해야하는 것
0
118
2
성능 측정시
0
114
2
API 별 실행 쿼리 모니터링 구현 질문 있습니다.
0
87
2





