Feat/#120: 콘텐츠 등록 화면 성능 최적화 #212
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
#️⃣ 연관된 이슈
#120
📝 작업 내용
1. 접근성 향상
(1) viewport의 maximum-sacle 증가
viewport는 모바일 장치에 최적화되지 않은 사이트를 좁은 스크린 장치에서 더 잘 보이도록 하는 방법입니다.
user-calable=no
를 사용하면 저시력 시각 장애인 사용자 접근성 문제 발생 가능하여, WCAG에선 2배 이상을 요구하지만, 5배 줌 가능하도록 하는 편이 좋습니다.현재 우리 코드에서 maximum-scale:1로 설정되어, 사용자 접근성 문제 발생하고 있는 상황이었습니다. 기본적으로 제공하는 maximum-scale:10로 scale을 증가시켜 문제를 해결했습니다.
(2) 양식 라벨 포함
양식 라벨이 포함되지 않은 요소에 aria-label를 등록하여 스크린 리더와 같은 보조 기술에서 양식을 올바르게 읽을 수 있게 향상했습니다.
2. 성능 향상
@next/bundle-analyzer
로 번들 사이즈를 분석했고,app/(nav)/content/register/*
가 타 번들에 비해 큰 사이즈를 가지고 있음을 확인했습니다. 추정되는 원인으로는 lottie 사용과 Google Map API 사용이 있었고, 이를 기반으로 성능 향상을 도입했습니다.성능에서 향상해야 하는 부분은 크게 다음과 같았습니다.
LCP
: 보여지는 화면에서 가장 큰 컨텐츠 그려지는 시점TBT(Total Blocking Time)
: FCP와 TTI(사용자 상호작용이 안정적으로 응답할 수 있는 시점까지의 시간) 사이 시간에 longtask(50ms가 초과되는 작업으로 메인 스레드 독점하는 JS 작업)를 뺀 값SI
: 페이지가 그려지는 중 시각적으로 속도를 나타내는 지표(1) SI 개선: lottie를 memo로 감싸서 메모이제이션
사용하는 lottie 컴포넌트를 export하는 부분을 memo로 감싸 반복된 호출을 제한했습니다.
(2) LCP 개선: lottie 관련 리소스 사이즈 절감으로 번들 사이즈 최적화
기존에 디자이너분이 전달해주신 사용자 TIP lottie의 경우, 4,700mb로 큰 크기를 가지고 있는 json이었습니다. 캐릭터를 제외한 TIP만 움직이는 경량화된 lottie로 교체해 100mb 미만의 json을 사용했습니다.
캐릭터의 경우, static한 자원이기에 lottie 제공 전 제시됩니다.
(3) TBT 개선: code splitting으로 번들 사이즈 최적화
lottie 호출을 일반 import에서 lazy load로 변경해, TBT 후에 컴포넌트를 불러오게 하여 번들 사이즈를 줄였습니다.
🚨 TBT 측정되는 정확한 수치
📸 스크린샷
기존 성능 및 접근성
향상된 성능 및 접근성
💬 리뷰 요구사항