BugShot 개인정보처리방침
시행일: 2026년 8월 16일
BugShot(이하 "확장 프로그램")은 사용자의 개인정보를 소중히 여기며, 최소한의 정보만 수집·처리합니다. 본 방침은 확장 프로그램이 어떤 정보를 다루는지 투명하게 안내합니다.
1. 수집하는 정보
플랫폼 자격 증명 및 사용자 정보
| 정보 | 수집 시점 | 목적 |
|---|---|---|
| Jira 자격 증명 (API Token 또는 OAuth 토큰), 사이트 URL | Jira 연동 설정 시 | 이슈 생성 및 첨부 |
| Jira 사용자 이메일 | 연동 검증 시 | 연동 상태 표시 |
| GitHub 자격 증명 (PAT 또는 OAuth 토큰) | GitHub 연동 설정 시 | 이슈 생성 및 파일 업로드 |
| GitHub 사용자 ID | 연동 검증 시 | 연동 상태 표시 |
| Linear 자격 증명 (API Key 또는 OAuth 토큰) | Linear 연동 설정 시 | 이슈 생성 및 첨부 |
| Linear 사용자 이름·이메일 | 연동 검증 시 | 연동 상태 표시 |
| Notion 자격 증명 (Internal Integration Token 또는 OAuth 토큰) | Notion 연동 설정 시 | 페이지 생성 및 첨부 |
| Notion 워크스페이스 정보 | 연동 검증 시 | 연동 상태 표시 |
| GitLab 자격 증명 (Personal Access Token 또는 OAuth 토큰) | GitLab 연동 설정 시 | 이슈 생성 및 파일 업로드 |
| GitLab 사용자 이름·이메일 및 인스턴스 URL | 연동 검증 시 | 연동 상태 표시 (self-managed 인스턴스 주소 포함) |
| Asana 자격 증명 (Personal Access Token 또는 OAuth 토큰) | Asana 연동 설정 시 | 작업(task) 생성 및 파일 업로드 |
| Asana 사용자 이름·이메일 | 연동 검증 시 | 연동 상태 표시 |
| ClickUp 자격 증명 (Personal API Token 또는 OAuth 토큰) | ClickUp 연동 설정 시 | 작업(task) 생성 및 파일 업로드 |
| ClickUp 사용자 이름·이메일 | 연동 검증 시 | 연동 상태 표시 |
| Slack 자격 증명 (OAuth user token) | Slack 연동 설정 시 | 채널/DM 메시지 전송 및 파일 업로드 |
| Slack 사용자 이름·워크스페이스(team) 정보 | 연동 검증 시 | 연동 상태 표시 |
담당자·CC(참조)·멘션 대상
담당자·CC(참조)·Slack 멘션 등 사용자를 선택하는 필드를 사용하면 연동된 플랫폼(Jira·GitHub·Linear·Notion·GitLab·Asana·ClickUp·Slack)에서 후보(이름·핸들·아바타·이메일)를 받아 표시합니다. 사용자(담당자·CC·멘션) 후보 검색에서 입력한 검색어가 플랫폼 서버로 전송되는 것은 Jira뿐이고(사용자 검색 API에 검색어를 넘깁니다), 나머지 플랫폼은 프로젝트·워크스페이스의 사용자 목록을 받아 온 뒤 검색은 기기 안에서 수행합니다 — 이 경우 입력한 검색어는 밖으로 나가지 않지만, 해당 범위의 사용자 명부(이름·핸들·아바타·이메일)가 기기로 전달됩니다(별도로 저장하지 않습니다). 다만 사용자가 아니라 대상 위치를 고르는 필드(Jira 프로젝트·이슈, GitHub 저장소, GitLab 프로젝트, Notion 데이터베이스 등)는 후보가 많아 서버 검색을 쓰므로, 그 입력한 검색어는 해당 플랫폼으로 전송됩니다. 후보 목록에 표시되는 아바타 이미지는 플랫폼이 응답에 실어준 이미지 주소로 브라우저가 직접 요청합니다 — 그 주소는 플랫폼 자체 CDN일 수도 있고, 계정이 외부 아바타 서비스를 쓰는 경우 제3자 이미지 호스트(Gravatar·Google 등)일 수도 있습니다. 이때 그 호스트에는 이미지 요청에 수반되는 접속 정보(IP 등)가 전달됩니다. 이미 선택된 사용자를 목록 상단에 표시하기 위해 해당 사용자의 프로필(이름·아바타·이메일)을 추가로 조회할 수 있습니다. 이 조회는 이슈를 작성할 때뿐 아니라, 연동(Connect) 탭에서 기본 담당자를 지정할 때에도 동일하게 발생합니다. 사용자가 선택한 대상의 식별자는 생성되는 이슈 본문(또는 Slack 메시지)에 포함되어 해당 플랫폼으로 전송됩니다.
검색어와 조회된 후보·프로필 목록 자체는 기기에 저장되지 않습니다. 다만 사용자가 선택한 담당자·CC·멘션 대상의 식별자와 표시 이름은 다음 작성 시 다시 채워 넣기 위해 기기에 저장됩니다(연동 설정의 기본 담당자, 그리고 직전 제출값).
페이지 데이터 및 디버그 정보
| 정보 | 수집 시점 | 목적 |
|---|---|---|
| 재현 환경 정보 (OS·브라우저 이름과 버전·현재 페이지 주소·창 크기·캡처 시각, 요소를 고른 경우 그 요소의 CSS selector) | 이슈 작성 화면 진입 시 | 이슈 본문의 "재현 환경"에 자동 기입 — 저장한 이슈와 제출한 플랫폼에 함께 전달됩니다 |
| API 호스트 목록 (수집된 네트워크 로그에서 파생 — 현재 페이지와 같은 조직 도메인을 쓰는 다른 호스트명. 경로·쿼리·포트는 제외하고 호스트명만) | 로그 첨부가 켜진 캡처의 이슈 작성 화면 진입 시 | 이슈 본문의 "재현 환경"에 API Hosts 행으로 자동 기입 — 첨부 파일이 아니라 본문 평문입니다. 사용자가 값을 고치거나 행을 삭제할 수 있고, 요소 스타일 편집 모드에서는 기입되지 않습니다 |
| DOM 요소 스타일 정보 | 요소 선택 시 | 스타일 비교 및 이슈 본문 생성 |
| 스크린샷 (영역·화면·페이지 전체·요소)·탭 영상 | 캡처/탭 녹화 시 | 사용자가 고른 범위를 캡처해 이슈 첨부 — 페이지 전체 캡처는 보이는 화면을 넘어 페이지를 자동으로 스크롤하며 여러 장을 찍어 하나로 이어 붙이므로, 화면 밖에 있던 내용까지 이미지에 포함됩니다. 요소 스타일 편집에서는 요소를 고르는 즉시 편집 전 이미지가 캡처되며, 고른 요소가 표의 행·목록 항목·대화상자 같은 컨테이너 안에 있으면 그 컨테이너 전체(+사방 24px)까지 넓혀 찍습니다 |
| 에디터 인라인 이미지 | 이슈 본문에 화면 일부 삽입 시 | 현재 탭 화면을 캡처(captureVisibleTab)해 선택 영역만 잘라 본문에 삽입 |
| 화면 녹화 영상 | 화면 녹화 모드 선택 시, 또는 탭 녹화가 불가능해 화면 공유로 자동 전환될 때 | 브라우저 화면 공유 다이얼로그로 사용자가 직접 선택한 대상(전체 화면·다른 앱 창·다른 탭 등 BugShot이 열린 탭 밖 화면도 포함될 수 있음)을 녹화해 이슈 첨부. 탭 녹화 중 페이지 이동 등으로 탭 캡처 권한이 회수되면 화면 공유 다이얼로그가 대신 뜨며, 이 경우에도 사용자가 대상을 직접 고르기 전에는 녹화가 시작되지 않습니다 |
| 주석(어노테이션) | 스크린샷·요소 스타일 편집의 편집 전/후 이미지에 주석을 그리거나, 녹화 중 화면에 그릴 때 | 기기 안에서만 이미지·영상에 합성됩니다. 별도로 수집·전송되는 데이터가 없습니다 |
| 오디오 | — | 수집하지 않습니다. 탭 녹화·화면 녹화·30초 리플레이 모두 마이크·시스템 오디오를 담지 않습니다(영상은 무음) |
| 네트워크 요청 로그 (요청·응답 헤더 포함) | 사이드 패널이 열려 있는 동안 (캡처 시작 전 포함) | 이슈 첨부 (디버그 정보). 요청 URL의 호스트명 일부는 위 "API 호스트 목록"으로 파생돼 이슈 본문에도 자동 기입됩니다. 헤더는 아래 민감 목록에 해당하면 마스킹되고, 그 밖의 헤더는 원문 그대로 담깁니다 |
| WebSocket 메시지 (텍스트 프레임 본문) | 사이드 패널이 열려 있는 동안 (캡처 시작 전 포함) | 이슈 첨부 (디버그 정보 — 송수신 텍스트 메시지, 바이너리 제외) |
| 콘솔 로그 | 사이드 패널이 열려 있는 동안 (캡처 시작 전 포함) | 이슈 첨부 (디버그 정보) |
| 사용자 액션 로그 (클릭·입력·페이지 이동(뒤로가기·앞으로가기·새로고침 구분 포함)·단축키 입력·토글·드롭다운 선택·드래그) | 사이드 패널이 열려 있는 동안 (캡처 시작 전 포함) | 이슈 첨부 (재현 단계 — 요소 스타일 편집을 제외한 모든 캡처 모드에 기본 첨부) |
| 30초 리플레이 프레임 | 30초 리플레이 활성화 시 (선택 기능, 기본 꺼짐) | 켜 두면 사이드 패널이 열려 있고 캡처를 시작하지 않은 동안 현재 탭 화면을 약 0.6초 간격으로 계속 캡처해 직전 30초를 메모리에 임시 보관 (미저장·미전송, 사용자가 명시적으로 캡처할 때만 영상으로 첨부) |
| 사용자 첨부 파일 | 파일 첨부 기능 활성화 후 이슈에 파일 첨부 시 (선택 기능, 기본 꺼짐) | 사용자가 직접 선택한 임의의 로컬 파일을 이슈에 첨부 |
페이지 전체 캡처를 실행하면 확장 프로그램이 캡처가 끝날 때까지 페이지를 자동으로 위에서 아래로 스크롤하고, 화면에 고정된 요소(position: fixed인 헤더·플로팅 버튼 등)와 이미 한 번 전부 노출된 뒤 화면 상·하단에 붙어 반복되는 position: sticky 요소를 일시적으로 숨겼다가 캡처가 끝나면 원래대로 되돌립니다(아직 원래 위치에 도달하지 않았거나 화면보다 길어 전부 노출되지 않은 sticky 요소는 숨기지 않습니다 — 아직 안 보여준 내용이 누락되지 않도록)(같은 요소가 이미지에 반복해서 찍히는 것을 막기 위함). 캡처 중에는 결과가 어긋나지 않도록 페이지의 클릭·스크롤 입력이 차단되며, 캡처가 끝나면 원래 보던 스크롤 위치로 복원됩니다. 이 자동 스크롤 때문에 페이지가 자체적으로 가진 스크롤 동작(추가 콘텐츠 불러오기, 페이지 자체의 분석 스크립트 등)이 실행될 수 있습니다. 이는 페이지가 원래 하는 동작이며, 확장 프로그램은 이 과정에서 캡처한 이미지 외의 정보를 별도로 수집하거나 외부로 전송하지 않습니다.
요소 스타일 편집 모드에서 요소를 고르는 즉시 편집 전 이미지가 캡처되고(실제로 스타일을 고치지 않아도 캡처됩니다), 편집 후 이미지는 다음 단계로 넘어갈 때, 다른 요소로 전환할 때, 그리고 스타일 편집 화면의 변경사항 목록에서 개별 변경 항목을 되돌릴 때 다시 캡처됩니다. 이때 선택한 요소만이 아니라 그 요소를 감싼 가장 가까운 컨테이너(대화상자·팝오버·표의 행·목록 항목·article·figure·탭 패널·알림 영역 등)까지 넓혀 찍을 수 있습니다. 어떤 항목을 고쳤는지 이미지만 보고 알아볼 수 있게 하기 위함이며, 그 컨테이너가 현재 화면에 온전히 들어오고 화면 면적의 40% 이하일 때만 적용됩니다. 따라서 넓혀 찍은 캡처도 항상 보이는 화면 안이고, 페이지 전체 캡처와 달리 화면 밖 내용은 포함되지 않습니다. 컨테이너 범위에 사방 24px의 여백을 더해 잘라내므로 바로 인접한 내용(예: 표에서 위·아래 행의 일부)이 이미지 가장자리에 함께 담길 수 있습니다.
개인정보가 모이기 쉬운 입력 폼(form·fieldset)은 컨테이너 후보에서 제외하지만, 이는 "폼 자체를 컨테이너로 골라 넓혀 찍지 않는다"는 뜻입니다. 폼보다 바깥에 대화상자 같은 다른 후보가 있으면 그 대화상자가 선택될 수 있고, 그 경우 대화상자 안의 입력 폼 내용(예: 결제·주소 입력값)이 함께 담깁니다(위 40%·화면 포함 조건을 통과할 때). iframe 내부 요소에는 확장을 적용하지 않습니다. 넓혀 찍은 이미지에는 같은 컨테이너 안의 다른 내용(예: 같은 행의 다른 열 값)이 함께 담길 수 있으므로, 제출 전 작성 화면에서 편집 전·후 이미지를 확인하시기 바랍니다.
네트워크 로그 수집 시 authorization, cookie 등 민감 헤더와 token, access_token 등 민감 쿼리 파라미터는 자동으로 마스킹 처리됩니다. 요청·응답 본문(JSON·폼 데이터)에 포함된 token, password, secret 등 민감 키의 값도 자동으로 마스킹됩니다. 페이지가 WebSocket으로 주고받는 실시간 메시지의 경우 텍스트 프레임 본문만 수집되며(이미지·파일 등 바이너리 프레임은 수집하지 않음), 위와 동일한 본문 마스킹이 적용됩니다 — 단 JSON 형식 프레임에 한하며, 그 외 텍스트 프레임은 원문 그대로 수집됩니다. 콘솔 로그는 페이지가 출력한 메시지와 페이지에서 처리되지 않은 오류·프로미스 거부(스택 포함)를 원문 그대로 수집하므로(별도 마스킹 없음), 민감 정보를 콘솔에 출력하는 페이지에서는 디버그 캡처 시 유의하시기 바랍니다.
콘솔·네트워크·액션 로그는 현재 페이지 본문뿐 아니라 그 페이지에 삽입된 다른 출처(third-party) 프레임(iframe — 예: 결제 위젯, 임베드 SDK)에서 발생한 로그(해당 프레임 내부의 클릭·입력 포함)도 함께 수집할 수 있습니다. 이는 해당 프레임에서 일어나는 오류가 버그 재현에 필요하기 때문이며, 수집된 로그에는 출처(origin) 정보가 함께 기록되어 이슈 첨부 시 출처별로 구분·필터할 수 있습니다. 위 민감 헤더·파라미터·본문 마스킹은 프레임 출처와 무관하게 동일하게 적용됩니다.
요소 선택·스타일 편집과 요소 캡처도 페이지에 직접 삽입된 다른 출처(cross-origin) 프레임(iframe — 결제 위젯·임베드 등) 내부 요소로 확장됩니다. 해당 프레임 안의 요소를 선택하면 그 요소의 선택자·스타일 정보·텍스트를 수집하고, 프레임 출처(origin)를 함께 기록해 이슈의 스타일 변경 목록에 표시합니다. iframe 내부 요소를 캡처하면(현재 탭 화면을 캡처해 해당 요소 영역만 잘라내는 방식) 그 프레임의 화면 내용이 스크린샷에 포함될 수 있습니다. 프레임 안에 또 프레임이 겹쳐 있거나(중첩) 보안 정책(sandbox)으로 막힌 프레임은 내부에 접근하지 않습니다.
사용자 액션 로그는 클릭한 요소·입력 필드·페이지 이동에 더해, 단축키·특수키 입력(예: Enter·Esc·⌘K — 단축키 기록에는 인쇄 문자나 필드 값이 실리지 않습니다), 체크박스·라디오 토글, 드롭다운 선택, 요소를 끌어다 놓는 드래그 동작(끈 요소와 놓은 위치 요소의 식별 정보)을 재현 단계로 기록합니다. 이때 클릭·드래그한 요소를 사람이 알아볼 수 있도록 그 요소의 화면 표시 텍스트(접근가능 이름, 최대 80자)를 함께 기록합니다 — "저장 버튼을 눌렀다"처럼 읽히게 하기 위함입니다.
페이지 이동은 어떻게 이동했는지도 함께 기록합니다 — 브라우저 뒤로가기·앞으로가기, 새로고침, 그리고 방향을 알 수 없는 히스토리 이동을 일반 이동과 구분해 남깁니다. "뒤로가기를 눌렀더니 폼 값이 사라진다" 같은 버그는 이동 방식 자체가 재현 단계이기 때문입니다. 이 구분은 브라우저가 페이지에 알려주는 이동 정보로만 판정하며, 새로 수집되는 주소·식별자는 없습니다.
입력 필드에 입력한 값과 드롭다운에서 고른 값은, 아래 마스킹 판정에 걸리지 않는 한 원문 그대로(최대 500자) 기록되어 이슈에 첨부됩니다. 버그 재현에 어떤 값을 넣었는지가 필요하기 때문입니다. 민감 정보는 두 가지 방식으로 자동 마스킹(***)됩니다.
- 필드 종류·라벨 기준:
type=password, autocomplete 힌트(current-password·cc-*·one-time-code), 그리고 필드 이름·id·aria-label·연결된 라벨(label요소·aria-labelledby)·placeholder에 담긴 민감 키워드(비밀번호·주민·카드·계좌·전화·주소, password·card·cvv·ssn·token·key·otp·passphrase·credential 등)로 판별합니다. 영문 키워드는 단어 단위로 대조하므로(예:keyword·monkey는 걸리지 않음) 민감 키워드를 부분 문자열로 품은 일반 필드는 원문이 유지됩니다. - 값 형태 기준: 라벨에 아무 단서가 없어도 값 자체가 이메일 형태이거나 9자리 이상의 숫자열(전화번호·카드번호·주민등록번호·계좌번호 등)이면 마스킹합니다.
각 액션에는 그 액션이 일어난 페이지 주소도 함께 기록됩니다. 페이지 이동뿐 아니라 클릭·입력·토글·선택·단축키·드래그를 포함한 모든 액션 주소에서 위 민감 쿼리·fragment 파라미터를 자동 마스킹합니다. 민감 키로 판정되지 않은 일반 주소 정보는 재현을 위해 그대로 기록됩니다.
위 값 형태 기준은 입력값뿐 아니라 요소의 화면 표시 텍스트·필드 라벨에도 동일하게 적용됩니다. 즉 클릭한 요소의 이름이 이메일 형태이거나 긴 숫자열이면 그것도 ***로 가려집니다.
또한 리치 텍스트 편집기(contenteditable — 메일 본문·문서·메시지 입력창 등)에 작성한 내용은 값으로도 요소 이름으로도 기록하지 않고 입력했다는 사실만 남깁니다. 민감 필드에 포커스된 동안의 키 입력도 기록하지 않습니다. 다만 라벨과 값 어느 쪽에서도 민감 신호가 나타나지 않는 입력값(예: 검색어, 일반 텍스트)은 원문이 기록되므로, 민감한 내용을 입력하는 화면에서는 제출 전 로그 첨부를 해제하시기 바랍니다.
콘솔·네트워크·액션 로그의 첨부는 기본으로 켜져 있으며, 이슈를 제출하기 전 작성 화면의 로그 카드 스위치 하나로 첨부를 통째로 해제할 수 있습니다. 이 스위치를 끄면 자동 기입된 API Hosts 행도 함께 사라집니다 — 다만 그 행의 값을 직접 수정하신 경우에는 사용자가 입력한 값으로 취급되어 스위치를 꺼도 본문에 남습니다. 지우시려면 행 삭제 버튼을 눌러 주세요.
로그가 이슈 본문 평문으로 나가는 경로는 두 가지입니다. 하나는 위에서 설명한 API Hosts 행으로, 자동·기본 켜짐이며 호스트명만 담습니다. 다른 하나는 아래의 수동 삽입입니다.
작성 화면에서 수집된 네트워크·콘솔 로그 중 한 건을 직접 골라 이슈 본문에 코드블럭으로 삽입할 수도 있습니다(첨부와 별개 기능이며, 사용자가 버튼을 눌러 고른 로그만 삽입됩니다). 네트워크 로그를 삽입하면 요청 경로·상태 코드와 함께 요청·응답 본문 원문이 담기며, 위에 설명한 수집 시점의 본문 마스킹(token·password·secret 등 민감 키)만 적용되고 그 밖의 본문은 원문 그대로입니다(헤더는 삽입되지 않습니다). 콘솔 로그를 삽입하면 페이지가 출력한 메시지와 스택 트레이스가 마스킹 없이 원문 그대로 담깁니다 — 콘솔 로그에는 애초에 마스킹이 적용되지 않기 때문입니다. 첨부 파일(logs.html)과 달리 이슈 본문 평문으로 노출되어 그 이슈를 볼 수 있는 사람 전원이 열람할 수 있으며(Slack으로 공유하면 첨부를 열지 않는 채널 멤버에게도 그대로 보입니다 — 사내 QA·스테이징 호스트명이 포함될 수 있는 API Hosts 행도 마찬가지입니다), 다만 삽입한 이 코드블럭 자체는 AI 초안 작성에 전송되지 않습니다 — 기존 초안을 AI에 넘길 때 코드블럭과 삽입 이미지는 본문 텍스트에서 빠지고 산문만 보냅니다. 다만 삽입한 인라인 이미지 자체는 이미지를 지원하는 프로바이더에 별도 이미지로 전송됩니다(위 외부 전송 표의 "인라인 이미지" 항목). (성공 응답의 shape 다이제스트가 AI로 전송되는 별도 경로는 위 외부 전송 표를 참고하세요 — 응답 원문이 아니라 키 이름·타입만, 값은 제외됩니다.) 삽입 전 상세 화면에서 내용을 확인하시고, 삽입된 코드블럭은 일반 텍스트이므로 제출 전 자유롭게 수정·삭제할 수 있습니다.
캡처(스크린샷·리포트 작성·영상 녹화)를 진행하는 동안에는 페이지를 이동(다른 사이트로의 이동 포함)하더라도 그동안의 콘솔·네트워크·액션 로그가 끊기지 않고 함께 보존되어, 그렇게 만든 이슈에는 캡처 중 방문한 페이지들의 디버그 로그가 포함될 수 있습니다.
디버그 캡처를 한 번 시작한 적 있는 페이지를 다시 로드하면, 캡처를 재개하는 시점에 해당 페이지 로드 초반(재개 직전)의 콘솔·네트워크·액션 로그도 소급해 함께 포함될 수 있습니다. 이 로드 초반 로그는 캡처를 다시 시작하기 전까지는 기기 메모리에만 임시 보관되며 저장·전송되지 않습니다. 캡처가 60초 안에 재개되지 않으면 이 임시 보관분은 자동으로 폐기됩니다.
앱 설정
| 정보 | 수집 시점 | 목적 |
|---|---|---|
| LLM 프로바이더 설정 (base URL, API 키, 모델) | AI 초안·AI 스타일링 기능 설정 시 | LLM API 호출 |
LLM API 키는 난독화하여 저장됩니다. 프로바이더는 사용자가 직접 고르며, 프리셋으로 OpenAI·Anthropic·Gemini·Mistral·Groq·OpenRouter·Together·Ollama의 base URL이 제공됩니다 — AI 기능을 쓰면 이슈 초안 재료(제목·본문·스타일 변경 내역·주석 이미지·로그 요약 등)가 사용자가 고른 그 프로바이더로 전송됩니다. 이때 액션 로그 요약에는 마스킹되지 않은 입력·선택 값이 그대로 포함될 수 있습니다(마스킹된 값은 ***로 전송). AI 기능을 켜지 않으면 전송되지 않습니다. 다만 프로바이더를 설정하는 화면에서는 사용할 수 있는 모델 목록을 받아오기 위해 해당 엔드포인트로 요청이 나갑니다(사용자 콘텐츠 없이 API 키만 사용). 또한 영상 캡처 후 리포트 작성 화면에 들어가면, 재현 단계를 자동으로 채우기 위해 액션 로그 요약과 페이지 주소·제목이 (연결된 AI 프로바이더가 있을 때) 세션당 한 번 자동으로 그 프로바이더에 전송됩니다. 이 자동 채움은 기본으로 켜져 있으며 설정에서 끌 수 있습니다.
Chrome 내장 AI(Prompt API)를 지원하는 브라우저에서는 외부 API 호출 없이 온디바이스 모델로 초안·CSS 변경안을 생성할 수 있습니다. 이 경우 데이터가 사용자의 기기를 벗어나지 않으며, 별도의 API 키가 필요하지 않습니다.
익명 사용량 집계
확장 프로그램은 제품 개선을 위해 익명 집계 이벤트를 수집합니다(2026년 6월 19일 시행).
| 정보 | 수집 시점 | 목적 |
|---|---|---|
| 설치(extension_installed, 확장 버전) | 신규 설치 시 | 설치 규모·버전 분포 파악 |
| 사이드 패널 열기(sidepanel_opened: 지원 페이지 여부) | 사이드 패널을 열 때 | 활성화 정도 파악 |
| 플랫폼 연결(platform_connect: 플랫폼·성공/취소/실패·실패 사유 분류) | OAuth 연결 시도 시 | 연동 플랫폼별 인기도·연결 성공·취소·실패 비율 파악, 실패가 서비스 장애인지 사용자 이탈인지 구분 |
| 플랫폼 연결 해제(platform_disconnected: 플랫폼) | 연결 해제 시 | 연동 이탈 파악 |
| 이슈 제출(issue_submitted: 플랫폼·캡처 모드·제출 결과·영상 구간 자르기 사용 여부와 그 출처·Jira 제출 시 기본 프로젝트를 바꿨는지 여부·Jira 제출 시 스프린트 선택 칸이 노출됐는지와 스프린트를 실제로 골랐는지 여부) | 이슈 제출 시 | 플랫폼별 사용량·캡처 방식 우선순위·제출 성공·실패 비율·구간 자르기 사용률(30초 리플레이/일반 녹화 구분)·제출 시점 프로젝트 전환 사용률·스프린트 기능 노출 대비 실제 사용률 파악 |
이 이벤트들은 위 분류 문자열만 담으며, 이슈 제목·본문·URL·개인 식별 정보는 일절 포함하지 않습니다. 프로젝트 전환 여부도 참/거짓 값 하나일 뿐 프로젝트 키나 이름은 포함하지 않습니다. 스프린트 관련 두 값도 마찬가지로 참/거짓일 뿐 스프린트 ID·이름·보드 정보는 포함하지 않습니다. 특히 연결 실패 사유는 미리 정해둔 분류값(인증 창 닫음, 인증 거부, 설정 누락, 네트워크 오류, 토큰 교환 실패 등) 중 하나만 전송하며, 연동 플랫폼이 돌려준 오류 메시지 원문이나 응답 본문은 포함하지 않습니다. 같은 설치를 구분하기 위해 설치 시 무작위 식별자(distinct_id)를 한 번 생성해 기기에 저장하고 이후 이벤트에 함께 보냅니다. 이 식별자는 무작위 값일 뿐 이메일·계정·IP 등 어떤 개인정보와도 연결되지 않습니다. 실제 IP 주소가 저장되지 않도록 이벤트에 IP 값을 0.0.0.0으로 실어 보내고, 위치 추정(GeoIP)도 비활성화하며($geoip_disable), 개인 프로필 생성도 비활성화합니다($process_person_profile: false). 이 집계에는 별도의 옵트아웃(off) 설정이 없습니다.
확장 프로그램은 위 항목 외에 사용자의 브라우징 기록, 쿠키, 개인 식별 정보 등을 수집하지 않습니다.
2. 정보 저장
모든 데이터는 사용자의 브라우저 내부에만 저장됩니다.
- chrome.storage.local: Jira·GitHub·Linear·Notion·GitLab·Asana·ClickUp·Slack 연동 설정(기본 프로젝트·저장소·팀·기본 담당자 등), 직전 제출값(프로젝트·담당자·CC 등 — 선택한 사람의 식별자와 표시 이름 포함), 이슈 기록, 앱 설정, LLM 프로바이더 설정 (LLM API 키는 난독화 저장), 익명 설치 식별자
- chrome.storage.session: 편집 세션(작업 중인 스크린샷·요소 before/after 이미지·영상 썸네일과 작성 중인 이슈 제목·본문·재현 환경 입력값[자동 파생된 API 호스트 포함]·첨부 파일 목록·연동 입력값·제출 결과 포함), 사이드 패널을 유지한 채 이동한 가장 최근 페이지 주소(다음 이동이 다른 사이트인지 판정하는 기준이며, 패널을 유지하는 이동마다 갱신됩니다), 사이드 패널이 활성화된 탭 목록, 임시 로그 정리 시각 (브라우저 종료 시 자동 삭제)
- IndexedDB: 영상 녹화 파일, 스크린샷 이미지, 네트워크 로그, 콘솔 로그, 사용자 액션 로그, 에디터 인라인 이미지(어노테이션 전 원본 백업 포함), 사용자 첨부 파일 (로컬 기기 한정)
- 방문한 페이지의 sessionStorage: 디버그 캡처를 시작한 적이 있는 탭인지 표시하는 플래그 1개(값
1). 페이지 로드 극초반의 로그를 놓치지 않기 위한 표시이며, 탭을 닫으면 사라집니다. - 메모리(임시): 30초 리플레이 프레임 버퍼 — 디스크에 저장되지 않으며, 사용자가 캡처를 실행하는 시점에만 영상으로 인코딩되어 IndexedDB에 저장됩니다.
외부 서버에 사용자 데이터를 저장하지 않습니다.
3. 외부 전송
확장 프로그램은 아래 서비스에만 데이터를 전송합니다.
| 대상 | 전송 내용 | 목적 |
|---|---|---|
Jira REST API (*.atlassian.net·api.atlassian.com, API Token 모드에서 사용자가 지정한 사이트 URL, Jira가 발급한 media/CDN URL) | 이슈 본문, 스크린샷, 영상, 디버그 로그 | 이슈 생성·첨부 및 업로드된 첨부의 media ID 확인 |
GitHub REST API (api.github.com) | 이슈 본문, 라벨, 담당자 | 이슈 생성 |
GitHub (api.github.com, github.com, 및 GitHub가 발급한 업로드 URL[AWS S3]) | 스크린샷, 영상, 디버그 로그 | 파일 업로드 (github.com 업로드는 브라우저에 이미 로그인된 github.com 세션을 사용하며, 열려 있는 github.com 탭이 없으면 업로드 동안 배경 탭을 잠시 열었다 닫습니다) |
Linear GraphQL API (api.linear.app, 첨부 파일은 Linear가 발급한 업로드 URL) | 이슈 본문, 스크린샷, 영상, 디버그 로그 | 이슈 생성 및 첨부 |
Notion REST API (api.notion.com) 및 Notion이 발급한 파일 업로드 URL | 페이지 본문, 스크린샷, 영상, 디버그 로그 | 페이지 생성 및 첨부 |
GitLab REST API (gitlab.com 또는 사용자 지정 self-managed 인스턴스) | 이슈 본문, 라벨, 담당자, 스크린샷, 영상, 디버그 로그 | 이슈 생성 및 파일 업로드 |
Asana REST API (app.asana.com) | 작업(task) 본문, 워크스페이스·프로젝트·담당자, 스크린샷, 영상, 디버그 로그 | 작업 생성 및 파일 업로드 |
ClickUp REST API (api.clickup.com) | 작업(task) 본문, 워크스페이스·스페이스·리스트·담당자, 스크린샷, 영상, 디버그 로그 | 작업 생성 및 파일 업로드 |
Slack Web API (slack.com 및 Slack이 발급한 파일 업로드 URL) | 메시지 본문(제목·상세), 멘션 대상, 스크린샷, 영상, 디버그 로그, 승격 시 트래커 이슈 링크 | 사용자 본인 워크스페이스의 채널/DM에 메시지·첨부 전송 및 트래커 승격 시 원 메시지 스레드에 이슈 링크 자동 댓글 |
| 연동 플랫폼이 아바타 주소로 지정한 이미지 호스트 (플랫폼 자체 CDN 또는 Gravatar·Google 등 제3자 호스트) | 이미지 GET 요청(접속에 수반되는 IP 등 표준 요청 메타데이터 포함, 자격 증명 제외) | 담당자·CC·멘션 후보 목록의 아바타 표시 |
| 현재 페이지가 참조하는 cross-origin 스타일시트를 호스팅하는 HTTP(S) origin | 스타일시트 URL에 대한 GET 요청(URL의 경로·쿼리와 표준 요청 메타데이터 포함, 쿠키 등 자격 증명은 제외) | 요소 picker 세션이 시작될 때, 그리고 세션 도중 페이지가 스타일시트를 추가·교체할 때마다(사이드 패널을 다시 열어 선택을 복원한 세션 포함) 브라우저 CSSOM이 노출하지 않는 cross-origin CSS 원문을 기기 안에서 읽어 hover 툴팁·스타일 편집의 스타일 값·디자인 토큰 이름을 보강. 페이지가 제공한 URL은 정적 SSRF 가드를 거쳐 loopback·사설·link-local 등 공개되지 않은 리터럴 주소 대역을 거부하며 redirect는 따르지 않음 |
| OAuth 프록시 서버 | OAuth 인가 코드, 토큰 갱신 요청(리프레시 토큰) | 토큰 교환 (Jira, GitHub, Notion, Asana, ClickUp, Slack) |
| 사용자 지정 LLM 프로바이더 (AI 초안) | 이슈 본문 초안, 페이지 URL·제목, 스타일링 모드에서 수정한 복수 요소의 selector·태그명·프레임 번호·스타일 정보, 단일 요소 리포트의 디자인 토큰, 스크린샷·해당 요소들의 before/after 이미지·본문에 삽입한 인라인 이미지 (선택적), 디버그 로그 요약 (선택적), 버그와 관련된 성공(2xx) 응답 본문의 shape 다이제스트(최상위 키 이름·값 타입만, 값은 제외. 키 이름은 마스킹되지 않으나, 이메일·UUID·맵 형태의 레코드 키는 가려집니다) (선택적), 그 매칭된 요청의 HTTP 메서드·URL 경로·상태 코드와 매칭 근거가 된 검색어 (선택적), 사용자 액션 로그 요약 (선택적 — 마스킹되지 않은 입력·선택 값이 포함될 수 있음), 사용자가 입력한 추가 지시문, 이미 작성해 둔 초안 | AI 초안 생성 |
| 사용자 지정 LLM 프로바이더 (AI 스타일링) | 선택 요소의 태그·CSS selector·클래스 목록·현재 지정 스타일·디자인 토큰·레이아웃 계산 스타일(display·position·width·margin 등)·브라우저 뷰포트 크기, 사용자가 입력한 지시문 | CSS 변경안 생성 |
익명 분석 호스트 (in.bug-shot.com) — BugShot 소유 도메인이지만 DNS CNAME으로 PostHog Cloud에 직결된 리버스 프록시이며, 이벤트를 수신·저장하는 주체는 PostHog입니다 (BugShot 서버는 이 경로에 없습니다) | 익명 집계 이벤트 (설치·패널 열기·플랫폼 연결/해제·이슈 제출) | 익명 사용량 집계 |
OAuth 프록시 서버는 토큰 교환만 중계하며, 요청 내용(인가 코드·토큰·이슈 데이터)을 저장하거나 로깅하지 않습니다. 다만 남용 방지를 위해 IP 주소별 요청 횟수만 60초 단위로 임시 집계하며, 이 집계에는 요청 내용이 포함되지 않고 시간 창이 지나면 사라집니다. Linear·GitLab은 PKCE 방식으로 프록시 없이 직접 토큰을 교환합니다.
사용자가 "파일 첨부" 기능으로 직접 선택한 로컬 파일은 이슈(작업) 제출 시 위 각 플랫폼(Jira·GitHub·Linear·Notion·GitLab·Asana·ClickUp)에 본문 첨부로, Slack의 경우 메시지 스레드에 함께 업로드됩니다. 이 기능은 기본적으로 꺼져 있으며, 설정에서 활성화한 경우에만 동작합니다.
GitLab self-managed 인스턴스에 PAT로 연결할 경우, 사용자가 입력한 인스턴스 주소(임의 origin)로 직접 통신합니다. 이 접근은 설치 시 부여되는 필수 광역 호스트 권한(<all_urls>)으로 커버되어 별도의 권한 요청 대화상자 없이 동작합니다.
LLM 프로바이더는 사용자가 직접 설정한 엔드포인트로만 전송됩니다. AI 초안 생성·AI 스타일링은 사용자가 명시적으로 실행할 때에만 동작하며, 재현 단계 자동 채움은 영상 캡처 후 작성 화면에 진입할 때 세션당 한 번 자동으로 동작합니다(기본 켜짐, 설정에서 끌 수 있음). 해당 호스트 접근은 필수 광역 호스트 권한(<all_urls>)으로 커버됩니다.
CC(참조) 멘션처럼 사용자를 고르는 검색에서 입력한 검색어가 플랫폼으로 전송되는 것은 Jira뿐이며(대상 위치를 고르는 필드는 예외 — 위 1-2 참조), 사용자가 선택한 멘션 대상은 이슈 본문의 일부로 함께 전송됩니다. 모두 사용자가 직접 검색·선택할 때에만 동작합니다.
4. 제3자 공유
수집한 정보를 판매하지 않습니다. 기능 수행에 필요한 경우에만 위 표의 대상으로 직접 전송합니다. 여기에는 사용자가 실행하는 이슈 제출·연동 후보 조회·AI 초안/스타일링, 설정 중 LLM 모델 목록 조회, OAuth 코드/토큰 교환, 재현 단계 자동 채움(영상 캡처 후 작성 화면 진입 시 자동 동작, 설정에서 끌 수 있음), 캡처 내용이 포함되지 않는 익명 사용량 집계가 포함됩니다. 캡처·리포트 데이터는 BugShot 서버에 공유하거나 저장하지 않습니다.
5. 데이터 삭제
- 확장 프로그램 제거:
chrome.storage데이터가 자동으로 삭제됩니다. - 미디어·로그 데이터: 브라우저 설정에서 사이트 데이터를 초기화하거나, 확장 프로그램 내 이슈 목록에서 개별 삭제할 수 있습니다.
- 일반 이슈 제출 성공: 로컬 초안 원문·페이지/스타일 정보와 이미지·영상·로그·첨부 blob은 자동 삭제하고, 제출 결과 메타데이터와 이슈 URL만 유지합니다. Slack 전송은 나중에 트래커로 승격할 수 있도록 원본을 보존하며, 승격 완료 또는 이슈 삭제 시 정리됩니다.
- 플랫폼 연동 해제: 각 플랫폼(Jira, GitHub, Linear, Notion, GitLab, Asana, ClickUp, Slack) 연동 탭에서 연결을 해제하면 저장된 자격 증명이 삭제됩니다.
- LLM 프로바이더 삭제: 설정에서 프로바이더 연결을 해제하면 저장된 설정이 삭제됩니다.
6. 권한 사용 안내
확장 프로그램 권한
| 권한 | 사용 목적 |
|---|---|
| sidePanel | 사이드 패널 UI 표시 |
| activeTab | 현재 탭의 DOM 요소 정보 수집, 화면·페이지 전체 캡처(캡처 중 페이지 자동 스크롤 포함) |
| scripting | DOM 선택·오버레이 표시를 위한 스크립트 주입, 콘솔·네트워크·액션 로그 수집 스크립트 주입(페이지의 모든 프레임), GitHub 파일 업로드를 위한 페이지 스크립트 실행 |
| storage | 설정·세션·이슈 기록 저장 |
| commands | 키보드 단축키 등록 |
| contextMenus | 우클릭 메뉴에서 사이드 패널 열기 |
| identity | OAuth 로그인 (Jira, GitHub, Linear, Notion, GitLab, Asana, ClickUp, Slack) |
| tabCapture | 탭 영상 녹화 |
| webNavigation | 페이지 이동 직전 콘솔·네트워크 로그 꼬리 보존, 새로 로드된 프레임(iframe) 감지 시 로그 수집 연결 (탭·프레임 이동 감지) |
호스트 권한
확장 프로그램의 호스트 권한은 <all_urls> 한 가지입니다.
<all_urls>(모든 사이트) — 임의 웹페이지에서 DOM 선택·화면 캡처(captureVisibleTab)·콘솔/네트워크 로그 수집을 수행하고, 사용자가 설정한 LLM 프로바이더·GitLab self-managed 인스턴스, 그리고 연결한 이슈 트래커·Slack의 API 서버 및 OAuth 프록시와 통신하기 위한 필수 권한입니다. 설치 시 부여되며, 설치 화면에 "모든 사이트의 데이터 읽기/변경"으로 표시됩니다.
별도의 플랫폼별 호스트 권한은 두지 않으며, 위의 모든 통신은 <all_urls> 권한으로 이뤄집니다. 데이터가 실제로 전송되는 외부 대상(각 플랫폼 API 서버·OAuth 프록시 등)은 "3. 외부 전송" 항목을 참고하세요.
광역 호스트 권한 (<all_urls>) 사용처
<all_urls> (모든 사이트)는 설치 시 부여되는 필수 권한입니다(설치 화면에 "모든 사이트의 데이터 읽기/변경"으로 표시). 임의 웹페이지를 대상으로 동작하는 확장의 핵심 기능에 필요하며, 별도의 런타임 권한 요청 대화상자는 없습니다. 주요 사용처:
- DOM 선택·스타일 수정: 임의 웹페이지의 요소를 골라 정보를 수집하고 스타일을 미리보기
- 화면·페이지 전체 캡처·30초 리플레이: 현재 탭 화면 캡처(
captureVisibleTab)는 일반 호스트 권한으로는 동작하지 않고<all_urls>를 요구합니다. 페이지 전체 캡처는 같은 API를 페이지를 스크롤하며 여러 번 호출해 화면 밖 영역까지 이어 붙입니다. 다른 사이트로 이동해도 사이드 패널이 닫히지 않고 캡처·로그 수집이 이어집니다. - 콘솔·네트워크 로그 수집: 임의 페이지(및 iframe)에서 로그 기록
- AI 초안·AI 스타일링·재현 단계 자동 채움: 사용자가 직접 설정한 LLM 프로바이더 엔드포인트로 전송 (AI 초안·AI 스타일링은 명시적으로 실행할 때, 재현 단계 자동 채움은 영상 캡처 후 작성 화면 진입 시 자동 — 기본 켜짐, 설정에서 끌 수 있음)
- GitLab self-managed: 사용자가 입력한 인스턴스(임의 origin)로 PAT 통신
- 스타일 값 보강: 요소 picker 세션이 시작될 때, 그리고 세션 도중 페이지가 스타일시트를 추가·교체할 때마다(다크모드 토글·SPA 라우트 이동 등. 사이드 패널을 다시 열어 선택을 복원한 세션도 포함) hover 툴팁과 선택 후 '지정된(author)' 스타일을 정확히 표시하기 위해, 페이지가 참조하는 외부 스타일시트(cross-origin CSS 파일)를 백그라운드에서 자격 증명 없이(
credentials:omit) 읽어옵니다. 공개 http(s) 호스트만 대상이며(loopback·내부망·사설 IP는 차단), 받은 CSS는 기기 내에서만 사용되고 제3자로 전송하지 않습니다.
대부분의 기능은 사용자가 직접 켜거나 실행할 때만 데이터를 전송합니다(재현 단계 자동 채움은 예외로 기본 켜짐 상태에서 자동으로 동작하며, 설정에서 끌 수 있습니다). 권한 자체는 설치 시 상시 부여되지만, 사용자는 Chrome 설정(확장 프로그램 > BugShot > 사이트 액세스)에서 접근 범위를 좁힐 수 있습니다.
7. 변경 사항
본 방침이 변경될 경우, 이 페이지를 통해 고지합니다.
8. 문의
개인정보 관련 문의: ox501501@gmail.com