일회용 링크 탭을 닫은 뒤에도, # 뒤의 키가 「최근에 닫은 탭」에서 되살아나는 이유
탭을 닫았다고 해서, 주소창 # 뒤의 키가 이 컴퓨터에서 사라진 것은 아닙니다. 브라우저는 「방금 닫은 페이지를 다시 열기」를 위해 그때의 전체 URL을 세션 기록에 남깁니다. Windows·Linux에서는 Ctrl+Shift+T, macOS에서는 ⌘+Shift+T로 복원하는 것이 바로 그 한 줄이며, 프래그먼트도 들어 있습니다. 아래에서는 「서버는 키를 보지 못한다」와 「이 기기는 키를 다시 꺼낼 수 있다」를 가른 뒤, 그 자리에서 대조하는 단계를 적습니다. 일회용 링크 만들기 페이지의 조작 안내가 아닙니다.
먼저 탭을 닫으면 어디에 쓰이는지를 가릅니다
이 글은 「일회용 링크 탭을 닫은 뒤, # 뒤의 키가 최근에 닫은 탭에서 되살아나는 이유」만 답합니다. 「#가 서버 로그에 안 남는 이유」도 아니고, 일회용 링크 폼 설명도 아닙니다.
탭을 닫으면 어디에 쓰이는가
「페이지를 닫으면 주소가 세상에서 사라진다」가 아닙니다. 브라우저는 당신이 어디에 멈춰 있었는지를 먼저 기억해야, 다음 순간에 그 자리를 다시 열 수 있습니다.
https://…/s.html?id=…#…를 연 주소창에는 두 구간이 함께 있습니다. 물음표 뒤의 암호문 번호, 그리고 # 뒤의 복호화 키입니다. 이 탭을 닫을 때 많은 사람은 「키가 이 컴퓨터에서 이미 없어졌다」로 읽습니다. 브라우저가 하는 일은 반대입니다. 뒤로 가기, 앞으로 가기, 충돌 복원, 「최근에 닫은 탭」을 지원하려면 그 탐색의 전체 URL을 남겨야 합니다. Chromium은 탭마다 이 기록을 세션 히스토리(session history)라고 부릅니다. 한 탐색 항목에는 당시 URL, 스크롤 위치, 아직 제출하지 않은 폼 등이 들어갑니다. 탭을 닫거나 브라우저를 다시 켠 뒤, 이 항목을 직렬화해 탭을 그대로 복원합니다. 설명은 Chromium 문서 《Session History》에 있습니다.
Firefox는 같은 능력을 Session Restore라고 부릅니다. 창, 탭, 최근에 닫은 탭을 추적하고, 각 탭의 방문 기록·스크롤·폼을 디스크에 쓴 뒤 시작 시나 「닫은 탭 실행 취소」에서 다시 읽습니다. 설명은 Firefox Source Docs 《Session Restore》에 있습니다. Microsoft Edge와 국내에서 많이 쓰는 웨일(Naver Whale)은 Chromium을 기반으로 하므로, 닫은 탭을 복원할 때 「제목만 기억하고 프래그먼트는 버린다」는 별도 규칙을 쓰지 않습니다. 복원 대상은 닫기 직전의 전체 주소입니다.
이것은 HTTP 요청과 같은 층이 아닙니다. IETF RFC 3986 §3.5는 프래그먼트를 클라이언트의 식별자로 두고, 서버의 URI 처리에는 넣지 않습니다. 그래서 UsePwd 접속 로그에는 # 뒤의 키가 없습니다. 그 층은 이미 URL의 # 이후가 서버 로그에 안 남는 이유에서 썼습니다. 이 글이 보태는 것은 다른 층입니다. 프래그먼트가 요청에 안 들어간다고 해서, 당신 브라우저 기록에도 안 들어가는 것은 아닙니다. 탭을 닫는 일은 이번 그리기만 끝낼 뿐, 세션 기록의 그 전체 URL을 자동으로 지우지 않습니다.
「서버는 키를 보지 못한다」와 「이 컴퓨터는 키를 다시 꺼낼 수 있다」는 동시에 성립합니다. 전자는 네트워크 패널의 요청 줄을 보고, 후자는 「최근에 닫은 탭」을 복원한 뒤의 주소창을 봅니다.
최근에 닫은 탭이 #를 가져오는 이유
복원은 검색 엔진에서 이 사이트를 다시 찾는 일이 아닙니다. 닫기 직전의 그 URL로 한 번 더 이동하는 일입니다.
Chrome이나 Edge에서 Ctrl+Shift+T를 누르거나, 메뉴의 「방문 기록 → 최근에 닫은 탭」을 열면, 브라우저는 방금 그 세션 항목을 꺼내 저장된 URL로 엽니다. Firefox의 「최근에 닫은 탭」도 Session Store에서 한 항목을 고르고, 당시 활성 방문의 URL을 다시 열 대상으로 씁니다. 프래그먼트는 URL의 일부이지, 페이지 제목 옆의 장식이 아닙니다. 복원 경로에 「# 이후만 따로 벗겨 내는」 단계는 없습니다.
장기 방문 기록과 세션 기록도 같은 파일이 아닙니다. Chromium이 방문 기록 데이터베이스에 쓸 때는 주소의 사용자 이름과 비밀번호를 빼지만, 그 변환은 프래그먼트를 지우지 않습니다. 변환 함수는 Chromium GurlToDatabaseUrl에 있습니다. 그래서 chrome://history에 #가 붙은 일회용 링크가 보여도, 「요청에는 프래그먼트가 없다」와 모순되지 않습니다. 방문 기록 저장소가 기억하는 것은 당신이 본 전체 문자열이고, 요청 줄은 여전히 s.html?id={번호}뿐입니다. Chrome 도움말 《Chrome 방문 기록 확인 또는 삭제하기》도 방문 기록이 페이지 URL을 남긴다고 적습니다. 남기는 대상이 「제목만」이라고 쓰지는 않습니다.
탭을 오른쪽 클릭해 「탭 복제」를 하는 일은 또 다른 지름길입니다. Chromium은 탭을 복제하거나 새 탭에서 뒤로·앞으로·새로고침을 할 때, 파일을 썼다가 다시 읽는 대신 탐색 항목을 그대로 복제한다고 적습니다. 복제된 새 탭의 주소창에는 닫기 전의 그 문자열, 곧 #와 키가 남는 경우가 많습니다. 공용 PC에서는 「방문 기록을 뒤질 줄 아는 사람」보다 빠릅니다. 옆에 앉은 사람은 기록을 몰라도, 탭만 복제하면 같은 링크를 받습니다.
서버로 가는 것은 s.html?id=번호입니다. 네트워크 패널과 접속 로그에는 키가 없습니다.
최근에 닫은 탭, 충돌 복원, 탭 복제가 쓰는 것은 닫기 직전의 그 URL입니다.
저장소는 사용자 이름과 비밀번호를 빼지만, 프래그먼트만 있다고 기록을 거절하지는 않습니다.
시크릿 창은 그 자리에서 대조할 수 있는 예외이지만, 「시크릿이면 키가 이미 파기됐다」로 읽으면 안 됩니다. 같은 시크릿 창이 아직 열려 있으면 Ctrl+Shift+T로 방금 닫은 탭을 되돌리는 경우가 많고, 주소창의 #도 그대로입니다. Chrome 도움말 《시크릿 모드로 탐색하기》는 시크릿 세션이 모든 시크릿 창을 닫아야 끝난다고 적습니다. 마지막 시크릿 창까지 닫힌 뒤에야, 이번 세션의 「최근에 닫은 탭」이 함께 사라집니다. 대조할 것은 「창이 아직 있는가」이지, 「아이콘이 시크릿인가」가 아닙니다.
북마크와 동기화가 데려가는 곳
「최근에 닫은 탭」은 이 기기의 첫 지름길일 뿐입니다. 같은 계정의 북마크와 열린 탭은 그 주소를 다른 기기로 데려갈 수 있습니다.
읽기 페이지를 북마크에 넣으면, 브라우저가 저장하는 것은 그때 주소창에 있던 문자열입니다. 별 아이콘은 먼저 「# 뒤가 키인가」를 묻고 경로만 남기지 않습니다. 이후 북마크 동기화를 켠 어떤 기기에서 그 항목을 열면, 주소창에 전체 링크가 다시 나타납니다. Apple은 Safari용 iCloud를 켜면 책갈피와 열린 탭이 iCloud에 저장되고 iPhone, iPad, Mac 사이에서 갱신된다고 적습니다. Windows용 iCloud를 설치한 PC에도 책갈피가 동기화됩니다. 설명은 Apple 《iCloud와 Safari로 할 수 있는 일》에 있습니다.
Chrome은 「방문 기록 및 탭」을 켜고 끌 수 있는 동기화 항목으로 둡니다. 켜면 열린 탭을 「방문 기록 → 다른 기기의 탭」에서 볼 수 있습니다. 도움말은 Chrome 《모든 기기에서 북마크, 비밀번호 등을 가져오기》입니다. 기업용 문서는 「열린 탭」에 그 탭의 URL, 순서, 고정 여부, 창 위치가 들어간다고 적습니다. Chrome의 「기기로 보내기」(Send Tab to Self)는 동기화 기록에 전체 GURL의 spec()을 쓰므로, 평범한 # 프래그먼트도 함께 직렬화되며 먼저 벗겨지지 않습니다. 구현은 Chromium SendTabToSelfEntry에 있습니다.
공유 메뉴와 북마크를 같은 일로 보면 안 됩니다. iPad Safari에서 시스템 공유로 프래그먼트가 있는 주소를 메일로 보내면, 나가는 문자열이 # 앞에서 잘리는 경우가 있습니다. 주소창을 전체 선택해 복사하면 프래그먼트가 남는 경우가 많습니다. 이 차이는 「공유를 눌렀다」로 키의 유무를 판단하지 말라는 뜻입니다. 수신함이나 다른 기기 주소창에 실제로 나타난 문자로 판단하세요. 채팅 미리보기가 제목 층에서 멈추는 일은 다른 글입니다. 전체 링크가 북마크나 동기화에 들어가면, 이미 미리보기 봇의 경로가 아닙니다.
동기화를 켰다고 해서 Google이나 Apple이 암호문을 풀 수 있는 것은 아닙니다. 동기화하는 것은 URL 문자열이지, UsePwd 서버의 평문이 아닙니다. 위험은 「같은 계정으로 로그인한 다른 기기도 이 링크를 열 수 있다」에 있지, 「동기화 서비스가 대신 열어 보기까지 눌렀다」에 있지 않습니다.
이 페이지에서 지우기와 탭 닫기는 다릅니다
읽기 페이지의 「이 페이지에서 지우기」는 현재 세션 항목을 바꿉니다. 닫기 버튼만 누르면 이 단계를 거치지 않습니다.
UsePwd의 일회용 링크는 키를 s.html?id={id}#{key}의 # 뒤에 둡니다. 만들기와 읽기 모두 가입 없이 바로 사용하며, 양쪽 다 등록하지 않습니다. 현재 탭은 Web Crypto로 AES-256-GCM 암호화 또는 복호화를 하고, 평문 한도는 32 KB입니다. 올리는 필드는 암호문, 만료 시간, 읽기 횟수뿐입니다. 만료는 1시간, 24시간, 7일, 또는 「읽으면만 파기(TTL 없음)」를 고를 수 있고, 읽기 횟수는 1–10회이며 기본값은 1입니다. 서버는 암호문만 잠시 보관하며 평문을 보지 못하고, 사용자별로 잃어버린 링크를 찾아 주는 계정도 없습니다.
수신자가 읽기 페이지를 열면, 페이지는 먼저 암호문이 남아 있는지만 묻습니다. 이 단계는 횟수를 쓰지 않습니다. 「열어 보기」를 누른 뒤에야 브라우저가 암호문을 가져오고, 이 기기에서 # 뒤의 키로 복호화합니다. 복호화가 끝나도 주소창의 프래그먼트는 기본으로 그대로입니다. 탭을 닫거나 페이지를 떠나면 읽기 페이지는 텍스트 상자의 평문을 지우지만, 주소는 자동으로 바꾸지 않습니다. 「이 페이지에서 지우기」를 눌렀을 때만 history.replaceState를 호출해 현재 주소를 「경로 + 쿼리」로 줄이고, #와 그 뒤의 키를 뺍니다. WHATWG는 replaceState를 현재 세션 항목을 교체하는 일로 정의하며, 새 항목을 하나 더 붙이지 않습니다. 지운 뒤에 탭을 닫으면, 「최근에 닫은 탭」이 복원하는 것은 이미 키가 빠진 주소입니다.
서버의 암호문이 삭제됐는지는 만들 때 정한 횟수와 만료에만 달려 있습니다. 이 페이지의 평문을 지웠다고 해서 한 번 더 파기되거나, 한 번 덜 파기되지 않습니다. 횟수가 남아 있으면, 전체 링크를 가진 사람은 다시 「열어 보기」를 누를 수 있습니다. 횟수가 끝난 뒤 전체 링크는 파기됨만 열고, 세션 기록·북마크·채팅에 남은 그 주소는 그대로입니다. 미리보기가 뜨는 채팅에 붙인 뒤 횟수가 이미 쓰였다고 볼 수 없는 이유는 미리보기가 뜨는 채팅에 일회용 링크를 붙인 뒤, 읽기 횟수가 이미 쓰였다고 볼 수 없는 이유에 있습니다. 이 글이 보태는 것은 수신자 본인의 브라우저 기록이지, 채널의 카드가 아닙니다.
평문 상자는 지워져도, 세션 기록에는 #가 남을 수 있습니다. 복원하면 주소창에서 키를 다시 봅니다.
평문과 프래그먼트를 이 항목에서 뺍니다. 다시 복원하면 보통 ?id=만 남습니다.
다시 열면 파기됨만 봅니다. 이 기기와 채팅에 남은 주소 문자열은 자동으로 사라지지 않습니다.
그 자리에서 복원을 대조하는 법
목표는 「모든 브라우저가 언제나 프래그먼트를 동기화한다」를 증명하는 일이 아닙니다. 지금 쓰는 이 브라우저에서, 탭을 닫은 뒤 키가 주소창에 남아 있는지를 보는 일입니다.
-
01
실제 인수인계에 쓰지 않을 테스트 내용을 준비합니다
사용 중인 API 키나 로그인 비밀번호를 넣지 마세요. 일회용 링크를 열고 예를 들어
ClosedTab-20260911을 입력한 뒤, 횟수는 기본 1, 만료는 24시간으로 둡니다. 페이지는 가입 없이 바로 사용합니다. 아래 단계는 세션 기록만 대조하기 위한 것이며, 이 글을 동료에게 정식 키로 넘기지 않습니다. -
02
전체 링크로 읽기 페이지를 열고, 먼저 「열어 보기」는 누르지 않습니다
만든 뒤에는
s.html?id=와#두 구간이 보여야 합니다. 지금 브라우저에서 열면 페이지는 「암호문이 남아 있습니다」에서 멈춥니다. 주소창을 봐#뒤에 키 문자열이 있는지 확인합니다. F12로 네트워크 패널을 열면 상태 조회 요청이 보여야 하고, 그 요청 URL에는#뒤 구간이 없어야 합니다. -
03
이 탭을 닫은 뒤, 최근에 닫은 탭에서 다시 엽니다
탭을 닫습니다. Windows나 Linux에서는 Ctrl+Shift+T, macOS에서는 ⌘+Shift+T를 누릅니다. 메뉴 「방문 기록 → 최근에 닫은 탭」으로 가도 됩니다. 복원 후 주소창을 봅니다. 흔한 결과는
#와 키가 그대로이고, 페이지가 다시 「암호문이 남아 있습니다」에서 멈추는 것입니다. 여기서 키가 이미 없다면, 「이 페이지에서 지우기」를 눌렀는지 닫기만 눌렀는지를 적으세요. 두 동작은 같지 않습니다. -
04
필요할 때만 북마크나 다른 로그인 기기와 대조합니다
같은 테스트 링크를 북마크에 넣거나, 「방문 기록 및 탭」 동기화를 켠 Chrome에서 「다른 기기의 탭」을 봅니다. 다른 기기에 같은 주소가 보이면, 대조할 것은 전체 문자열에
#가 있는가이지 페이지 제목이 아닙니다. Safari에서 iCloud 탭을 켰다면, 같은 Apple 계정으로 로그인한 다른 기기로 같은 대조를 합니다. 측정하는 것은 당신 계정과 브라우저입니다. 결과를 「모든 제조사가 반드시 프래그먼트를 동기화한다」로 쓰지 마세요. -
05
마지막에 「열어 보기」를 누른 뒤, 「이 페이지에서 지우기」를 한 번 더 시험합니다
이제 버튼을 눌러 테스트 원문이 나오는지 확인합니다. 이어서 「이 페이지에서 지우기」를 눌러 주소창에
#가 없는지 확인합니다. 다시 탭을 닫고 복원합니다. 흔한 결과는 복원된 주소에 번호만 있고 키가 없어, 읽기 페이지가 키 없음을 안내하는 것입니다. 이 단계는 「탭만 닫기」와 「지운 뒤 닫기」가 같은 상태가 아님을 대조합니다. 끝나면 이 링크를 버리고, 실제 수신자에게 다시 배정하지 마세요.
다음에 새 키를 다른 사람에게 넘길 때는, 실제 키로 「닫았다가 다시 열기」를 연습하지 마세요. 테스트 내용과 정식 내용은 나눕니다. 정식 인수인계는 여전히 일회용 링크로 갑니다. 환경변수가 유출된 뒤의 두 번째 위험은 클라우드 환경변수가 유출된 뒤, 새 키를 채팅창에 다시 보내면 안 되는 이유에 있습니다. 그 글은 「API 키 자체를 검색되는 기록에 붙이지 마라」를 쓰고, 이 글은 「전체 링크가 브라우저 기록에 들어간 뒤, 탭을 닫는 것만으로는 부족한 이유」를 씁니다.
되살린 뒤에 막지 못하는 것
「최근에 닫은 탭에서 키를 되살릴 수 있다」를 「탭만 닫으면 다른 사람은 못 본다」로 읽으면, 같이 대조할 수 있는 경계를 빠뜨립니다.
단축키로 탭을 복원할 수 있는 사람은, 이 브라우저 프로필을 쓰는 사람입니다. 공용 PC, 잠그지 않은 자리, 로그아웃하지 않고 빌려 준 브라우저는 「최근에 닫은 탭」을 두 번째 링크 회수 경로로 만듭니다. 최근에 닫은 목록과 방문 기록을 지워도, 이미 카카오톡·슬랙·티켓·스크린샷에 복사된 전체 URL은 막지 못합니다. 일회용 링크가 제한하는 것은 서버 암호문의 수명과 횟수이지, 이 기기 기록에 남은 그 주소를 누가 보느냐가 아닙니다.
횟수가 끝난 뒤 방문 기록에서 링크를 다시 열면, 대개 파기됨만 봅니다. 이것을 「기록이 이미 안전하다」로 읽으면 안 됩니다. 관리자, 동료, 또는 당신 자신은 그 주소에서 「번호가 있었고, 누군가 프래그먼트를 키로 썼다」는 사실을 읽을 수 있습니다. 오래 보관하거나 여러 기기에서 쓰려면 전용 비밀번호 관리자를 쓰세요. UsePwd에는 계정과 비밀번호 보관함이 없고, 사용자별로 잃어버린 링크를 찾아 주지도 않습니다. 정체성은 소개를 보세요.
파일은 세 번째 경로입니다. 건당 5 GB를 넘지 않는 로컬 백업은 파일 암호화로 가고, 출력은 .lock / .enc이며 파일은 기본으로 업로드되지 않습니다. 암호 자체는 비밀번호 생성기에서 6–128자로 만든 뒤, 비밀번호 강도 검사로 강도를 봅니다. 이 페이지들도 이 글과 같이 가입 없이 바로 사용합니다. 「프래그먼트가 서버 로그에 안 들어간다」를 「탭을 닫으면 키가 파기된다」로 읽지 마세요. 로그, 세션 기록, 채팅 기록은 같은 층이 아닙니다.
탭을 닫은 뒤에 자주 묻는
아래 네 가지는 이 글의 경계만 답합니다. 만들기 페이지의 버튼 설명을 반복하지 않습니다.
읽고 나서 닫기와 복원을 한 번 대조하세요
글은 「탭을 닫은 뒤, 키가 최근에 닫은 탭에서 되살아나는 이유」를 답합니다. 실제 인수인계에 쓰지 않는 테스트 링크를 만든 뒤 탭을 한 번 닫으려면 일회용 링크를 열면 되며, 먼저 가입할 필요는 없습니다.