ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION184 / 1500
웹난이도 중하핵심 답변

로그아웃 후 뒤로 가기로 개인 화면이 복원될 때 어느 경계에서 데이터를 재검증해야 하나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

첫 운영 경계는 복원된 문서의 pageshow이고, 보안의 최종 경계는 개인 API의 서버 인가입니다. bfcache는 과거 DOM을 복원할 수 있으므로 로그아웃 직후 뒤로 가기에서 화면이 잠시 그려질 수 있습니다. pageshow에서 현재 세션, account namespace, 화면 세대를 확인해 인증이 없거나 계정이 바뀌었으면 즉시 보호 화면으로 전환합니다. 동시에 query cache·WebSocket 구독·draft를 이전 계정에서 폐기하거나 격리합니다.

다만 pageshow는 confidentiality barrier가 아닙니다. 복원 DOM이 검사보다 먼저 그려질 수 있고 이미 내려받은 응답을 클라이언트가 자동으로 삭제하지도 않습니다. 따라서 개인 데이터를 반환하거나 변경하는 API는 매 요청마다 세션뿐 아니라 문서·주문 같은 자원의 소유권과 현재 version을 검사해야 합니다. 예를 들어 계정 A의 세대 7 fetch가 늦게 도착한 뒤 B로 로그인해 세대 8이 됐다면, 응답이 200이어도 account와 세대가 맞지 않으므로 버립니다. 버튼을 눌렀을 때 서버가 401/403을 반환하면 이전 화면 데이터를 조용히 재사용하지 않습니다.

서비스 워커나 CacheStorage도 별도 경계입니다. 캐시 키에 계정 namespace를 넣고 로그아웃 때 해당 namespace를 삭제하거나, 애초에 민감 응답을 저장하지 않는 정책을 선택합니다. 화면 숨김은 UX 대응이고 인가는 서버 책임이라는 결론을 유지해야 합니다. 복원 직후 세션 확인 요청이 120ms 늦게 도착하는 동안에는 개인 필드를 먼저 마스킹하고, 권한 확인 전에는 주문 상세 버튼을 비활성화하는 보수적 상태를 둘 수 있습니다. 이것은 이미 복원된 DOM을 소급 삭제하는 보장이 아니라 노출 시간을 줄이는 운영 선택입니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • pageshow를 운영상 재검증 지점으로 두되 보안 차단벽으로 과장하지 않습니다.
  • 계정 A 세대 7 응답과 B 세대 8 화면의 불일치를 폐기합니다.
  • API 자원 소유권, query cache, socket, CacheStorage를 각각 설명합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • display:none이나 redirect만 하면 이미 복원된 개인 데이터 문제가 모두 해결된다고 말합니다.
  • 로그인 여부만 검사하고 문서·주문 소유권을 서버가 확인하지 않아도 된다고 합니다.
  • 로그아웃이 bfcache와 브라우저 메모리의 응답을 자동 삭제한다고 가정합니다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 세션 회수와 검증 캐시가 잠시 지연될 때 복원 화면에 허용할 상태는 무엇일까요?
  • 계정 전환 중 WebSocket snapshot과 늦은 fetch가 동시에 도착하면 어느 순서로 폐기할까요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

← 전체 질문 보기