프론트엔드 개발을 하는 입장에서 브라우저가 어떤일을 해서 나에게 보여지는지 알아내는것은 매우 중요한 일입니다. 왜냐하면, 우리가 짠 코드가 실행되는 환경이 브라우저이기 때문이고, 발생하는 오류들에 대해서도 더욱 폭 넓게 문제를 해결할 수 있기 때문입니다. 이러한 과정을 통해서 웹 사이트의 성능을 더욱 좋게 만들수 있고 사용자 경험을 더욱 좋게 만들 수 있습니다.
이 글을 읽으면 얻을 수 있는 정보들이에요
웹 브라우저의 구성요소
웹 브라우저 렌더링 과정
출처 코딩하는 누나 유튜브


웹 브라우저는 사용자 인터페이스, 렌더링 엔진, 브라우저 엔진으로 이루어져있습니다.
- 사용자 인터페이스 : 주소 표시줄, 이전/다음 버튼, 북마크 메뉴 등. 요청한 페이지를 보여주는 창을 제외한 나머지 모든 부분입니다.
- 브라우저 엔진 : 렌더링 엔진과 사용자 인터페이스 사이에 가교 역할을 하는 부분입니다.
- 렌더링 엔진 : 요청한 콘텐츠를 표시하는 부분입니다. 예를 들어서 HTML을 요청하면 HTML과 CSS를 파싱하여 화면에 표시합니다.
- 통신 : HTTP 요청과 같은 네트워크 호출에 사용됩니다. 독립적으로 동작합니다.
- 자바 스크립트 해석기 : 자바스크립트 코드를 해석하고 실행합니다.
- UI 백엔드 : 콤보 박스, 창 같은 기본적인 장치를 그립니다. 플랫폼에서 제어하지 않는 일반적인 인터페이스로서 OS 사용자 인터페이스 체계를 사용합니다.
- 자료 저장소 : 로컬 세션 등등 정보를 저장할 수 있는 공간입니다.
웹 브라우저에서 사용자가 주소입력창(사용자 인터페이스)에 주소를 입력해서 엔터를 누르면 그 사이트가 웹 브라우저에 띄워지게 되는데 그 과정에 대해서 알아보겠습니다.
- DNS(Domain Name System) 서버를 찾아가서 방문하고자 하는 사이트의 아이피를 가져옵니다. (아이피를 알아야 서버와 통신이 가능하기 때문)
- 리소스 요청을 해서 서버에게 내가 보고자 하는 내용을 요청합니다. 이때 바이트스트림 형태로 받게 되는데(0101 <- 이런거) 이런 내용을 요청한 인코딩 방식에 따라 캐릭터화 시켜서 문서로 만들어줍니다.
- 토큰화를 해서 요청한 내용이 어떤 의미단위가 있는지(태그가 열렸니? 닫혔니? 등등) 파악합니다.
- 만들어진 토큰을 가지고 객체로 재정의 해서 노드로 만들게 됩니다.
- 렌더링엔진이 렌더링을 통해서 사용자에게 보여주게 됩니다.
위에서 어떤식으로 웹 페이지의 내용이 보여지는지 알아보았는데, 렌더링 엔진의 동작과정을 추가적으로 알아봄으로써 웹사이트 성능 업그레이드에 대한 인사이트를 얻을 수 있었습니다.



reflow가 자주 발생하지 않도록 코드를 작성해야 렌더링 성능을 높이고 사용자 경험을 더욱 좋게 만들어줄 수 있스비다. 그렇다면 reflow가 자주 발생하는 경우를 알아보고 피하기 위한 대안책을 알아봅시다.
reflow가 발생하는 경우
- 요소의 크기, 위치 변경
- 브라우저 창의 크기 변경
- font-size 변경
- scroll
- DOM API를 통한 노드 요소의 추가, 삭제
reflow를 발생시키는 css요소들
reflow 최소화하기.
리플로우를 발생시키지 않겠다!! <- 이건 불가능합니다. 대신 최소화 할 수는 있습니다.
1. 가급적 레이아웃 피하기 : 기하학적인 속성의 변경을 피함으로서 리플로우를 줄일 수 있습니다.transform같은 것을 사용해서 리플로우를 줄일 수 있습니다.
2. 이전 레이아웃 모델 대신 Flexbox사용하기
3. 애니메이션은 흐름 밖에서 변경 : HTML 요소들의 흐름 밖에서 애니메이션을 사용해야합니다.position: absolute;혹은position: fixed를사용해서 주변 요소에게 영향을 주지 않는 요소로 설정해야합니다.
사용자가 더 좋은 사이트를 방문했으면 좋겠다는 생각에 이러한 요소들을 공부하는 것 같습니다. 어떤식으로 렌더링 되는지 알아야 더 빠르게 구동되도록 만들 수 있는 것 같습니다.
브라우저 렌더링 파이프라인
How browser rendering works
면접에서 브라우저 렌더링 과정을 묻는 이유.
코딩알려주는 누나 웹브라우저 작동방식
브라우저는 어떻게 동작하는가?
reflow repaint