데스크톱 전용 서비스의 기기 판별 로직 개선
Work Experience
요약
- 분류
- Work Experience
- 회사
- 주식회사 팀마파
- 기간
- 2026.04
- 역할
- Frontend Engineer
갤럭시 태블릿의 데스크톱 모드가 Linux PC로 오인되는 문제를 Sentry 환경 데이터와 복수 신호 기반 판별 로직으로 해결했습니다.
하이라이트
- Sentry 기반 실제 사용자 환경 분석
- 단일 User-Agent 의존성 개선
- 화면·터치·GPU 신호를 조합한 휴리스틱 판별
기술TypeScript · Sentry · Browser APIs · WebGL
문제·판단·구현 과정 읽기목차
한눈에 보기
MAC 주소 수집과 부정 방지 프로그램 실행을 위해 데스크톱 환경만 허용하는 서비스에서, 갤럭시 태블릿이 데스크톱으로 잘못 판별되는 문제가 발생했습니다.
실제 사용자의 실행 환경을 Sentry로 확인한 결과 삼성 브라우저의 데스크톱 모드가 User-Agent를 Linux x86_64 형태로 변경하고 있었습니다. User-Agent만으로 기기를 구분하는 기존 방식을 개선해 여러 브라우저 신호를 조합하는 판별 로직을 구현했습니다.
문제 상황
서비스는 데스크톱 환경에서만 제공되어야 했지만, 갤럭시 태블릿에서 브라우저의 ‘데스크톱 사이트로 보기’를 사용할 경우 모바일 기기가 Linux 데스크톱으로 분류됐습니다.
이로 인해 데스크톱에서만 실행할 수 있는 기능으로 태블릿 사용자가 진입할 수 있었습니다.
원인 분석
행정 담당자의 원격 지원을 통해 문제 사용자를 확인한 뒤 Sentry에서 해당 사용자의 브라우저와 디바이스 환경을 수집했습니다.
분석 결과 삼성 디바이스 브라우저의 데스크톱 모드에서 User-Agent가 Linux x86_64 형태로 변경됐고, 기존 로직은 이를 Linux PC로 판단하고 있었습니다.
이 문제를 통해 User-Agent 문자열이 사용자가 선택한 브라우저 모드에 따라 변경될 수 있으며, 실제 하드웨어 유형을 단독으로 증명하지 못한다는 한계를 확인했습니다.
판단
새로운 판별 기준도 하나의 값에만 의존하면 다른 경계 환경에서 같은 문제가 반복될 수 있다고 판단했습니다.
다음 조건을 함께 고려했습니다.
- 화면과 뷰포트 크기
- 터치 이벤트 지원 여부
- 최대 터치 포인트
- WebGL에서 확인 가능한 GPU 정보
터치가 가능한 노트북처럼 일부 조건만 모바일 기기와 유사한 환경도 있기 때문에, 각 값을 단독 기준으로 사용하지 않고 여러 조건이 함께 충족될 때만 태블릿 또는 모바일 환경으로 분류했습니다.
구현
판별 과정을 단계적으로 구성했습니다.
- 기존 User-Agent에서 명확하게 확인할 수 있는 환경을 우선 분류
- 화면과 뷰포트 크기로 휴대형 기기 가능성 확인
- 터치 지원 여부와 최대 터치 포인트 확인
- 필요한 경우 WebGL GPU 정보를 보조 신호로 사용
- 여러 조건을 조합해 최종 분류
WebGL 정보는 브라우저와 개인정보 보호 설정에 따라 제한될 수 있으므로 유일한 기준으로 사용하지 않았습니다.
결과
- 데스크톱 모드로 접속한 문제 갤럭시 태블릿을 정상적으로 구분
- 단일 User-Agent 값에 의존하던 판별 구조 개선
- 태블릿, 터치 노트북 등 경계 디바이스를 고려할 수 있는 예외 대응 범위 마련
회고
브라우저 환경 정보는 실제 하드웨어를 완벽하게 식별하기 위한 값이 아닙니다. 따라서 이 로직은 완전한 기기 식별이 아니라 서비스 요구사항을 만족하기 위한 휴리스틱 판별입니다.
향후에는 허용·차단 결과만 기록하는 데 그치지 않고 각 판별 신호와 최종 판단을 함께 관찰할 수 있도록 구성하면 새로운 예외 환경을 더 빠르게 분석할 수 있습니다.
판별 과정
User-Agent 우선 분류
기존 User-Agent에서 명확하게 확인할 수 있는 환경을 먼저 분류합니다.
화면·뷰포트 크기
화면과 뷰포트 크기로 휴대형 기기 가능성을 확인합니다.
터치 지원
터치 이벤트 지원 여부와 최대 터치 포인트를 확인합니다.
WebGL GPU 정보
필요한 경우 WebGL에서 확인 가능한 GPU 정보를 보조 신호로 사용합니다.
* 브라우저와 개인정보 보호 설정에 따라 제한될 수 있어 유일한 기준으로 사용하지 않았습니다.
최종 분류
여러 조건이 함께 충족될 때만 태블릿 또는 모바일 환경으로 분류합니다.