inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

4-13. 실제 예시 코드로 작성하기 - 2

@Async 여부의 차이가 궁금합니다.

해결된 질문

173

kongminoo

작성한 질문수 29

0

@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를 붙히지 않았더라도 메인 로직에서 끝마치고 해당 이벤트를 실행하니깐 똑같은 결과가 나오지 않나요?

차이가 궁금합니다!

java spring mysql redis 이력서

답변 2

0

딩코딩코

안녕하세요 kongminoo님, 좋은 질문 감사합니다!

맞습니다! 민우님이 스스로 찾으신 답변이 정확합니다!!

  1. @Async 없이 @TransactionalEventListener만 사용

  • 클라이언트 → (쓰레드 A) 메인로직 수행 → (쓰레드 A) 이벤트 처리 → (쓰레드 A 반환) 클라이언트에게 응답

  • 문제점: 카카오톡 API 호출이 2초 걸린다면, 사용자는 이벤트 참가 후 2초를 더 기다려야 함

  • 실제 응답 시간: 메인 로직 + 알림 발송 시간

  1. @Async와 @TransactionalEventListener 함께 사용

  • 클라이언트 → (쓰레드 A) 메인로직 수행 → (쓰레드 A 반환) 클라이언트에게 즉시 응답 → (쓰레드 B) 이벤트 처리

  • 장점: 사용자는 이벤트 참가 완료 후 즉시 응답을 받음

  • 실제 응답 시간: 메인 로직 시간만

실무에서는 이런 부분도 고려해야 해보시는 걸 추천드립니다!

  • 비동기 처리 실패 시 재시도 로직

  • 스레드 풀 설정 (기본 SimpleAsyncTaskExecutor는 위험)

  • 알림 발송 실패에 대한 모니터링

이런 경험을 쌓아서 이력서에 써보시는 걸 추천드리빈다!! 항상 좋은 질문 감사드립니다!

좋은 주말 보내세요~~~

0

kongminoo

찾아보니


@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