Failed to create event: Failed to open TCP connection to kinesis.eu-central-1.amazonaws.com:443 (exe
Fix Plan: Kinesis TCP connect timeout — rescue 필터 확장
Changes#
tesla: lib/cupix/event_service.rb#
- What:
publish_event하단의rescue RestClient::Exception => e절 앞에rescue Aws::Errors::ServiceError, Seahorse::Client::NetworkingError => e절을 추가하여 AWS Ruby SDK가 던지는 네트워크/서비스 예외까지Cupix::Errors::System(code: 'SYS20000', ...)로 일관되게 변환한다. 기존RestClient::Exceptionrescue 절은 그대로 유지 (호환성). - Why: RCA H1 (Confirmed) — 현재
rescue RestClient::Exception만으로는aws-sdk-kinesis의 Seahorse 스택이 던지는Seahorse::Client::NetworkingError(Net::OpenTimeout 래핑) /Aws::Kinesis::Errors::ServiceError가 잡히지 않아 원시 네트워크 예외가 상위Eventable::Events::Base.create_event로 그대로 전파된다. 팀 표준 에러 매핑을 적용해 로깅/모니터링/알림 일관성을 회복한다. 기존 코드베이스에도Aws::Errors::ServiceError패턴은 이미 사용됨 (app/factories/base_factory.rb:134,lib/cupix/migrate/{mask,coverable}.rb). - Lines: 50-54 부근 (기존
rescue RestClient::Exception위에 새 rescue 절 추가)
tesla: spec/lib/cupix/event_service_spec.rb (신규)#
- What:
publish_event가 (a)Seahorse::Client::NetworkingError, (b)Aws::Kinesis::Errors::ServiceError를 각각Cupix::Errors::System(code: SYS20000) 으로 변환하고, 기존RestClient::Exception매핑도 그대로 유지되는지 검증하는 스펙 추가. - Why: 신규 rescue 절에 대한 회귀 방지.
spec/lib/cupix/event_service_spec.rb가 현재 존재하지 않으므로 최소 골격을 함께 작성한다. - Lines: 신규 파일 (약 60~80 라인)
Acceptance Criteria#
-
lib/cupix/event_service.rb에rescue Aws::Errors::ServiceError, Seahorse::Client::NetworkingError절이 존재하며Cupix::Errors::System(code: 'SYS20000', ...)로 변환한다. - 기존
rescue RestClient::Exception경로가 그대로 유지된다 (backward compatible). -
ruby -c lib/cupix/event_service.rb통과. - 신규 스펙 파일이 세 개의 예외 타입(Seahorse networking, Aws service error, RestClient) 각각에 대해
Cupix::Errors::System재발생을 검증한다.
Tests#
- 기존 테스트:
spec/lib/cupix/aws/kinesis_spec.rb(변경 없음, 통과 유지) - 신규 테스트:
spec/lib/cupix/event_service_spec.rb— Seahorse::Client::NetworkingError / Aws::Kinesis::Errors::ServiceError / RestClient::Exception 각각 →Cupix::Errors::System(code: 'SYS20000')변환 검증
Out of Scope (별도 트랙)#
app/models/concerns/eventable/events/base.rb:19-21의raise e제거: RCA가 "이벤트 소비자 요구사항 확인이 필요하므로 팀 조율 대상"으로 명시. 트랜잭션 경계 재설계는 outbox 패턴 또는after_commit + 재시도 큐로 이관이 필요하며 도메인 계약 검토가 선행되어야 하므로 별도 티켓으로 분리.lib/cupix/aws/kinesis.rb의 SDK timeout/retry 옵션 지정: 단기 개선 항목이며 이번 PR 범위에서 제외.