폼 오류를 고쳤는데 사용자가 못 찾는다면: 포커스 이동
폼에서 오류가 발생했는데 화면 아래에만 메시지가 뜨면 키보드 사용자나 화면낭독기 사용자는 어디를 고쳐야 할지 찾기 어렵습니다. 오류를 표시했다는 사실만으로 충분하지 않습니다. 오류 요약과 필드 안내, 포커스 이동이 하나의 흐름으로 이어져야 합니다.
NOTES
모델을 만들고, 웹과 앱을 짓고, 업무를 자동화하며 확인한 것을 기록합니다. 통한 방법만이 아니라 통하지 않았던 시도까지 남깁니다.
TOTAL 288
폼에서 오류가 발생했는데 화면 아래에만 메시지가 뜨면 키보드 사용자나 화면낭독기 사용자는 어디를 고쳐야 할지 찾기 어렵습니다. 오류를 표시했다는 사실만으로 충분하지 않습니다. 오류 요약과 필드 안내, 포커스 이동이 하나의 흐름으로 이어져야 합니다.
메인 화면의 큰 이미지가 늦게 보이면 나머지 요소가 빨라도 페이지가 느리게 느껴집니다. LCP 개선은 이미지 파일 크기만 줄이는 작업이 아닙니다. 브라우저가 그 이미지를 언제 발견하고 어떤 우선순위로 가져오는지 확인해야 합니다.
웹사이트를 새로 만들면서 URL 구조가 바뀌면 예전 검색 결과와 공유 링크가 끊길 수 있습니다. 모든 옛 주소를 첫 화면으로 보내는 방식은 사용자가 찾던 정보를 복구하지 못합니다. 개편 전에 옛 URL과 새 목적지를 대응시키는 지도가 필요합니다.
웹훅 본문의 서명이 유효해도 예전에 보냈던 요청을 누군가 다시 전달할 수 있습니다. 서명은 누가 보냈는지를 검증하지만 요청이 지금 처음 도착했다는 사실까지 보장하지는 않습니다. 시간 제한과 이벤트 중복 기록을 함께 사용해야 합니다.
비밀번호 재설정 링크는 계정에 다시 들어갈 수 있는 강력한 수단입니다. 유효시간만 짧게 해도 한 번 사용한 링크가 다시 열리거나 오래된 링크가 남아 있으면 위험합니다. 발급부터 사용, 폐기까지 하나의 수명주기로 다뤄야 합니다.
업무 데이터를 CSV로 내려받아 스프레드시트에서 열었더니 셀 값이 수식으로 해석될 수 있습니다. 데이터베이스에 저장된 문자열이 파일에서는 실행 가능한 내용처럼 취급되는 문제입니다. CSV 내보내기는 구분자 처리뿐 아니라 열리는 프로그램의 동작까지 고려해야 합니다.
감사 로그를 오래 보관하면 사고를 조사할 수 있는 기간은 늘지만 기록량도 커집니다. 사건이 났을 때 필요한 사용자의 행동을 찾지 못한다면 보관만으로는 충분하지 않습니다. 수집 단계에서 검색 가능한 맥락과 보관 정책을 함께 설계해야 합니다.
사용자가 결제 버튼을 다시 눌렀을 때 네트워크는 두 요청을 보낼 수 있습니다. 화면에서 버튼을 비활성화해도 모바일 재전송이나 프록시 재시도가 남습니다. 멱등 키는 같은 의도를 같은 결과로 처리하게 하지만 수명과 범위를 잘못 정하면 다른 요청까지 묶을 수 있습니다.
여러 고객사가 같은 데이터베이스를 사용하는 SaaS에서는 모든 조회가 고객 경계를 지켜야 합니다. 애플리케이션 코드에 조건을 붙이는 것만으로는 누락 위험이 남습니다. PostgreSQL의 행 수준 보안은 DB 차원의 추가 경계가 될 수 있지만 올바른 세션 맥락과 테스트