Q1. Message는 단순한 데이터 객체인가, 도메인 객체인가?
A. 도메인 객체다.
- EmailMessage, SmsMessage 등 메시지 형태가 채널별로 다름
- 유효성 검사, 생성 로직 등 도메인 로직 포함 가능
- 단순 DTO가 아닌 의미를 가진 객체
Q2. 유효성 검사는 어디서 해야 할까?
A. 생성자 내부.
- 생성 시점부터 유효한 상태 보장
- 테스트와 유지보수 쉬움
- 팩토리나 외부에서 검사하면 중복과 if 블록 증가 위험
Q3. 재시도는 어떤 기준으로 판단할까?
A. 실패 사유(errorCode)가 가장 중요하다.
- 모두 재시도는 메모리 폭발 위험
- 중요도만으로 판단하는 건 오류
- “중요도 × 수단” 으로 재시도 횟수 정함
Q4. 재시도 판단은 어디서 해야 할까?
A. RetryPolicy에서 판단한다.
- SendResult는 정보만 담고
- 재시도 여부는 정책 객체가 해석
- 책임 분리 원칙 적용
Q5. SendResult에는 어떤 필드가 들어가야 할까?
A. 결과, 메시지, 에러코드 등 의미 있는 정보들
- result: 성공 여부
- resultMessage: 설명 메시지
- originalMessage: 원본 메시지 참조
- errorCode / errorMessage: 실패 원인
Q6. 알림 전송 실패는 관리자에게 알려야 할까?
A. 반복 실패시만 알림.
- 호출자는 이미 결과를 알고 있음
- 특정 횟수 이상 실패는 시스템 이상 신호일 수 있음
- 중요도가 아니라 관제의 의미로 관리자 알림 필요