그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록Rendering
Rendering

requestAnimationFrame에 대해서 설명해주세요.

실무4/5
설계3/5
인간3/5
기초3/5

면접관의 질문 의도

rAF를 setInterval의 더 부드러운 버전으로 외운 사람과, 브라우저 렌더링 파이프라인 안에서 콜백이 언제 실행되는지를 그릴 줄 아는 사람을 가른다. 후속 질문은 보통 이벤트 루프 위치·취소 처리·delta time 보정으로 이어진다.

큐레이션 답변

학습 자료

requestAnimationFrame은 브라우저가 다음 화면을 그리기 직전에 콜백을 한 번 실행해주는 API다. 콜백은 디스플레이 갱신 주기에 맞춰 호출되므로 보통 60Hz 화면에서는 약 16.7ms 간격으로 돌아가고, 탭이 백그라운드로 가면 호출 자체가 멈춘다. 반복 애니메이션은 콜백 마지막에 다시 rAF를 호출해 다음 프레임을 예약하는 식으로 잇고, 끊을 때는 반환된 id를 cancelAnimationFrame에 넘긴다. 즉 "지금 그려지는 프레임에 맞춰 한 번만 일을 시키는 슬롯"이라고 보면 된다.

좋은 답변 구조

  1. 01rAF가 받는 콜백과 돌려주는 id가 무엇을 의미하는지 입출력 단위로 정의한다
  2. 02브라우저가 한 프레임을 그리는 흐름(JS 실행 → rAF 콜백 → 스타일/레이아웃/페인트) 안에서 콜백이 어느 단계에 끼는지 단계별로 짚는다
  3. 03탭이 비활성일 때 호출이 멈추는 점, 디스플레이 주사율에 따라 간격이 달라지는 점 같은 한계와 예외를 명시한다
  4. 04재귀로 다음 프레임을 잇고 cancelAnimationFrame으로 끊는 실제 사용 패턴을 한 번 보여준다

자주 실수하는 포인트

rAF를 setInterval의 부드러운 대체재로만 설명하고 "페인트 직전에 끼는 슬롯"이라는 위치를 못 짚는다
재귀 호출만 보여주고 cancelAnimationFrame·언마운트 정리 흐름을 빠뜨려 누수 케이스를 그리지 못한다
탭 백그라운드 전환·고주사율 모니터 같은 환경 의존성을 "60fps로 돈다"는 가정 하나로 뭉뚱그린다
rAF 콜백 안에서 layout을 읽고 같은 프레임에 다시 쓰는 패턴이 강제 동기 리플로우를 일으킨다는 점을 모른다

실무 맥락

  • 캔버스·WebGL 기반으로 매 프레임 좌표를 다시 계산해 그리는 시각화 화면
  • 스크롤·드래그·마우스 이동 같은 고빈도 이벤트를 받아 DOM이나 transform을 갱신하는 인터랙션
  • 고주사율(120Hz 이상) 디스플레이가 섞인 환경에서 프레임 간격을 고정값으로 가정할 수 없는 UI
  • 탭이 백그라운드로 들어가도 타이머는 돌고 있을 때 자원 낭비가 표면화되는 장시간 동작 화면

본인 경험에 녹이는 힌트

스크롤 인터랙션이 끊겨 보여서 setTimeout/Interval을 rAF로 옮기고 프레임 타임을 측정한 경험이 있다면 측정 방법과 개선 폭으로 답을 연결할 수 있다

Chrome DevTools Performance 패널에서 long task와 dropped frame을 본 적이 있다면 rAF 콜백이 어느 트랙에 찍히는지로 설명을 끌고 갈 수 있다

컴포넌트 언마운트 시 애니메이션이 살아남아 메모리·CPU를 갉아먹은 경험이 있다면 cancelAnimationFrame과 cleanup 설계 이야기로 자연스럽게 이어진다

고주사율 모니터에서 애니메이션이 너무 빠르게 돈 경험이 있다면 timestamp 기반 delta 보정으로 답변을 한 단계 깊게 만들 수 있다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1requestAnimationFrame 콜백은 이벤트 루프에서 정확히 언제 실행되나요? 마이크로태스크와의 관계는 어떻게 되나요?
Q2프레임 안에서 layout 읽기와 쓰기를 어떻게 묶어야 강제 동기 리플로우를 피할 수 있나요?
Q3고주사율 디스플레이에서 애니메이션 속도를 일정하게 유지하려면 콜백을 어떻게 설계해야 하나요?
Q4React에서 useEffect와 rAF를 함께 쓸 때 cleanup을 어디서 어떻게 거는 게 안전한가요?
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문