반응형
Jake Seo
제이크서 위키 블로그
Jake Seo
전체 방문자
오늘
어제
  • 분류 전체보기 (715)
    • 일상, 일기 (0)
    • 백준 문제풀이 (1)
    • 릿코드 문제풀이 (2)
    • 알고리즘 이론 (10)
      • 기본 이론 (2)
      • 배열과 문자열 (8)
    • 데이터베이스 (15)
      • Planet Scale (1)
      • MSSQL (9)
      • 디비 기본 개념 (1)
      • SQLite 직접 만들어보기 (4)
    • 보안 (7)
    • 설계 (1)
    • 네트워크 (17)
      • HTTP (9)
      • OSI Layers (5)
    • 회고 (31)
      • 연간 회고 (2)
      • 주간 회고 (29)
    • 인프라 (52)
      • 도커 (12)
      • AWS (9)
      • 용어 (21)
      • 웹 성능 (1)
      • 대규모 서비스를 지탱하는 기술 (9)
    • 깃 (7)
    • 빌드 도구 (7)
      • 메이븐 (6)
      • 그레이들 (0)
    • Java (135)
      • 이펙티브 자바 (73)
      • 자바 API (4)
      • 자바 잡지식 (30)
      • 자바 디자인 패턴 (21)
      • 톰캣 (Tomcat) (7)
    • 프레임워크 (64)
      • next.js (14)
      • 스프링 프레임워크 (28)
      • 토비의 스프링 (6)
      • 스프링 부트 (3)
      • JPA (Java Persistence API) (5)
      • Nest.js (8)
    • 프론트엔드 (48)
      • 다크모드 (1)
      • 노드 패키지 관리 매니저 (3)
      • CSS (19)
      • Web API (11)
      • tailwind-css (1)
      • React (5)
      • React 새 공식문서 요약 (1)
      • HTML (Markup Language) (5)
    • 자바스크립트 (108)
      • 모던 자바스크립트 (31)
      • 개념 (31)
      • 정규표현식 (5)
      • 코드 스니펫 (1)
      • 라이브러리 (6)
      • 인터뷰 (24)
      • 웹개발자를 위한 자바스크립트의 모든 것 (6)
      • 팁 (2)
    • Typescript (49)
    • 리눅스와 유닉스 (10)
    • Computer Science (1)
      • Compiler (1)
    • IDE (3)
      • VSCODE (1)
      • IntelliJ (2)
    • 세미나 & 컨퍼런스 (1)
    • 용어 (개발용어) (16)
      • 함수형 프로그래밍 용어들 (1)
    • ORM (2)
      • Prisma (2)
    • NODEJS (2)
    • cypress (1)
    • 리액트 네이티브 (React Native) (31)
    • 러스트 (Rust) (15)
    • 코틀린 (Kotlin) (4)
      • 자바에서 코틀린으로 (4)
    • 정규표현식 (3)
    • 구글 애널리틱스 (GA) (1)
    • SEO (2)
    • UML (2)
    • 맛탐험 (2)
    • 리팩토링 (1)
    • 서평 (2)
    • 소프트웨어 공학 (18)
      • 테스팅 (16)
      • 개발 프로세스 (1)
    • 교육학 (1)
    • 삶의 지혜, 통찰 (1)
    • Chat GPT (2)
    • 쉘스크립트 (1)
    • 컴파일 (2)
    • Dart (12)
    • 코드팩토리의 플러터 프로그래밍 (4)
    • 플러터 (17)
    • 안드로이드 스튜디오 (1)
    • 윈도우즈 (1)
    • 잡다한 백엔드 지식 (1)
    • 디자인 패턴 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 싱글톤 패턴
  • 싱글턴
  • 메이븐 라이프사이클
  • 외래키 제약조건
  • 알고리즘
  • 스프링 검증
  • serverless computing
  • 이펙티브 자바
  • item9
  • 이펙티브 자바 item9
  • pnpm
  • next js app
  • 서버리스 컴퓨팅
  • 자바 검증
  • 자바 디자인패턴
  • 자바스크립트
  • 슬로우 쿼리
  • bean Validation
  • Java
  • 플라이웨이트패턴
  • prerendering
  • 싱글톤
  • item7
  • 메이븐 골
  • 토비의 스프링
  • 프로그래머의 뇌
  • 도커공식문서
  • 팩터리 메서드 패턴
  • 느린 쿼리
  • 추상 팩터리 패턴
  • 자바
  • 빈 검증
  • NEXT JS
  • 객체복사
  • MSSQL
  • 작업기억공간
  • 메이븐 페이즈
  • 디자인패턴
  • Javadoc 자바독 자바주석 주석 Comment
  • item8
  • Next.js
  • 참조 해제
  • 이펙티브자바
  • Pre-rendering
  • 자바스크립트 인터뷰
  • rust
  • 자바스크립트 면접
  • 자료구조
  • try-with-resources
  • 러스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Jake Seo

제이크서 위키 블로그

웹 성능 측정 방법과 지표가 되는 것들
인프라/웹 성능

웹 성능 측정 방법과 지표가 되는 것들

2022. 9. 12. 18:52

개요

웹의 성능은 어떻게 측정해야 할까? 아래의 그림에서는 웹을 이용하는 도중에 부하가 걸릴 수 있는 부분들이 보인다.

간단하게 웹페이지의 성능을 측정하는 방법

webpagetest.org 를 이용하기

WebPageTest 라는 웹사이트를 이용하면, 간단하게 웹 페이지의 성능을 측정할 수 있다.

URL 을 입력하면, 위와 같이 각종 지표를 통해 성능을 측정한 결과가 나온다.

  • First Byte Time: 웹 서버에서 받은 컨텐츠의 첫번째 바이트가 얼마만에 도착했는가
  • Keep-Alive Enabled: TCP 연결을 재사용하기 위한 Keep-Alive 설정이 되어있는가?
  • Compress Transfer: 스크립트 파일이 Content-Encoding 으로 압축되어 있는가?
  • Compress Image: 이미지를 압축했는가?
  • Cache Static Content: 정적 파일이 캐싱 설정되어 있는가?

Google LightHouse 를 이용하기

Google LightHouse 는 웹 페이지를 자동으로 테스트해주는 도구이다. 다양한 지표의 성능측정 결과를 보여준다.

크게 몇가지 지표에 집중하여 점수를 보여주는데, 대표적인 지표들은 아래와 같다.

  • FCP (First Contentful Paint): 첫번째 텍스트 혹은 이미지가 표기되는 시간을 나타낸다.
  • Time to Interactive: 페이지와 완전히 상호작용할 수 있게 될 때까지 걸리는 시간을 말한다.
  • Speed Index: 페이지 콘텐츠가 얼마나 빨리 표시되는지 보여준다.
  • Total Blocking Time: 처음 컨텐츠가 뜨고 상호작용이 가능할 때까지의 모든 시간의 합이다. 즉, FCP 와 상호작용 시간 사이의 모든 시간의 합이다. 작업 지속 시간이 50ms 를 넘으면 밀리초 단위로 표현된다.
  • LCP (Largest Contentful Paint): 가장 큰 텍스트 혹은 이미지가 표시되는 시간을 나타낸다.
  • CLS (Cumulative Layout Shift): 페이지에서 보여지는 요소들의 이동을 측정한다. 이를테면 레이아웃 요소들의 크기를 처음에 제대로 잡지 못한 뒤에 로드되면서 예측하지 못할만큼 커진다면 이 점수가 떨어진다.

Google LightHouse 는 성능을 측정한 이후 어떤 부분을 개선하면 점수가 오를지에 대해서도 잘 알려준다.

웹 성능 예산

성능 예산은 일반적으로 다음과 같은 키워드로 산정한다.

  • 정량적
  • 시간적
  • 규칙적

웹 성능 목표의 일반적인 조건

3초 법칙: 3초 안에 로드되지 않으면, 사용자의 53% 가 떠나간다.

Yet 53% of visits are abandoned if a mobile site takes longer than three seconds to load.

웹 성능 요건을 맞추기 위해 지켜야하는 제한 사항들

  • 메인 페이지에서 로드하는 파일의 크기는 10MB 미만으로 제한한다.
  • 모든 웹 페이지의 각 페이지 내 포함된 자바스크립트의 크기는 1MB 미만으로 제한한다.
  • 검색 페이지의 이미지는 2MB 미만으로 제한한다.
  • LTE 환경에서 모바일 기기의 Time to Interactive 는 5초 미만이어야 한다.
  • DOM Content Loaded 는 10초 미만이어야 한다.
  • First Meaningful Paint 는 15초 미만이어야 한다.
  • Lighthouse 성능 감사의 결과는 80점 이상이어야 한다.

예산 설정하기

예비 분석

  • 트래픽이 가장 많은 페이지, 가장 중요한 페이지가 무엇인지 먼저 분석한다.
  • PageSpeed Insight 에서 FCP, TTI 등의 지표를 확인해보고 현재의 상태를 진단한다.

경쟁사 분석

  • 경쟁 사이트 혹은 유사한 사이트의 성능을 조사한다.
  • 연구에 따르면, 보통 20% 의 차이부터 사용자에게 유의미한 차이로 인식된다.
  • Alexa, SimilarWeb 혹은 구글의 related: 키워드를 통해 경쟁 사이트를 찾을 수 있다.

성능 기준 설정

  • 정량, 시간, 규칙을 기반으로 성능 기준을 세운다.
  • 서비스에 중요한 페이지부터 성능을 다듬는다.
  • 초기 기준은 일반적으로 아래의 기준을 따르면 좋다.
    • 페이지 로드 3초 미만
    • TTI 5초 미만
    • 압축된 리소스 크기 최대 200KB 미만

Quantity based Metric

  • 이미지 최대 크기
  • 웹 글꼴 최대 크기
  • 글꼴 최대 갯수
  • 스크립트 최대 크기
  • 스크립트 최대 갯수
  • HTML, CSS 최대 크기
  • 동영상 최대 크기

Timing based Metric

  • FCP, LCP, TTI, TBT, CLS 등 LightHouse 에서 제공하는 데이터를 기반으로 한다.

Rule based Metric

  • WebPageTest, LightHouse 등 웹 사이트에서 측정한 점수를 지표로 활용한다.

우선순위

사이트에서 무엇이 중요한지에 따라 갈린다.

  • 사용자에게 컨텐츠가 빠르게 노출되는 것이 중요하다면, FCP 의 우선순위가 높아야 한다.
  • 사용자가 관련 링크를 빠르게 클릭해야 할 경우 TTI 의 우선순위가 높아야 한다.
반응형
저작자표시 비영리
    Jake Seo
    Jake Seo
    ✔ 잘 보셨다면 광고 한번 클릭해주시면 큰 힘이 됩니다. ✔ 댓글로 틀린 부분을 지적해주시면 기분 나빠하지 않고 수정합니다. ✔ 많은 퇴고를 거친 글이 좋은 글이 된다고 생각합니다. ✔ 간결하고 명료하게 사람들을 이해 시키는 것을 목표로 합니다.

    티스토리툴바