Reflow와 Repaint란?

웹 페이지가 화면에 표시되는 과정은 마치 정교한 연극 무대를 꾸미는 것과 같습니다. 이 과정에서 가장 중요한 배우들이 바로 Reflow와 Repaint입니다. 두 용어는 웹 성능의 핵심이며, 프론트엔드 개발자라면 반드시 이해해야 할 개념입니다.

 

Reflow: 무대 배치를 다시 그리다

Reflow는 브라우저가 웹 페이지의 레이아웃을 다시 계산하는 과정입니다. 마치 연극 감독이 무대 위 배우들의 위치를 다시 배치하는 것처럼, 브라우저는 DOM 요소들의 위치와 크기를 재계산합니다.

Reflow가 발생하는 대표적인 상황

// Reflow를 유발하는 코드 예시
element.style.width = '300px';  // 요소의 너비 변경
element.style.height = '200px'; // 요소의 높이 변경
document.body.appendChild(newElement); // 새 요소 추가

Repaint: 색칠하기

Repaint는 요소의 시각적 스타일만 변경되는 경우 발생합니다. 연극에서 배우의 위치는 그대로이고 의상만 바꾸는 것과 비슷합니다.

Repaint 예시

// Repaint를 유발하는 코드
element.style.backgroundColor = 'red';    // 배경색 변경
element.style.borderColor = 'blue';       // 테두리 색상 변경

 

성능 최적화 전략: Reflow와 Repaint 최소화하기

1. CSS 속성 사용 최적화

/* 비효율적인 방법 */
.element {
    width: calc(100% - 50px);
    height: calc(50vh - 100px);
}

/* 최적화된 방법 */
.element {
    width: 100%;
    max-width: calc(100% - 50px);
    height: 50vh;
    max-height: calc(50vh - 100px);
}

2. 애니메이션 최적화

/* 비용이 많이 드는 애니메이션 */
.animated-element {
    left: 100px;
    transition: left 0.3s;
}

/* GPU 가속을 활용한 최적화 */
.optimized-element {
    transform: translateX(100px);
    transition: transform 0.3s;
}

3. will-change 속성 활용

.optimized-animation {
    will-change: transform, opacity;
    transition: transform 0.3s;
}

주의할 점

  • will-change는 과도하게 사용하면 오히려 성능에 악영향을 줄 수 있습니다.
  • 가능한 한 레이아웃 변경을 최소화하세요.
  • GPU 가속을 활용하는 transform과 opacity를 선호하세요.

실전 팁: 성능 개선을 위한 체크리스트

  1. CSS 속성 변경 시 최소한의 요소만 수정
  2. 애니메이션에 transform과 opacity 사용
  3. 불필요한 DOM 조작 최소화
  4. 레이아웃 계산을 유발하는 JavaScript 연산 최적화

결론

Reflow와 Repaint는 웹 성능의 핵심입니다. 이들을 이해하고 최적화하면 더 빠르고 부드러운 웹 애플리케이션을 만들 수 있습니다. 성능은 사용자 경험의 핵심이며, 작은 최적화들이 모여 큰 차이를 만들어냅니다.

 

참고: https://www.maeil-mail.kr/question/3

 

매일메일 - 기술 면접 질문 구독 서비스

기술 면접 질문을 매일매일 메일로 보내드릴게요!

www.maeil-mail.kr

 

728x90

[프론트엔드 - 테크트리]

1. HTML, CSS, Javascript 문법 익히기

2. 브라우저에 대한 이해 & 렌더링 방식 이해

3. 간단한 프로젝트(+Git)

4. 객체 지향 프로그래밍(OOP) 공부하면서 자바스크립트로 코딩해보기

5. 웹 프레임워크로 React.js 공부 (+npm)

6. React를 이용한 프로젝트

7. 서버 공부하기(네트워크, HTTP, 인증)

8. 서버 구축 혹은 테스트용 서버를 이용한 프로젝트

9. CSR, SSR 방식에 대해 공부하기

10. 웹 번들링 도구인 Webpack, Babel 공부하고 React에 적용해보기

11. 타입스크립트, 혹은 모바일 어플리케이션 개발

 

[백엔드 -테크트리]

1. 네트워크 & HTTP에 대한 기본 이해

2. 서버용 프로그래밍 언어 공부(Javascript 추천)후 프레임워크(Node.js 추천) 사용

3. Database에 대한 기본 이해(Mysql 추천)

4. Database가 붙은 API 서버 프로젝트 (+Git)

5. 이미지, 파일 등을 저장하는 스토리지 학습

6. 인증 공부 (JWT, Session, etc)

7. 로그인, 이미지 처리가 가능한 서버 프로젝트

8. Cache 공부

9. CI/CD, Docker 등 프로세스 공부

 

[사이트]

https://blog.rhostem.com/posts/2016-12-19-a-study-plan-to-cure-javascript fatigue Javascript의 공부 로드맵(번역)

https://jbee.io/essay/for_junior_frontend_developer/ 신입 프론트엔드 개발자의 로드맵 https://opentutorials.org/course/3084 무료 강의 사이트 중 가장 유명한 사이트 ‘생활코딩’

https://velopert.com/reactjs-tutorials React 강의에서 실습과 이론을 쉽게 설명해주는 사이트

728x90

'코딩공부' 카테고리의 다른 글

탑바 메뉴만들기(노말라이즈, 라이브러리)  (0) 2022.10.20
CSS 일정비율 조절  (0) 2022.10.20
이미지 링크주소  (0) 2022.10.07
자식선택자와 후손선택자  (0) 2022.10.06
클래스101 개발자 로드맵  (1) 2022.10.01

+ Recent posts