You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(afternote): 등록 실패 시 서버 5xx 원문(내부 SQL 포함)을 스낵바에 그대로 노출 — 일반 문구 치환 #511
애프터노트 등록이 서버 오류(5xx)로 실패하면 클라이언트가 서버 응답 message 를 그대로 스낵바에 표시한다. 실서버(Mock OFF) 런타임 실측에서 POST /afternotes 가 500 을 반환할 때, 스낵바에 서버 내부 오류: could not execute statement [Field 'created_at' doesn't have a default value] [insert into afternote (category_type,leave_message,sort_order,title,user_id) values (?,?,?,?,?)] 처럼 내부 SQL·컬럼명이 포함된 원문이 사용자에게 그대로 노출된다. AfternoteEditorViewModel.handleSaveFailure 가 검증 예외가 아닌 경우 error = e.message(서버 원문)를 싣고, generic 폴백(afternote_editor_save_failed_generic)은 message == null 일 때만 동작하기 때문이다. 5xx(또는 비검증 서버 오류)는 서버 원문 대신 일반 사용자 문구로 치환한다.
📍 Note (Optional)
출처: 노션 1차 QA(2026-07-19) 검증 중 런타임 실측(Mock OFF, 실서버). QA2(등록 실패 무반응)는 오탐 — 스낵바는 실제로 뜬다. 다만 뜨는 내용이 서버 원문(내부 SQL 포함)인 별개 결함을 발견.
근거(로그 실측): --> POST https://afternote.kro.kr/api/v1/afternotes → <-- 500 message 에 insert into afternote (...) 포함. AfternoteRepository 가 ApiException 으로 전파 → handleSaveFailure 가 error = e.message 로 UI 노출.
서버가 내부 SQL 을 응답에 싣는 것(QA S1, BE 별건)과 별개로, 클라가 5xx 원문을 사용자에게 노출하지 않는 방어는 FE 책임.
Activity
refactor: ApiException 내 HTTP status 필드 추가 및 에러 리포팅 정책 강화
refactor: 수신자 예외 모델에 HTTP 상태 코드 추가 및 리포팅 판정 로직 개선
refactor: 수신자 흐름 에러 메시지 노출 게이트 정교화 (4xx 거절만 노출)
refactor: 상세 화면 에러 메시지 노출 정책 변경 및 삭제 오버레이 접근성 개선
refactor(receiver): DeliveryConditionNotMet 이 서버 문구를 싣지 않게