hanip.me
개인정보 처리방침
한입(hanip.me)이 실제로 다루는 데이터를 있는 그대로 적어뒀습니다.
시행일자 2026년 9월 11일
한입은 회원가입도 로그인도 없습니다. 아래는 이 서비스가 실제로 저장하고 보내는 데이터 전부입니다.
먼저 알아둘 네 가지
회원가입 없이 이용합니다. 개인 선택·수집 기록은 이 브라우저에 남고, 서비스 정보에서 내보내거나 지울 수 있습니다. 자세히 읽기
서버에는 가명 처리한 이용 통계를 보내고 30일간 보관합니다. 이 이용 통계에는 음식 이름이나 검색어를 넣지 않습니다. 자세히 읽기
주변 식당을 찾으며 허용한 위치는 약 100m 단위로 낮춰 저장합니다. 직접 지우거나 마지막 저장일 기준 180일이 지나면 삭제됩니다. 날씨와 호스팅의 정보 처리는 아래에서 따로 설명합니다. 자세히 읽기
친구 도움방의 투표 등 임시 운영 데이터는 최대 15분 뒤 지워집니다. 그 뒤 남는 가명 방 통계에는 현재 자동 삭제 기한이 없습니다. 자세히 읽기
이 기기에만 저장하는 것
카드로 만난 한입과 선택·실행 기록, 직접 고른 음식 갈래와 그 결과, 끼니 진행·재오픈 상태, 마지막 카드 섞기 방식, 이미 본 카피 한마디, 설치 배너를 닫았는지, 무작위 설치 식별자, 사용자가 직접 답한 지난 한입의 실제 섭취 여부와 음식 단위 추천 제외, 도감에서 직접 담아 둔 한입 목록을 브라우저 저장소(localStorage)에 둡니다. 홈 화면 고양이의 반응을 정하려고 방문 횟수, 마지막 방문 시각, 마지막 반응 맥락과 그림 변형 번호도 저장합니다. 이 네 값의 원본 레코드와 정확한 방문 횟수·마지막 방문 시각은 제품 사용 통계나 별도 API payload로 보내지 않습니다. 다만 선택된 고양이 이미지를 불러오는 정적 파일 요청 경로에는 반응 맥락·그림 변형 번호·등불 단계가 들어 있어 호스팅/CDN 계층에서 요청 정보로 보일 수 있습니다. 같은 이유로, 칭호 공유 링크(/t/{칭호 id})에는 사용자가 보내기로 고른 칭호 id와 함께 보낼 때만 메뉴 id가 들어 있고 그 밖에는 아무것도 담지 않습니다. 방문 반응 값은 데이터 관리에서 지울 수 있지만 백업 내보내기·가져오기에는 포함하지 않습니다. 점진 추천 기능을 켜기 전에도 가져온 백업을 안전하게 다룰 수 있도록, 추천 진행에는 공개·선택·실행한 음식 ID, 활동일과 집계, 최근 공개 목록과 최근 명시적 거절 목록, 취향 가중치·제외 태그, 낯선 음식 허용도, 정책·Core 버전, 그리고 같은 실행을 두 번 세지 않기 위한 무작위 실행 영수증을 두 묶음으로 제한해 저장할 수 있습니다(중단 복구용 최대 256개, 최대 1,000건인 이 기기 이벤트 기록과 맞추는 용도 최대 1,000개). ‘셋 다 넘기기’의 세 신호와 세 음식 기록이 모두 저장된 경우에만, 그 음식 ID 세 개·끼니 구분·날짜와 한 번 반영했는지를 별도 보정 기록으로 저장합니다. 이 한 번을 여러 탭이나 중단 뒤에도 중복 적용하지 않도록 무작위 영수증·임시 claim 식별자와 최대 2분의 만료 시각을 함께 저장하고, 실제로 보정된 세 장의 세션에는 같은 식별자를 완료 증거로 남깁니다. 다음 같은 끼니에서 한 번 우선 피하고 최대 14일 동안 점차 약해지는 순서 보정에만 쓰며, 그중 하나를 고르거나 지도·배달에서 찾으면 그 음식은 즉시 보정에서 뺍니다. 선택·실행 이벤트에는 행동을 시작할 때 보던 보정 영수증 세대만 로컬로 함께 남겨, 늦게 끝난 예전 행동이 새 보정을 해제하지 못하게 합니다. 지도·배달로 화면을 떠나기 직전에는 실행 음식 ID·무작위 의도 ID·생성 시각, 같은 데이터 세대 값과 당시 보정 영수증 세대(있을 때)를 그 탭의 sessionStorage에 두고 최대 30분 동안만 복구 대상으로 인정합니다. 저장에 성공하면 즉시 지우고, 만료되거나 손상된 값은 hanip.me로 돌아와 확인할 때 지우며, 탭을 닫아도 사라집니다. 이 임시 기록은 백업 내보내기·가져오기에는 포함하지 않고 데이터 관리나 브라우저 사이트 데이터 삭제로 지울 수 있습니다. 이 기기에 저장된 선택 이력은 요청 시점에만 검수된 맛 분류에 약하게 연결해 이후 추천 순서를 조정하고, 이미 추천 제외한 음식은 이 계산에서도 뺍니다. 같은 음식의 지도·배달 실행은 선택 신호를 보강할 수 있지만 실행만으로 새로운 맛 취향을 만들거나 실제 섭취·만족을 추정하지 않고, 한 끼 도전 선택도 저장하지 않습니다.
음식과 연결된 정확한 답변·추천 제외 목록은 이 브라우저에만 남아 추천 조정과 기록·도감·프로필 표시에 쓰입니다. 기능이 실제로 도움이 되는지 보려고 질문 노출·먹음·못 먹음·제외·복원처럼 음식과 연결되지 않은 넓은 이벤트 종류만 서버에 보냅니다. 음식 ID·이름·끼니·답변 원문·추천 제외 목록·부정 이유·제외 태그·취향 가중치는 통계에 넣지 않습니다. 설치 식별자 원문도 서버로 보내지 않지만, 가명 방문 통계를 구분하려고 그 원문을 SHA-256으로 해시한 뒤 앞 16바이트(32자리 16진수)만 가명 설치 digest로 서버에 보냅니다.
기록을 지우거나 가져오는 동안 이전 화면의 늦은 저장이 다시 나타나지 않도록, 내용·사용자·시간을 담지 않는 내부 변경 세대 숫자 하나를 따로 둡니다. 이 숫자는 내보내지 않으며 기록을 지우거나 가져올 때 새 값으로 바뀝니다. 브라우저의 사이트 데이터를 지우면 함께 사라집니다. 탭 간 기록 충돌과 같은 카드 묶음의 중복 복구를 막기 위해, IndexedDB에도 현재 변경 세대·무작위 저장소 구분값·현재 카드 묶음 구분값·복구 사용 표식 한 건을 저장합니다. 음식·위치·계정 정보는 이 조정 기록에 넣지 않고 서버 전송이나 백업 내보내기도 하지 않습니다. 기록 지우기는 카드 묶음과 복구 표식을 지우며, 이전 탭의 늦은 저장을 막는 내부 조정값은 남깁니다. 사이트 데이터 전체를 지우면 모두 사라집니다. 이 저장소를 사용할 수 없으면 조정이 필요한 저장·지우기·가져오기·복구는 완료로 처리하지 않습니다. 여러 탭의 저장을 조정하는 Web Locks를 지원하지 않는 구형 브라우저에서는 한 탭의 기본 기록은 남지만, 여러 탭이 동시에 쓰면 일부 갱신이 빠질 수 있습니다. 그런 환경에서 기록 지우기·가져오기는 일부만 바꾸지 않고 오류로 끝납니다.
'서비스 정보'의 '데이터 관리'에서는 선택·추천 기록과 저장 위치를 내보내거나 가져올 수 있고, 방문 반응 값을 포함한 이 기기의 기록과 저장 위치를 모두 지울 수 있습니다. 브라우저에서 사이트 데이터를 지워도 똑같이 없어집니다.
안내서나 테마에서 메뉴 선택으로 이동할 때 유입 경로를 이어 보기 위해, 이 탭에 유입 경로·처음 연 페이지 종류와 언어·생성 시각·기록 초기화 여부를 확인하는 값을 한 건만 임시 보관합니다. 최대 30분이며 탐색으로 연장하지 않습니다. 최초 홈 방문에 한 번 사용하고, 기록 지우기·가져오기 또는 탭 종료 시 폐기합니다. 백업에는 포함하지 않습니다. 브라우저의 저장·참조 정보 제한으로 유입 경로를 알 수 없으며, 브라우저가 표시하지 않는 복제 탭은 완전히 구분하지 못합니다.
제품 사용 통계로 수집하는 건 가명 방문 통계입니다
제품을 개선하려고 방문(visit)·시작(start)·공개(reveal)·결정(decide)·공유(share)·실행(execute)·공유 결과 착지 조회(result_view), 추천 이유 노출(recommendation_reason_impression)·펼침(recommendation_reason_expand)·접기(recommendation_reason_collapse), 지난 한입 질문 노출(feedback_prompt)·먹음 응답(feedback_tasted)·못 먹음 응답(feedback_not_eaten)·추천 제외(feedback_exclude)·제외 취소(feedback_exclude_undo), 재제안 시작(recovery_start)·재제안 결정(recovery_decide)·재제안 실행(recovery_execute), 도감 화면 열람(dex_view — 도감 화면을 열었는지만 방문당 한 번) 열아홉 종류의 이벤트만 모읍니다. 브라우저가 보내는 값은 설치 식별자 원문을 SHA-256으로 해시한 뒤 앞 16바이트만 쓴 가명 설치 digest, 방문마다 무작위로 만든 방문 식별자, 이벤트 종류, 정확한 시각을 담지 않는 0부터 14까지의 방문 내 발생 순번, 유입원 구분 열 가지(cat·threads·food-guide·intent-landing·direct·other·theme·room·search·pwa), 방문을 시작할 때 화면에 표시되던 언어 한 가지(ko·en·ja 중 하나), 결정(decide·recovery_decide) 이벤트에만 붙는 소요 시간 구간, 앱 버전, 그리고 검토된 실험이 켜졌을 때 방문 단위로 정한 닫힌 코드값 experiment_id와 variant입니다. 지금 기준선에서는 두 실험 값은 저장하지 않습니다. 유입원 열 가지의 뜻은 이렇습니다 — cat은 한닙캣 게시물 링크로, threads는 스레드 링크로, food-guide는 음식 안내서의 카드 CTA로, intent-landing은 상황별 추천 CTA로, theme은 테마 페이지에서 카드로, room은 친구 도움방 링크로, search는 검색 엔진에서(referrer의 호스트만 판독하고 주소 자체는 저장하지 않습니다), pwa는 홈 화면에 추가한 앱으로 열었는지, direct는 그 밖의 직접 방문, other는 알아보지 못한 표식입니다. search와 pwa를 가리려고 브라우저 안에서만 document.referrer의 호스트와 화면 표시 모드(standalone)를 읽고, 그 값으로 유입원 하나를 정한 뒤에는 referrer 주소도 표시 모드 값도 서버로 보내지 않고 저장하지도 않습니다. 서버는 요청을 받은 시점의 KST 달력 날짜를 저장하고 요청 주소로 측정 환경(production 또는 qa)을 판정하며, 앱 버전과 발생 순번은 현재 서버 빌드와 정확히 일치하는 요청에서만 함께 보존하고 구버전·미확인 버전의 순번은 저장하지 않습니다. 실험 값도 등록된 짝만 정규화해 저장합니다. 화면 언어도 알아보지 못한 값이거나 언어를 함께 보내지 않은 요청(구버전 브라우저 등)이면 어느 언어로도 추정하지 않고 비워 둡니다. production 요청에는 오너 검수와 통제 synthetic 요청을 공식 외부 기준선에서 빼기 위해 서버가 요청 쿠키에서 external·owner_test·synthetic 중 하나의 낮은 카디널리티 구분값을 붙입니다. 쿠키는 권한이나 사람 여부를 증명하지 않는 최선 노력 제외 표식이며, 쿠키 원문은 지표 테이블에 저장하지 않습니다. 또 한국에서 열어 본 방문인지 아닌지를 나라 단위로만 보려고, 요청에 이미 실려 오는 국가 정보를 서버가 '한국(KR)'과 '그 밖(other)' 두 값 중 하나로 접어서만 저장합니다. 도시·지역·좌표나 접기 전의 국가 코드는 저장하지 않고, 나라를 알 수 없는 요청은 '그 밖'으로 추정하지 않고 비워 둡니다. 이 값은 브라우저 위치 권한이나 '주변 식당 찾기'에서 따로 허용한 저장 위치와는 아무 관계가 없습니다. 구버전 브라우저가 보내는 기기 날짜는 무시합니다. 이벤트는 한 방문에서 종류별 한 번만 셉니다. 검증과 레이트리밋을 통과해 D1에 도달한 정확히 같은 이벤트 요청은 로우 하나를 유지하고, 그 경계에서 관측한 시도 횟수의 하한만 1부터 2까지 남깁니다. 이는 모든 서버 도착이나 자동 재시도만을 세는 값이 아닙니다. 음식 안내서와 상황별 추천 문서를 읽는 동안에는 이벤트를 만들지 않습니다. 안내서 CTA를 따라 홈에 들어온 방문은 food-guide, 상황별 추천 CTA를 따라 들어온 방문은 intent-landing으로만 구분합니다. 이 공개 표식들은 최선 노력 통계일 뿐 인증된 유입 증명으로 쓰지 않습니다.
정확한 안내서·상황별 추천 URL이나 개별 페이지 식별자는 보내지 않습니다. 사용자가 누른 고정 진입 링크는 discover·decide·collect(알아보기·메뉴 결정·수집) 세 값 중 하나로만 구분해 유입원과 별도로 보냅니다. 이 값은 방문 시작 때 한 번 정해 언어 전환과 재시도 중에도 유지합니다. 표식이 없거나 알아보지 못하면 추정하지 않고 비워 둡니다. 이 분류로는 공개 랜딩 노출·이탈, 주문 카드 저장, 실제 주문·식사를 측정하지 않습니다. 현재 검수·공개한 상황별 추천은 매운 음식과 K-트렌드 두 종류라, intent-landing만으로는 어느 문서의 CTA였는지 구분할 수 없습니다. 앱 버전·측정 환경·실험 코드도 메뉴나 문구 원문이 아니라 배포와 비교 조건을 구분하는 낮은 카디널리티 표식입니다. 그 밖에 어떤 메뉴인지, 음식 ID·이름, 검색어, 끼니, 답변 원문, 추천 제외 목록, 카드 위치, 도시·지역·좌표 같은 개별 위치, 추천 근거의 내용, 정확한 시각, 이름·이메일은 통계에 넣지 않습니다. 추천 이유를 펼친 행동은 취향 학습에도 쓰지 않습니다. 통계는 서버가 붙인 KST 달력 날짜 기준 30일간 보관하고, 매일 그보다 오래된 행을 자동으로 삭제합니다.
기존 홈 방문 통계에 구글·네이버 등 유입 경로, 처음 연 페이지의 종류(홈·안내서·테마·기타), 당시 화면 언어를 함께 보냅니다. 앱 안에서 선택한 이동 경로와는 별도로 구분합니다. 참조 정보가 없다는 이유만으로 직접 방문으로 판단하지 않습니다. 안내서·테마를 읽는 것만으로 방문 통계를 보내지 않으며, 검색에서 들어온 사람 전체의 이탈률을 측정하지 않습니다. 원래 참조 주소·검색어·음식 식별값·정확한 도착 시각은 보내지 않습니다. 이 정보도 기존 사용 통계와 같은 보존기간인 30일을 따릅니다.
날씨는 이렇게만 씁니다
카드 화면 배경 분위기(맑음·흐림·비·눈)와 검수된 따뜻한 국물·가벼운 음식·비 오는 날 적합 분류를 오늘 날씨에 조금 맞추려고, 요청에 실려 오는 대략적인 도시 단위 위치를 그 순간 날씨를 확인하는 데만 잠깐 이용합니다.
정밀한 GPS 좌표는 쓰지 않고, 위도·경도 값 자체를 한입의 응답·저장소·운영 로그에 남기지 않습니다. 날씨 조회를 위해 외부 공급자 Open-Meteo에 대략 좌표를 보내고, 한입에서는 같은 지역의 날씨 결과만 15분 정도 짧게 재사용합니다.
날씨는 이미 검수·적격인 음식 안에서만 0.90–1.15 배 범위로 순서에 영향을 줄 수 있습니다. 추천 제외, 알레르기, 끼니, 도전 음식 조건을 풀지 않고, 도시·기온·날씨 종류를 추천 기록이나 통계에 남기지 않습니다. 날씨가 실제 순위에 기여한 경우에는 그 사실과 숫자형 기여도만 이 기기의 추천 세션에 남을 수 있습니다. 복날·발렌타인데이·블랙데이 안내는 KST 날짜와 공개 자료로만 보여 주며 추천 점수와 취향 기록을 바꾸지 않습니다.
오프라인 캐시와 홈 화면 설치
한입은 PWA라 화면·이미지 같은 정적 자원을 기기에 캐시해 다음 방문을 더 빠르게 엽니다. 캐시는 이 기기 안에만 있고, 방문 기록 같은 API 응답은 캐시하지 않습니다.
홈 화면에 설치해도 새로운 데이터가 생기지 않습니다 — 브라우저를 더 빠르게 여는 바로가기일 뿐입니다.
친구 도움방(투표) 데이터
친구에게 메뉴 후보 세 장을 보여주고 골라달라고 하는 '도움방' 기능은 방을 운영하려고 방을 만들 때 고른 카드 3장의 id, 친구들이 고른 가명 투표, 투표에 붙인 이유 태그를 별도의 도움방 서버에 잠깐 저장하고, 방 생성 요청에 메인 앱의 숫자형 앱 버전도 함께 보냅니다. 이름·카카오 계정·전화번호·정확한 위치는 묻지 않고, 투표자를 구분하는 값과 방장 권한 값도 원문이 아니라 단방향 해시로 저장합니다. 같은 방의 ‘내 카드 세 장 보기’ 이동을 중복 집계하지 않으려고, 이 탭의 sessionStorage에는 원본 roomId가 아닌 16자리 방 범위값과 대기·표시 상태를 최대 16개까지 탭 종료 시점까지만 저장합니다. 데이터 관리에서 기록을 지워도 함께 삭제됩니다.
이 방 운영 데이터는 만든 지 최대 15분 뒤 원래 설정된 alarm에서 자동으로 완전히 삭제됩니다. 방장이 그 전에 메뉴를 확정해도 투표와 이유 태그는 즉시 지워지지 않고 그 alarm 시점까지 남을 수 있습니다.
그 뒤에도 가명 처리된 방 단위 통계·운영 기록은 남습니다. 이 기록에는 공개 공유 링크의 roomId를 별도 비밀키 없이 SHA-256한 room_hash, KST 달력 날짜, 끼니 구간, 후보·확정 메뉴 id, 방 생성·첫 투표·확정·만료와 방장·친구 화면의 열한 가지 행동 이벤트, 각 시점의 메뉴별 득표수와 참여자 수, 확정 순위·동률·걸린 시간 구간, 서버가 요청 출처로 구분한 측정 환경(production 또는 qa), 클라이언트가 보낸 형식 검증 숫자형 앱 버전이 들어갈 수 있습니다. 같은 room_hash의 연속 득표 현황 차이로 어느 카드에 표가 추가되거나 바뀌었는지 추론될 수 있지만, 투표자를 구분하는 값과 개별 이유 태그는 이 장기 기록에 넣지 않습니다. 공개된 요청 출처와 앱 버전 표식은 비교용 최선 노력 통계이며 인증된 출처·버전 증명은 아닙니다. 이 가명 기록에는 현재 자동 삭제 기한이 정해져 있지 않습니다.
하지 않는 것과 호스팅 보안
로그인도 회원가입도 없습니다. 위치는 '주변 식당 찾기'를 직접 누를 때마다 브라우저가 최신 현재 위치를 확인하고, 이미 정한 위치 권한이 있으면 그 결정을 적용합니다. 허용한 좌표는 소수 셋째 자리(약 100m)로 낮추고, 거친 정확도 구간·마지막 저장일과 함께 통계에 쓰는 것과 같은 가명 설치 digest에 연결해 저장합니다. 근처 식당 검색과 저장 위치 관리에만 쓰며, 마지막 저장일로부터 KST 달력 날짜 기준 180일이 지나면 매일 자동 삭제합니다. '서비스 정보'의 '데이터 관리'에서도 언제든 직접 삭제할 수 있습니다. 광고나 추적 스크립트를 심지 않고, 데이터를 팔거나 광고 목적으로 넘기지 않습니다.
호스팅과 악성 트래픽 차단에는 Cloudflare 보안 계층을 사용합니다. 이 과정에서 Cloudflare가 봇 판별용 __cf_bm 쿠키를 설정하고 요청 IP·브라우저 정보를 보안 목적으로 처리할 수 있습니다. 한입은 이 쿠키를 광고나 메뉴 개인화에 사용하지 않습니다.
지도·배달 서비스로 이동하면
'주변 식당 찾기'는 메뉴명과 방금 확인한 약식 좌표를 네이버 지도(map.naver.com) 검색 주소에 넣어 이동합니다. '위치 없이 메뉴명만 지도에서 검색'을 고르면 현재 위치를 확인하거나 저장하지 않고 좌표 없이 메뉴명만 보냅니다. '배달 앱에서 찾기'는 메뉴명을 기기에 복사한 뒤 설치된 배달의민족 또는 쿠팡이츠 앱을 엽니다. 이동한 뒤에는 각 서비스의 개인정보 처리방침과 이용약관이 적용됩니다.
이 서비스에 대해
개인이 만들어 운영하는 서비스입니다. 선택·추천 기록과 저장 위치는 '서비스 정보'의 '데이터 관리'에서 내보낼 수 있고, 방문 반응 값을 포함한 이 기기 기록과 저장 위치는 모두 지울 수 있습니다. 오류나 접근성 문제는 아래 이메일로 알려주십시오.
이메일로 문의하기보내주신 이메일은 문의 답변에만 사용합니다.