Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

이벤트에 대한 고찰 #665

Open
veluxer62 opened this issue Mar 30, 2023 · 5 comments
Open

이벤트에 대한 고찰 #665

veluxer62 opened this issue Mar 30, 2023 · 5 comments

Comments

@veluxer62
Copy link
Owner

Motivation

1

Suggestion

1

@veluxer62
Copy link
Owner Author

제품 개발하면서 이벤트를 다루는 것에 대한 고찰을 하게됨.
그렇다고 이벤트 드리븐하게 개발하는것은 아님.
비동기적으로 이벤트를 다루는 것은 개인적으로 복잡함이 높기에 선호하진 않는편.
대신 주요로직은 동기적인 코드로 다루고 부가적인 로직 (로깅, 채팅 메시지 발송, 슬렉 메시지 발송 등)은 이벤트로 처리하고자 함.

@veluxer62
Copy link
Owner Author

이벤트명은 행위에 대한 결과를 표현하므로 OrderCreated와 같이 현재완료형태로 표현하는게 좋아보임.
그리고 이벤트의 내용은 Entity 와 같이 변수를 포함하고 있는 참조 값보다 원시값 또는 불변값을 넣어주는게 시점 문제와 같은 디버깅이 어려운 문제가 발생하지 않으므로 좋다.

@veluxer62
Copy link
Owner Author

보조로직은 주요로직에 영향을 미치지 않아야 한다. 그래서 Transaction에 포함시키지 않아야 하는데 포함시키지 않는 방법은 2가지가 있다.
바로 @Async@TransactionalEventListener가 있다.

@Async는 비동기로 처리하므로 Tread가 끊어져서 그런것이고 @TransactionalEventListener는 이벤트를 발행한 로직에서 Transaction이 끝나고 실행되도록 설계되어있기 때문에 그런것

@veluxer62
Copy link
Owner Author

@TransactionalEventListener는 예외가 발생하면 에러를 씹어버린다. ApplicationEventMulticaster를 통해 예외를 발생시키는 방법이 있지만 별론거 같다.
그리고 @TransactionalEventListener는 Commit된 이후에 이벤트를 발행하기 때문에 숨은 로직은 양상해 내기 쉽다. 그래서 되도록 지양하자.

@veluxer62
Copy link
Owner Author

리스너는 고민이 많다.
지금 내가 생각하고 있는것은 리스너가 무엇을 의존하고 있느냐에 따라 이름을 정하고 handle이라는 이름으로 이벤트명마다 동일한 함수를 오버로딩해서 사용하는 방법이 좋아 보인다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant