-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[1주차 생각 과제] 웹 최적화 #3
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요거 잘 정리해서 은서 블로그에도 올려쓰면 좋겟따 ㅎㅎㅎ 생각할 부분들이 만하서 넘조하요!
|
||
페이지 로딩 시간을 빠르게 하는 것이다. 로딩 속도가 빠를수록 사용자들이 웹사이트를 더 많이 방문하고, 더 오래 머무르며, 더 긍정적인 사용자 경험을 가지게 되기 때문이다. 또한 검색 엔진에서도 웹사이트의 속도를 고려하여 검색 순위를 결정하기 때문에, 웹 속도 최적화는 검색 엔진 최적화(SEO)에도 중요한 요소 중 하나이다. 속도 최적화를 위해 다음과 같은 방법을 사용할 수 있다. | ||
|
||
- 이미지 크기를 줄인다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이미지크기를 개발자가 줄이는 방법도 있으까...?
- 리플로우를 발생시키는 속성 | ||
```css | ||
position / width / height / margin / padding / display / top / left / right / bottom / | ||
box-sizing / border-color / text-align / border / border-width / | ||
font-family / float / font-size / font-weight / line-height / vertical-align / | ||
white-space / word-wrap / text-overflow / text-shadow ... | ||
``` | ||
- 리페인트를 발생시키는 속성 | ||
```css | ||
color / border-style / visibility / background / background-color / | ||
background-image / background-position / background-repeat / background-size / | ||
text-decoration / outline / outline-style / outline-color / outline-width / | ||
border-radius / box-shadow ... | ||
``` | ||
- 리플로우와 리페인트를 발생시키지 않는 속성 | ||
```css | ||
opacity / transform / cursor / z-index ... | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
참 이거를 고려하면서 css를 설계하는것도 쉽지는 않은것가타용
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그니까,, 리플로우에있는 속성을 더 친숙하게 쓰는 편이었어서 리페인트에 더 친숙해지면 좋겠다는 생각이 드는군
### 애니메이션 최적화 | ||
|
||
- 자바스크립트 api, 라이브러리보다 css를 통해 구현하는 것이 성능면에서 좋다. | ||
- `transform`은 리플로우와 리페인트를 발생시키지 않으므로 렌더링 속도를 향상시킬 수 있다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아지짜?!몰랏넹
- media 속성으로 브라우저 사이즈에 맞는 이미지를 제공할 수 있다. | ||
- img 지연로딩 활용 : loading 속성 (auto, lazy, eager)로 이미지를 지연/병렬 로딩할 수 있다. | ||
- auto : 디폴트 값 | ||
- lazy : 보이는 부분만 먼저 출력하고 화면 바깥쪽 이미지는 로딩하지 않는다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요거 리액트-lazy에서도 적용된다요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
우주 최고 웹 개발자 되겠다 은서 언니!!!! 생각 과제까지 넘넘 수고 많았어요 🥰🥰
페이지 로딩 시간을 빠르게 하는 것이다. 로딩 속도가 빠를수록 사용자들이 웹사이트를 더 많이 방문하고, 더 오래 머무르며, 더 긍정적인 사용자 경험을 가지게 되기 때문이다. 또한 검색 엔진에서도 웹사이트의 속도를 고려하여 검색 순위를 결정하기 때문에, 웹 속도 최적화는 검색 엔진 최적화(SEO)에도 중요한 요소 중 하나이다. 속도 최적화를 위해 다음과 같은 방법을 사용할 수 있다. | ||
|
||
- 이미지 크기를 줄인다. | ||
- 브라우저 캐시를 이용하여 자주 사용되는 파일들을 저장해두고 재사용한다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
캐싱 넘넘 중요한 것 같아요!!! 컴구에서도 엄청 중요하게 다룬 기억이 있는..ㅎㅎ
|
||
- 사용자가 원하는 정보를 쉽게 찾을 수 있도록 콘텐츠와 레이아웃을 구성한다. | ||
- 화면 크기에 따라 레이아웃이 적절히 조정되는 반응형 디자인을 고려한다. | ||
- 신체적, 인지적, 기술적 장애를 가진 사람을 포함한 모든 사용자가 웹사이트를 이용할 수 있도록 디자인한다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
요런 게 웹 접근성이라는 개념!!! :)
|
||
웹사이트가 검색 엔진에 잘 노출시켜서 더 많은 사용자를 유도하기 위한 작업이다. 검색 엔진의 알고리즘을 이해하고 그에 맞게 사이트를 구성해야 한다. SEO 최적화를 위한 방법은 다음과 같은 것들이 있다. | ||
|
||
- 검색 엔진에서 웹사이트를 분석할 때 메타 태그를 이용하여 사이트의 정보를 수집하므로, 메타태그를 적절히 작성한다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
메타 태그 잘 작성하는 거 중요한 것 같아요 정말!!!
|
||
### 성능 측정 도구 사용하기 | ||
|
||
- [Lighthouse](https://developer.chrome.com/docs/lighthouse/overview/) : Chrome 개발자 도구에 내장되어 있는 도구이며 웹사이트의 다양한 측면을 평가하여 개발자가 개선할 수 있는 성능 이슈를 제공하는 것에 중점을 둔다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 이거 많이 썼어요ㅎㅎ
### css는 head에서, js는 body 하단에서 불러오기 | ||
|
||
- html과 css는 바로 눈에 보이는 부분이므로 빠르게 그려질수록 좋다. | ||
- js를 제외한 구조들을 모두 로드한 뒤에 js를 다운로드하는 것이 좋다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
js 를 head 안에서 불러와도 되어요!! 대신 defer/async 속성 주기!!!
- `<script defer>` : 마지막에 파싱해도 상관없을 때 | ||
![Untitled 4](https://user-images.githubusercontent.com/55528304/229984626-6642ee13-7a3b-4ede-9534-5bcb0ad15b4e.png) | ||
|
||
### 이미지 최적화 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이미지 최적화는 next.js 가 참 잘 도와주는 것 같아요 :)
### SEO 최적화를 위한 코드 작성 | ||
|
||
- 문법에 맞는 HTML 작성 | ||
- 시맨틱 태그 사용하기 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
시맨틱 태그 사용의 중요성!!! SEO 를 위해!!!
- 고유하고 정확한 페이지 제목 사용하기 | ||
- 눈길을 사로잡는 문구 사용 | ||
- 페이지마다 고유한 title 태그 작성 | ||
- 제목의 시작이나 끝에 사이트 이름을 포함하고 나머지 제목은 –, :, |를 사용 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
옹 이건 처음 알았어요ㅎㅎ
- 페이지를 정확하게 나타내는 설명 작성 | ||
- 설명에 콘텐츠 관련 정보를 포함 | ||
- a 태그로 적절한 키워드 배치 | ||
- `<div>` , `<button>` 보다는 `<a>` 이용 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오호 a 태그... 리액트 쓰면서 잘 안 썼는데, 리액트를 사용하는 경우 링크를 어떻게 하면 최적화시킬 수 있을지도 고민해 보면 좋을 것 같아요!!!
- `<div>` , `<button>` 보다는 `<a>` 이용 | ||
- `<a href>` 요소가 없으면 Google이 URL을 크롤링하지 않음 | ||
- HTTPS 적용 | ||
- https 보안 프로토콜을 사용하는 사이트에 SEO 점수를 추가 부여함 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이제 이 https 를 만들려고... cors 에러 우당탕탕..ㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
나랑 비슷한 참고자료를 읽었는데, 다시 확인하는 계기가 되었고 참고자료를 아주 잘 정리해서 나중에 보기도 좋을 것 같네요 ㅎㅎ
나도 다음에 지피티친구에게 물어봐야겠다 🔥🔥
- 리플로우를 발생시키는 속성 | ||
```css | ||
position / width / height / margin / padding / display / top / left / right / bottom / | ||
box-sizing / border-color / text-align / border / border-width / | ||
font-family / float / font-size / font-weight / line-height / vertical-align / | ||
white-space / word-wrap / text-overflow / text-shadow ... | ||
``` | ||
- 리페인트를 발생시키는 속성 | ||
```css | ||
color / border-style / visibility / background / background-color / | ||
background-image / background-position / background-repeat / background-size / | ||
text-decoration / outline / outline-style / outline-color / outline-width / | ||
border-radius / box-shadow ... | ||
``` | ||
- 리플로우와 리페인트를 발생시키지 않는 속성 | ||
```css | ||
opacity / transform / cursor / z-index ... | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
그니까,, 리플로우에있는 속성을 더 친숙하게 쓰는 편이었어서 리페인트에 더 친숙해지면 좋겠다는 생각이 드는군
- `<script>` : 반드시 순서대로 실행되어야 할 때 | ||
![Untitled 2](https://user-images.githubusercontent.com/55528304/229984619-7deb6ab6-5a4a-4a05-b506-6ac7937151f2.png) | ||
- `<script async>` : 빨리 실행되어야 할 때 | ||
![Untitled 3](https://user-images.githubusercontent.com/55528304/229984623-c4991dc2-9523-427c-85f6-ad343400a252.png) | ||
- `<script defer>` : 마지막에 파싱해도 상관없을 때 | ||
![Untitled 4](https://user-images.githubusercontent.com/55528304/229984626-6642ee13-7a3b-4ede-9534-5bcb0ad15b4e.png) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오 잘 정리해줘서 꿀팁을 얻고 가요 --
[1주차 기본/심화 과제] 웨비들의 냠냠 🍰 창업🏠
✨ 구현 기능 명세
생각 과제
웹 최적화는 무엇일까?
최적화가 필요한 이유는 무엇일까?
이를 위해 어떤 개발을 해야 할까?
최적화를 위한 개발을 꼭 해야 할까?
🌼 PR Point
🥺 소요 시간, 느낀 점
2.5h
🌈 구현 결과물
md 파일은 좀 보기에 어려우니 여기에도 내용 첨부할게요!
Q1. 웹 최적화는 무엇일까?
웹 최적화 원하는 웹 성능을 구현하기 위한 조건을 만드는 것으로, 다양한 부분으로 살펴볼 수 있다.
✅ 속도 최적화
페이지 로딩 시간을 빠르게 하는 것이다. 로딩 속도가 빠를수록 사용자들이 웹사이트를 더 많이 방문하고, 더 오래 머무르며, 더 긍정적인 사용자 경험을 가지게 되기 때문이다. 또한 검색 엔진에서도 웹사이트의 속도를 고려하여 검색 순위를 결정하기 때문에, 웹 속도 최적화는 검색 엔진 최적화(SEO)에도 중요한 요소 중 하나이다. 속도 최적화를 위해 다음과 같은 방법을 사용할 수 있다.
✅ 사용성 최적화
UX 측면에서 사용자들이 서비스를 쉽게 이해하고 사용할 수 있는 경험을 제공하는 것이다. 사용자의 요구와 욕구에 맞추어 페이지를 구성하고, 사용자들이 겪을 문제점을 파악하고 해결하기 위해 사용자의 피드백을 수집하거나 웹사이트에서 발생하는 데이터를 분석할 수 있다. 사용성 최적화를 위한 요소에는 다음과 같은 것들이 있다.
✅ 안정성 최적화
웹사이트가 오류 없이 안정적으로 동작하도록 하는 것이다. 사용자의 이탈률을 감소시키는데 중요하다. 안정성 최적화를 위해 다음과 같은 방법을 사용할 수 있다.
✅ SEO 최적화
웹사이트가 검색 엔진에 잘 노출시켜서 더 많은 사용자를 유도하기 위한 작업이다. 검색 엔진의 알고리즘을 이해하고 그에 맞게 사이트를 구성해야 한다. SEO 최적화를 위한 방법은 다음과 같은 것들이 있다.
Q2. 최적화가 필요한 이유는 무엇일까?
웹 최적화는 궁극적으로 사용자를 더 많이 끌어모으기 위해서이다. 웹이 최적화된다는 것은 다른 사이트에 비해 자주 상단에 노출되어 유입률을 높이고, 빠른 속도와 좋은 사용성으로 방문한 사용자의 이탈률을 줄여 서비스에서 기대하는 사용자의 작용을 유도할 수 있고 이는 사용자의 수를 늘리는 것으로 이어진다. 또한 메모리 사용과 처리 시간 등 컴퓨터의 여러 리소스를 소모하며 동작하는 웹 환경에서 최소한의 데이터로 가장 빠른 시간안에 사용자에게 화면을 띄우므로써 각종 비용 대비 효과를 늘리고 수익 창출에 도움이 될 수 있다.
Q3. 이를 위해 어떤 개발을 해야 할까?
✅ 성능 최적화
성능 측정 도구 사용하기
✅ 렌더링 최적화
리플로우를 최대한 적게 발생시키면서 빠르게 화면을 그리는 것을 목표로 한다.
CSS 최적화
브라우저에 스타일이 그려지는 순서는 위와 같다. 레이아웃에 영향을 주는 css 속성을 변경할 경우 ‘Layout’부터 다시 그려지게 되는데 이를 리플로우라고 한다.
레이아웃에 영향을 주지 않는 속성을 변경하면 ‘Paint’부터 다시 수행하게 되는데 이를 리페인트라고 한다. 리플로우가 일어나면 전체 픽셀을 다시 계산해야 하기 때문에 되도록 리페인트 속성을 사용하여 스타일을 작성하는게 좋다.
absolute
나fixed
로 설정하면 주변 요소에 영향을 주지 않는다.HTML 최적화
애니메이션 최적화
transform
은 리플로우와 리페인트를 발생시키지 않으므로 렌더링 속도를 향상시킬 수 있다.JavaScript 최적화
DOM의 속성을 변경하면 화면 업데이트를 위해 레이아웃이 발생할 수 있는데, 특정 속성을 읽을 때 최신 값을 계산하기 위해 레이아웃이 동기적으로 발생하는 것을 강제 동기 레이아웃이라고 한다. 이는 JS 실행 시간을 증가시킨다.
한 프레임 내에서 강제 동기 레이아웃이 연속적으로 발생하는 것을 막아야 한다.
더보기
✅ 로딩 최적화
css는 head에서, js는 body 하단에서 불러오기
media 속성 사용
반응형 조건별로 css를 불러온다.
async/defer
async와 defer 속성을 사용하면 파일의 실행 시점을 조정할 수 있다.
<script>
: 반드시 순서대로 실행되어야 할 때<script async>
: 빨리 실행되어야 할 때<script defer>
: 마지막에 파싱해도 상관없을 때이미지 최적화
<picture>
사용파일 압축하기
CDN 사용
Content Delivery Network로, 유저에게 많은 콘텐츠를 손실없이 빠르게 전달할 수 있다.
캐싱
이전과 동일한 리소스 요청이 왔을 때 저장해둔 파일을 사용하여 더 빠르게 로딩할 수 있다.
✅ SEO 최적화
Google SEO 기본 가이드
Google의 SEO 체크리스트 항목 및 중요도 배점
SEO 최적화를 위한 코드 작성
<div>
,<button>
보다는<a>
이용<a href>
요소가 없으면 Google이 URL을 크롤링하지 않음Q4. 최적화를 위한 개발을 꼭 해야 할까?
웹 사이트의 목적과 상황에 따라 큰 부분을 차지할 수 있다. 최적화는 사용자 경험의 개선으로 이어지고, 이는 기업의 실적으로 이어지기 때문이다. 비용 측면이 아니더라도, 다양한 사용자들이 직접 사용하고 가치를 얻을 서비스를 개발하는 입장에서 사용자의 입장, UX를 고려하는 것은 필수불가결하다고 생각한다.
또한 웹 어플리케이션은 복합적인 환경 위에서 동작하며, 다양한 브라우저의 기술이 빠른 속도로 변화하므로 프론트엔드 개발자로서 이런 변화의 속도에 발맞춰 계속해서 공부하고 페이지를 개선하는 것은 반드시 갖춰야 할 자세이다.