댓글 달기가 성공한 후 eventPublisher.publishEvent() 호출
리스너가 @EventLinstner라면 즉시 실행되겠지만, @TranszaztionalEventListner라면 해당 작업을 커밋 후 리스트에 등록을 하도록 요청함.
이 리스트에 등록하는 건 TransactionSynchronizationManager에 저장됨.
1. CommentService의 메서드가 종료
2. TransactionManager가 실제 DB에 커밋 명령을 내림.
3. 커밋 성공 후 TransactionManager는 아까 스레드 보관함에 등록된 작업 리스트를 훑음
4. 거기에 담겨 있던 NotificationEvet처리 로직을 꺼내서 리스너에게 전달함
TransactionSynchronizationManager 안에는
도착지 정보 + 이벤트, 성공 여부 정보(정상 커밋 되었는지, 실패했는지) 가 저장되어있음. 성공하면 afterCommit()콜백 실행, 또는 afterCompletion() 콜백 실행