본문으로 건너뛰기
CheckItWorks

FPS 테스트

10초 동안 실행되며 계속 애니메이션됩니다.

게임이나 스크롤 화면은 수치상으로는 매끄러워 보여도 실제로는 손끝에서 뚝뚝 끊길 수 있습니다 — 평균 FPS는 바로 이런 '끊김'을 만드는 드롭 프레임을 감춰버립니다. 이 무료 도구는 브라우저에서 바로 10초간 프레임 타임을 측정해, 실제 체감을 설명해주는 수치들을 보여줍니다: 평균 FPS, 1% 로우, 프레임 타임 백분위수, 잭 수, 그리고 디스플레이의 추정 재생 빈도입니다.

작동 방식

  1. 백그라운드의 무거운 작업 모두 종료하기. 다운로드를 일시 중지하고, 무거운 다른 탭과 앱을 닫은 뒤 이 탭에 포커스를 맞추세요 — 백그라운드 부하는 이 테스트가 측정하는 것과 동일한 프레임을 두고 경쟁합니다.
  2. 시작을 클릭하고 워밍업 기다리기. 처음 몇 프레임은 자동으로 제외됩니다. 막 시작된 애니메이션이 자리 잡기 전이라 대표성이 없기 때문입니다.
  3. 바와 프레임 타임 스트립 지켜보기. 화면을 가로지르는 바와 그 아래 스트립이 바로 측정 대상 그 자체입니다 — 눈에 띄는 튐이나 스파이크는 디스플레이 오류가 아니라 실제로 드롭된 프레임입니다.
  4. 10초간 측정이 끝날 때까지 기다리기. 테스트는 정확히 10초 동안 실행됩니다. 1% 로우와 백분위수가 운 좋은(혹은 나쁜) 한 순간이 아니라 충분한 프레임 수를 바탕으로 한 안정적인 통계가 되도록 하기 위해서입니다.
  5. 평균, 1% 로우, 잭 수 확인하기. 평균은 가장 눈에 띄는 수치지만, 실제로 어떻게 느껴졌는지는 보통 1% 로우와 잭 수가 더 정직하게 알려줍니다.
  6. 추정 재생 빈도와 비교하기. 결과는 디스플레이의 추정 상한 대비로 평가됩니다 — 58fps는 60Hz 화면에서는 훌륭하지만 144Hz 화면에서는 평범한 수치입니다.

이 테스트가 프레임 속도를 측정하는 방식

브라우저가 그리는 모든 프레임은 requestAnimationFrame을 거칩니다. 이는 다음 리페인트 직전에 코드를 호출하며 정확한 타임스탬프를 전달하는 브라우저 API입니다. 이 테스트는 연속된 타임스탬프 사이의 간격을 측정합니다 — 이 간격이 바로 한 프레임이 화면에 도달하는 데 걸린 실제 물리적 시간이며, 초당 프레임 수를 단순히 세는 것보다 훨씬 정직한 수치입니다.

  • 처음 몇 프레임은 제외됩니다 — 막 시작된 애니메이션, 텍스처 업로드, 레이아웃 안정화 과정이 모두 초기 프레임을 대표성 없게 만들기 때문입니다.
  • 캔버스를 가로지르는 바와 그 아래의 프레임 타임 스트립은 측정에 사용되는 바로 그 루프 안에서 그려집니다 — 눈에 보이는 것이 곧 측정되는 대상이며, 별도로 실행되는 다른 애니메이션이 아닙니다.
  • 테스트는 정확히 10초간 진행됩니다. 드물게 발생하는 끊김이 노이즈에 묻히거나 지나치게 짧은 표본을 왜곡시키지 않고 실제 통계로 드러날 만큼 충분한 길이입니다.

평균 FPS vs. 1% 로우 vs. 프레임 타임: 각 수치의 의미

단일 평균값은 드러내는 것보다 감추는 것이 더 많습니다. 9초 동안 매끄럽게 진행되다가 1초간 멈춰버린 테스트도 평균을 내면 여전히 괜찮은 수치로 나올 수 있습니다 — 이 테스트가 하나가 아니라 네 가지 수치를 함께 보여주는 이유가 바로 여기에 있습니다.

  • 평균 FPS: 전체 프레임 수를 전체 시간으로 나눈 값입니다. 읽기는 쉽지만, 매끄러운 다수가 거친 소수를 가려버리기도 쉽습니다.
  • 1% 로우: 가장 느린 1%의 프레임만을 대상으로 한 평균 프레임 속도입니다. 평균보다 실제로 체감하는 '끊김'에 훨씬 가깝습니다.
  • 프레임 타임 백분위수(p50/p95/p99): 일반적인 프레임이 걸린 시간과, 가장 나쁜 5% 또는 1%의 프레임만 도달한 시간을 비교합니다 — 그 차이가 곧 일관성을 직접적으로 나타내는 척도입니다.
  • 잭 수: 디스플레이의 프레임 예산보다 눈에 띄게 오래 걸린 프레임의 개수입니다 — 사람의 눈이 실제로 끊김으로 인지할 수 있는 프레임입니다.

평균 FPS가 감추는 끊김의 원인

평균은 멀쩡한데 1% 로우가 낮거나 잭 수가 높다면, 거의 항상 하드웨어의 한계가 아니라 간헐적으로 발생하는 문제를 가리킵니다.

  • 백그라운드 탭과 앱이 CPU/GPU를 두고 경쟁하는 경우, 특히 자체적으로 렌더링이나 동영상 디코딩을 하는 프로그램.
  • 브라우저의 하드웨어 가속이 꺼져 있어 합성 작업이 오롯이 CPU에만 맡겨진 경우.
  • 특히 Windows 업데이트 이후 오래되었거나 맞지 않는 GPU 드라이버.
  • 노트북의 발열 스로틀링 — 테스트나 게임을 오래 실행할수록 끊김이 심해지다가 잠시 쉬면 회복된다면 열 문제일 가능성이 큽니다.
  • CPU/GPU 클럭을 제한하는 절전 모드 — 배터리로 구동 중인 노트북에서 흔히 나타납니다.
  • 모든 페이지에 스크립트를 주입하는 브라우저 확장 프로그램 — 프레임마다 작지만 실질적인 비용을 더합니다.

브라우저가 재생 빈도를 직접 읽을 수 없는 이유 (그리고 "추정"의 의미)

디스플레이의 재생 빈도를 직접 알려주는 웹 API는 없습니다 — 호출할 수 있는 navigator.refreshRate 같은 것은 존재하지 않습니다. 대신 이 도구는 화면이 그려지는 리듬 자체에서 재생 빈도를 추정합니다. 프레임이 고르게 도착하면 대부분 하나의 간격 주위에 촘촘히 모이는데, 그 간격이 거의 확실히 디스플레이의 실제 프레임 예산입니다.

  • 높은 신뢰도: 대다수의 프레임이 일반적인 재생 빈도(60/75/90/100/120/144/165/240Hz)와 일치하는 하나의 뚜렷한 간격 안에 촘촘히 모입니다.
  • 중간 또는 낮은 신뢰도: 프레임이 더 흩어져 있는 경우로, 테스트에 무언가 방해가 있었거나 애초에 디스플레이가 하나의 일정한 빈도를 유지하지 않는 경우입니다.
  • "판단할 수 없음"이라는 결과 자체도 의미가 있습니다 — 대개 테스트가 중단되었거나, 패널이 adaptive sync를 사용하고 있다는 뜻입니다(아래 참고).
배터리 절약 모드나 전력 제한 모드는 실제 프레임 속도를 패널의 진짜 최대치보다 낮게 제한할 수 있습니다 — 60Hz로 스로틀링된 MacBook이나 Android 폰은 이 테스트 입장에서 진짜 60Hz 패널과 똑같아 보일 수 있습니다.

Adaptive Sync: G-Sync, FreeSync, VRR

가변 재생 빈도(VRR) — NVIDIA G-Sync, AMD FreeSync, 혹은 그냥 'adaptive sync'라는 이름으로 판매됩니다 — 는 하나의 고정된 빈도를 유지하는 대신, GPU가 만들어내는 출력에 맞춰 디스플레이의 재생 간격을 의도적으로 변화시킵니다. 이는 결함이 아니라 진짜 기능입니다. GPU의 출력과 디스플레이의 고정된 일정 사이의 불일치를 없애, 일정하지 않은 프레임 속도를 더 매끄럽게 느껴지도록 만들기 위해 특별히 설계된 것입니다.

VRR 패널에서는 이 테스트의 재생 빈도 추정이 낮은 신뢰도로 나오는 경우가 많은데, 이는 정확한 결과입니다 — 디스플레이가 하나의 간격을 유지하지 않으니 고정할 대상 자체가 없기 때문입니다. 이는 버그가 아니라 테스트가 의도한 대로 작동하는 것입니다. 위에서 언급한 프레임 타임 통계(평균, 1% 로우, 잭)는 이와 무관하게 영향을 받지 않으며 여전히 의미가 있습니다.

흔한 해결법: 하드웨어 가속, 케이블, 재생 빈도 설정

  • Windows: 설정 → 시스템 → 디스플레이 → 고급 디스플레이에서 재생 빈도가 실제로 패널의 최대치로 설정되어 있는지 확인하세요 — 드라이버를 새로 설치하거나 케이블을 교체하면 소리 없이 60Hz로 되돌아가는 경우가 있습니다.
  • ProMotion(120Hz)이 탑재된 macOS: 시스템 설정 → 디스플레이 → 재생 빈도가 고정된 60Hz가 아니라 동적/고주사율 옵션으로 설정되어 있는지 확인하세요.
  • 외장 모니터가 정격 재생 빈도보다 낮게 나오는 경우: 케이블과 포트가 중요합니다 — 고해상도에서 높은 재생 빈도를 내려면 DisplayPort나 충분히 최신 버전의 HDMI가 필요하며, 상자에 들어 있던 아무 케이블이나 써서는 안 됩니다.
  • 브라우저 설정: 하드웨어 가속이 켜져 있는지 확인하고, 잭 현상이 계속되면 확장 프로그램을 하나씩 꺼보세요.
  • 노트북: 절전 모드는 흔하지만 눈에 잘 띄지 않는 제한 요소이므로, 테스트 전에 전원을 연결하고 전원 관리 옵션을 '최고 성능'으로 설정하세요.

이 테스트가 아닌 것

이 도구는 프레임 타임을 진단하는 도구일 뿐, GPU 벤치마크도 아니고 전용 재생 빈도 측정기도 아닙니다. 비교 가능한 점수를 내기 위해 그래픽 카드에 부하를 주는 무거운 3D 장면을 일부러 렌더링하지 않으며, 전용 하드웨어 도구처럼 패널의 정확한 빈도를 읽어낸다고 주장하지도 않습니다 — 화면이 그려지는 리듬에서 추정할 뿐이며, 이는 결과 전반에 걸쳐 정직하게 '추정값'으로 표시됩니다.

자주 묻는 질문

테스트를 실행할 때마다 FPS 수치가 왜 달라지나요?

실행할 때마다 어느 정도 수치가 달라지는 것은 정상입니다 — 백그라운드 프로세스, 발열 상태, 그 외 열려 있는 프로그램들이 매번 조금씩 다르기 때문입니다. 변동 폭이 크다면 대개 리소스를 두고 경쟁하는 간헐적인 요인이 있다는 뜻이니, 다른 탭과 앱을 닫고 다시 테스트해 보세요.

어느 정도의 FPS면 좋은 편인가요?

절대적인 수치가 아니라 디스플레이에 따라 달라집니다 — 58fps는 60Hz 화면에서는 훌륭하지만 144Hz 화면에서는 평범한 수치입니다. 그래서 이 도구는 고정된 하나의 기준이 아니라 추정된 재생 빈도를 기준으로 결과를 평가합니다.

60Hz 화면인데 왜 테스트에서 정확히 60이 아니라 58 FPS로 나오나요?

이론상 최댓값보다 몇 프레임 낮게 나오는 것은 완전히 정상입니다 — 수학적으로 완벽하고 흔들림 없는 간격으로 그려지는 것은 없습니다. 실제 문제를 나타내는 것은 평균 주변의 미세한 변동이 아니라 1% 로우와 잭 수입니다.

'1% 로우'란 무엇이고, 왜 평균 FPS보다 더 중요한가요?

실행 중 가장 느린 1%의 프레임만을 대상으로 한 평균 프레임 속도입니다. 평균은 높은데 1% 로우가 낮다면, 대부분은 매끄러웠지만 실제로 눈에 띄는 끊김이 있었다는 뜻입니다 — 단일 평균값이 정확히 이런 것을 감춥니다.

이 테스트로 GPU의 실제 성능을 측정할 수 있나요?

직접적으로는 아닙니다 — 이 테스트는 브라우저가 가벼운 캔버스 애니메이션을 얼마나 일관되게 그리는지 측정할 뿐이며, 이는 대부분 디스플레이 파이프라인과 경쟁하는 부하를 반영할 뿐, 무거운 3D 렌더링에서의 그래픽 카드 한계를 나타내지는 않습니다. 전용 GPU 벤치마크는 훨씬 무거운 별도의 도구입니다.

왜 브라우저는 모니터의 정확한 재생 빈도를 알려주지 못하나요?

이를 노출하는 웹 API가 없기 때문입니다. 이 도구는 프레임이 실제로 도착하는 방식을 통해 추정하며, 그래서 결과는 항상 하드웨어에서 직접 읽어낸 값이 아니라 신뢰도가 표시된 추정값으로 나타납니다.

탭을 전환하거나 창을 최소화하면 왜 FPS가 떨어지나요?

브라우저는 전력과 CPU를 아끼기 위해 백그라운드 탭의 속도를 줄입니다. 그래서 실행 도중 탭이 백그라운드로 전환되면 이 테스트는 중단되고 다시 시도하라고 안내합니다 — 백그라운드 탭에서 나온 결과는 의미가 없기 때문입니다.

이 테스트가 배터리를 많이 소모하거나 기기를 과열시키나요?

다른 10초짜리 애니메이션보다 더하지 않습니다. 무거운 3D 장면이 아니라 단순한 2D 캔버스를 그리며, 측정 구간이 끝나면 자동으로 멈춥니다.

같은 컴퓨터인데 Chrome, Firefox, Safari의 결과가 왜 다른가요?

브라우저마다 자체적인 컴포지터와 스케줄링 방식을 가지고 있고, 확장 프로그램, 하드웨어 가속 기본값, 업데이트 주기도 모두 다릅니다 — 어느 정도 차이는 예상되는 것이지, 특정 브라우저가 고장났다는 신호가 아닙니다.

잭이란 정확히 무엇인가요?

디스플레이의 프레임 예산보다 눈에 띄게 오래 걸려 도착한 프레임을 말합니다 — 사람의 눈이 매끄러운 움직임이 아니라 튐이나 끊김으로 인지할 만큼 긴 시간입니다.

이 테스트는 전적으로 사용자의 기기에서 실행됩니다 — 캔버스 애니메이션을 그리고 사용자 브라우저 자체의 프레임 속도를 측정할 뿐입니다. 프레임 데이터, 타이밍, 결과 그 무엇도 업로드되거나 전송되거나 저장되지 않습니다.