스프링 mvc 기준임
원래는 A, B 로직의 원자성이 필요하지 않는 경우
예로들면 댓글 작성(발행)과 댓글 알림(구독)의 경우
주관심사인 댓글 작성이 완료되면 상대에게 알림이 가는 것과는 상관없이
클라에게 응답하는 게 맞으니까 알림을 비동기로 처리하도록 짰는데
여기저기 자료를 보니까
보통 무거운 처리로 인해 전체 서비스 응답이 늦어질때를 예로 들더라고...
알림처리는 큰 리소스를 요하지 않으니 트랜잭션만 새로 파서 쓰도록 하는게 맞나 싶기도하고 그러네
원래는 A, B 로직의 원자성이 필요하지 않는 경우
예로들면 댓글 작성(발행)과 댓글 알림(구독)의 경우
주관심사인 댓글 작성이 완료되면 상대에게 알림이 가는 것과는 상관없이
클라에게 응답하는 게 맞으니까 알림을 비동기로 처리하도록 짰는데
여기저기 자료를 보니까
보통 무거운 처리로 인해 전체 서비스 응답이 늦어질때를 예로 들더라고...
알림처리는 큰 리소스를 요하지 않으니 트랜잭션만 새로 파서 쓰도록 하는게 맞나 싶기도하고 그러네
싱글 스레드일때 io bound한 작업을 처리하면 cpu가 거의 io 대기시간으로 낭비될건데 비동기 처리를 하면 그 시간을 다른 작업에 사용할 수 있음 멀티 스레드의 경우에는 컨텍스트 스위칭이 되니까 훨씬 낫긴 하지만 그래도 컨텍스트 스위칭이 무거운 작업이라 부담되는데 비동기로 처리하면 컨텍스트 스위칭 비용을 낮출 수 있겠지
맞음ㅎㅎ 근데 애플리케이션 전반이 논블라킹 구조인 경우 말구 스프링 MVC에서 특정 서비스 메서드만 비동기처리하는거 말한거였슴
api 여러번 요청할때?
관심사 여부보단 비용이 중요하구나..
파일 업로드, 대규모 알림 발송 등등..
1:1 알림 같은 경우는 어때?
처리시간이 그리 길진 않지만 실패여부가 주관심사 작업에 영향을 주지 않는 경우