사용자가 버튼을 클릭하면 버그 스크린샷을 찍고 아무것도 설치하지 않고 나에게 보냅니다

모든 웹 애플리케이션의 생명에는 사용자가 무언가 깨진 것을 만나는 순간이 있습니다. 클릭해도 아무 일도 하지 않는 버튼입니다. 특정 화면 크기에서 무너지는 레이아웃입니다. 자신의 오류 메시지를 삼키는 양식입니다. 사용자가 화면을 혼란스럽게 보고 다음 두 가지 중 하나를 합니다. 대부분은 단순히 나가서 다시 돌아오지 않습니다. 드물게 일부는 "당신의 사이트에 뭔가 문제가 있습니다"라는 메시지를 작성하는 데 시간을 들입니다. 그 메시지는 컨텍스트 없이 도착하고, 무엇이 일어났는지에 대한 설명 없이, 어떤 브라우저나 장치가 관련되어 있는지에 대한 표시 없이, 그리고 실제 문제를 보여주는 스크린샷 없이 도착합니다. 개발자가 그 메시지를 읽고, 문제를 재현하려고 시도하고, 실패하고, 버그가 다음 사용자에게 영향을 미칠 때까지 수정되지 않은 채 남아있습니다. 이 사이클은 인터넷 전체에서 반복되고, 근본 원인은 사용자의 게으름이 아닙니다. 근본 원인은 마찰입니다.

컴퓨터에서 스크린샷을 찍으려면 운영 체제마다 다른 올바른 키보드 단축키를 알아야 합니다. Windows에서는 Print Screen이거나, 활성 창의 경우 Alt plus Print Screen이거나, 스니핑 도구의 경우 Windows 키 plus Shift plus S일 수 있습니다. Mac에서는 Command plus Shift plus 3, 또는 4, 또는 5이며, 각각은 약간 다른 결과를 생성합니다. 휴대폰에서 제스처는 두 개의 물리적 버튼을 동시에 누르는 것을 포함하며, 이는 절반의 시간 동안 실수로 화면을 잠급니다. 스크린샷을 촬영한 후에는 파일 시스템에서 찾아 이메일에 첨부하거나 지원 양식에 붙여넣고 전송해야 합니다. 이러한 각 단계는 사용자가 버그를 보고할 가치가 없다고 결정하는 또 다른 지점입니다. 결과는 개발자가 사용자가 실제로 마주치는 100개 버그 중 약 1개의 보고서를 받는다는 것입니다.

이 좌절에서 나온 솔루션은 부끄러울 정도로 간단합니다. 작은 버튼이 페이지에 나타납니다. 사용자가 클릭하면 서버는 사용자가 보고 있는 정확한 페이지의 스크린샷을 캡처하고 보고서에 첨부합니다. 브라우저 확장 프로그램이 필요하지 않습니다. 기억할 키보드 단축키가 없습니다. 찾아서 업로드할 파일이 없습니다. 한 번의 클릭, 한 개의 스크린샷, 한 개의 보고서. 사용자가 무엇이 잘못되었는지 설명하는 문장 1~2개를 추가하면, 개발자는 설명과 함께 깨진 페이지의 완벽하게 명확한 이미지를 받습니다. 이것이 전체 워크플로우이며, 버그 보고가 도착하는 방식을 변경했습니다.

브라우저 확장 프로그램이 이 문제를 해결하지 못한 이유

명백한 첫 번째 반응은 이미 이 목적을 위한 브라우저 확장 프로그램이 존재한다는 것입니다. Chrome 확장 프로그램, Firefox 추가 기능 및 Safari 플러그인으로 사용 가능한 스크린샷 도구가 수십 개 있습니다. 그 중 일부는 주석 달기 기능, 자동 업로드 및 프로젝트 관리 플랫폼과의 통합을 갖춘 매우 좋습니다. 하지만 모두 같은 기본적인 결함을 공유합니다. 버그가 발생하기 전에 무언가를 설치해야 합니다. 내일 방문할 웹사이트에 깨진 레이아웃이 있을 수 있다는 가능성에 대비하여 누구도 버그 보고 확장 프로그램을 선제적으로 설치하지 않습니다. 확장 프로그램은 특정 도구를 설치하도록 지시받을 수 있는 QA 팀과 내부 테스터를 위한 문제를 해결합니다. 처음으로 방문할 수 있는 웹사이트에서 버그를 만나는 일반 대중을 위해서는 절대적으로 아무 것도 하지 않습니다.

신뢰 문제도 있습니다. 버그를 보고하기 위해 브라우저 확장 프로그램을 설치하도록 요청하면 상호 작용에서 거슬리는 변화가 발생합니다. 사용자가 사이트에 와서 무언가를 완료하려고 했고, 그것이 깨져 있다는 것을 발견했으며, 이제 타사 소프트웨어를 설치하도록 요청받고 있습니다. 그 요청은 많은 사용자에게 의심을 정당하게 불러일으킬 것이며, 준수하려는 사람들도 확장 프로그램 스토어 탐색, 권한 부여 및 도구 작동 방식 파악의 오버헤드에 직면합니다. 확장 프로그램이 설치되는 시간까지 원래 버그가 더 이상 재현 가능하지 않거나 사용자가 경쟁자로 이동했을 수 있습니다. 버그 보고를 캡처하는 창은 좁으며, "무언가 잘못되었습니다"와 "보고서 전송됨" 사이의 간격을 확대하는 모든 것은 보고서가 전송되지 않음을 의미합니다.

html2canvas와 같은 클라이언트측 스크린샷 라이브러리는 다른 각도에서 이를 해결하려고 시도했습니다. 이러한 JavaScript 라이브러리는 DOM을 캔버스 요소로 렌더링하여 서버 관여 없이 스크린샷을 효과적으로 생성합니다. 간단한 레이아웃에서는 합리적으로 잘 작동하지만 복잡한 CSS, 임베드된 iframe, 크로스 오리진 이미지, 캔버스 요소 및 사용자 지정 글꼴로 빠르게 붕괴됩니다. 결과 이미지는 사용자가 실제로 보는 것과 달라 보이는 경우가 많으며, 이는 목적을 완전히 무효화합니다. 실제 페이지와 일치하지 않는 스크린샷이 포함된 버그 보고서는 스크린샷이 없는 것보다 나쁘니까, 개발자를 실제 문제가 숨겨져 있는 동안 존재하지 않는 시각적 문제를 추적하게 하기 때문입니다.

서버측 스크린샷과 사용자가 보는 것을 캡처하는 방법

screenshots.yeb.to의 접근 방식은 완전히 다른 경로를 취합니다. 클라이언트측에서 페이지를 재구성하려고 시도하는 대신, 서버는 URL을 수신하고 제어된 환경에서 실행되는 실제 브라우저 엔진을 사용하여 렌더링합니다. 스크린샷은 페이지를 로드하고, JavaScript를 실행하고, CSS를 적용하고, 글꼴을 렌더링하고, 결과를 픽셀 완벽한 이미지로 캡처하는 실제 Chromium 인스턴스에 의해 수행됩니다. 이는 스크린샷이 실제 브라우저가 표시하는 것과 정확히 같아 보인다는 것을 의미합니다. 왜냐하면 실제 브라우저가 표시하는 것이기 때문입니다.

사용자가 버그 보고 버튼을 클릭하면 현재 페이지 URL이 사용자의 뷰포트 크기, 장치 픽셀 비율 및 관련 상태 매개변수에 대한 메타데이터와 함께 서버로 전송됩니다. 서버는 이러한 매개변수와 최대한 일치하도록 구성된 헤드리스 브라우저 세션을 시작합니다. 페이지를 로드하고, 모든 자산이 렌더링될 때까지 대기한 후, 스크린샷을 캡처합니다. 결과는 저장되고 버그 보고서에 연결되어 개발자에게 사용자가 버튼을 클릭한 시점의 페이지에 대한 정확한 시각적 기록을 제공합니다. 전체 프로세스는 몇 초가 걸리므로, 사용자가 스크린샷이 백그라운드에서 생성되는 동안 설명을 추가할 수 있을 정도로 빠릅니다.

인정할 가치가 있는 미묘한 차이점들이 있습니다. 서버측 스크린샷은 사용자의 화면에 있는 정확한 픽셀이 아니라 서버에 보이는 대로 페이지를 캡처합니다. 버그가 브라우저 특정 렌더링 특성, 캐시된 콘텐츠 또는 로컬로 저장된 상태로 인해 발생하는 경우, 서버 캡처가 정확한 시각적 아티팩트를 재현하지 못할 수 있습니다. 하지만 실제로 사용자가 보고하는 버그의 대부분은 누가 페이지를 로드하든 일관성 있는 레이아웃 문제, 깨진 이미지, 누락된 콘텐츠 또는 기능 장애입니다. 이러한 경우, 서버측 스크린샷은 클라이언트측 스크린샷과 구별할 수 없으며, 마찰의 대폭적인 감소로 인해 거래는 가치가 있습니다.

애플리케이션을 변경하지 않고 버튼 포함

통합은 의도적으로 최소한입니다. 작은 JavaScript 스니펫이 버튼 컴포넌트를 로드하며, 이는 호스트 애플리케이션의 디자인 시스템과 일치하도록 스타일을 지정할 수 있습니다. 버튼은 페이지의 모서리에 떠 있으며, 눈에 띄지만 방해가 되지 않습니다. 클릭하면 경량 오버레이가 열리며, 여기서 사용자는 짧은 설명을 입력하고 선택적으로 문제가 발생한 페이지의 영역을 강조할 수 있습니다. 백그라운드에서 스니펫은 현재 URL을 screenshot API로 전송하며, 이는 페이지를 캡처하고 이미지 URL을 반환합니다. 스크린샷, 설명, URL 및 기본 브라우저 메타데이터가 포함된 보고서는 개발자가 구성한 모든 대상(이메일 주소, Slack 웹훅, 프로젝트 관리 도구 또는 사용자 지정 엔드포인트)으로 전달됩니다.

전체 통합은 애플리케이션의 백엔드를 변경할 필요가 없습니다. 설치할 SDK가 없고, 구성할 미들웨어가 없으며, 수정할 데이터베이스 스키마가 없습니다. 스니펫은 독립적으로 작동하여 screenshot API 및 구성된 보고서 대상하고만 통신합니다. 이는 WordPress 블로그, React 단일 페이지 애플리케이션, 정적 HTML 사이트 또는 레거시 PHP 애플리케이션에 동일한 용이성으로 떨어질 수 있음을 의미합니다. 버그 보고를 추가하기로 결정한 때부터 사이트에 라이브 상태로 만드는 데 걸리는 시간은 스프린트가 아닌 분으로 측정됩니다.

더 깊은 통합을 원하는 개발자의 경우, API를 서버측 코드에서 직접 호출할 수 있습니다. 이는 처리되지 않은 예외가 발생할 때마다 자동으로 스크린샷을 캡처하거나 중요한 페이지의 주기적인 스크린샷을 취하고 시각적 회귀를 감지하기 위해 기준선과 비교하는 것과 같은 가능성을 열어줍니다. 하지만 사용자가 단일 클릭으로 버그를 보고할 수 있도록 하는 기본 사용 사례의 경우, JavaScript 스니펫은 서버측 변경 없이 모든 것을 처리합니다.

버그 보고가 실제로 도착할 때 변경되는 사항

버그 보고 품질의 변환은 극적입니다. 버튼을 구현하기 전에 일반적인 버그 보고서는 이메일의 애매한 문장이었습니다. "페이지가 이상해 보입니다." "체크아웃이 깨졌습니다." "저장하려고 했을 때 뭔가 일어났습니다." 이러한 보고서에는 여러 번의 후속 질문이 필요했으며, 사용자는 종종 인내심을 잃고 응답을 멈췄습니다. 버튼을 구현한 후, 보고서는 정확히 무엇이 잘못되었는지 보여주는 명확한 스크린샷과 함께 도착하며, 페이지, 뷰포트 크기 및 발생 시간을 식별하는 메타데이터가 함께 제공됩니다. 개발자는 스크린샷을 보고 왕복 없이 즉시 문제를 이해할 수 있습니다.

보고서의 양도 크게 증가합니다. 이메일을 작성하거나 지원 양식을 작성하지 않을 사용자는 버튼을 클릭하고 세 단어를 입력합니다. "메뉴가 콘텐츠와 겹칩니다"는 세상에서 가장 자세한 버그 보고서는 아니지만, 모바일 뷰포트의 주 콘텐츠 영역과 겹치는 탐색 메뉴를 보여주는 스크린샷과 결합하면, 개발자에게 문제를 재현하고 수정하기 위해 필요한 모든 것을 알려줍니다. 낮은 마찰과 풍부한 컨텍스트의 조합은 버그가 더 빨리 보고되고, 더 빨리 수정되며, 더 안정적으로 검증됨을 의미합니다. 배포 후 3주 후에 중요한 레이아웃 버그를 발견하는 날은 대부분 이러한 종류의 피드백 메커니즘을 배포하는 모든 애플리케이션에 대해 끝났습니다.

명백하지 않지만 똑같이 가치 있는 2차 이점이 있습니다. 스크린샷 아카이브는 애플리케이션의 시각적 역사가 됩니다. 모든 보고서는 사용자가 문제를 마주친 시점에서 페이지가 정확히 어떻게 보였는지 보여주는 시간의 순간을 캡처합니다. 몇 주 몇 달이 지나면서 이 아카이브는 패턴을 드러냅니다. 특정 페이지가 새 배포가 나갈 때마다 깨질 수 있습니다. 모바일 사용자가 데스크톱 사용자보다 3배 더 높은 속도로 문제를 보고할 수 있습니다. 특정 브라우저 버전이 지속적으로 레이아웃 이상을 생성할 수 있습니다. 이러한 패턴은 텍스트 전용 버그 보고서에서는 보이지 않지만 타임스탬프가 있는 스크린샷 갤러리를 탐색할 때 즉시 명백해집니다.

자주 묻는 질문

사용자가 버그 보고 버튼을 사용하기 위해 아무것도 설치해야 합니까?

설치가 필요하지 않습니다. 버튼은 작은 JavaScript 스니펫을 사용하여 웹 페이지에 직접 포함됩니다. 사용자가 클릭하고, 짧은 설명을 입력하고, 보고서가 자동으로 전송됩니다. 사용자 측에는 브라우저 확장 프로그램, 다운로드 또는 가입이 없습니다.

서버측 스크린샷은 사용자가 실제로 보는 것과 얼마나 정확합니까?

서버측 스크린샷은 실제 Chromium 브라우저 엔진에 의해 생성되므로 HTML, CSS, JavaScript 및 글꼴을 정확하게 렌더링합니다. 대부분의 레이아웃 버그, 누락된 콘텐츠 및 기능 문제의 경우 스크린샷은 사용자가 보는 것과 일치합니다. 로컬로 캐시된 콘텐츠 또는 브라우저 특정 렌더링 특성을 포함한 에지 케이스는 약간 다를 수 있습니다.

웹사이트의 디자인과 일치하도록 버튼의 스타일을 지정할 수 있습니까?

네. 버튼 컴포넌트는 색상, 위치, 크기 및 레이블을 애플리케이션의 디자인 시스템에 맞게 사용자 지정할 수 있는 스타일 지정 매개변수를 허용합니다. 뷰포트의 모든 모서리에 떠 있거나 페이지의 특정 요소에 고정될 수 있습니다.

버그 보고서에 어떤 정보가 포함되어 있습니까?

각 보고서에는 스크린샷 이미지, 사용자의 입력 설명, 페이지 URL, 뷰포트 치수, 장치 픽셀 비율, 타임스탬프 및 기본 브라우저 식별이 포함됩니다. 개발자는 필요한 경우 추가 메타데이터 필드를 구성할 수 있습니다.

스크린샷을 캡처하는 데 얼마나 걸립니까?

스크린샷은 페이지의 복잡성에 따라 일반적으로 2~5초 내에 생성됩니다. 프로세스는 사용자가 설명을 입력하는 동안 백그라운드에서 실행되므로 대부분의 경우 사용자가 작성을 마칠 때쯤 스크린샷이 준비됩니다.

Jira 또는 Trello와 같은 프로젝트 관리 도구와 통합할 수 있습니까?

보고서는 HTTP 요청을 허용하는 모든 엔드포인트로 전달될 수 있으며, 여기에는 API 또는 웹훅 통합을 통한 대부분의 프로젝트 관리 도구가 포함됩니다. 일반적인 구성에는 Slack 채널, 이메일 주소, Jira 프로젝트 및 사용자 지정 내부 대시보드가 포함됩니다.