1. LCP ๋
- LCP(Large Contentful Paint)
- ์น ํ์ด์ง์์ ๊ฐ์ฅ ํฐ ์ฝํ ์ธ ์์๋ฅผ ๋ก๋ํ๊ณ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๋ ์ฑ๋ฅ ์งํ
- ์น ํ์ด์ง์ ๋ก๋ฉ ์๋์ ๋ํ ์ฌ์ฉ์์ ์ธ์์ ๋ฐ์ํ๊ณ ์น ํ์ด์ง์ ๋ํ ์ฌ์ฉ์์ ์ฐธ์ฌ์ ์ํฅ์ ๋ฏธ์น ์ ์๊ธฐ ๋๋ฌธ์ ์ค์ํ ์งํ์!
- LCP๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด
- lazy load, ์ด๋ฏธ์ง ํฌ๊ธฐ ๋ฐ ํ์ ์ต์ ํ, CDN(์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ) ๋ฑ์ ๊ธฐ์ ์ ์ฌ์ฉํด ์ด๋ฏธ์ง ๋ฐ ๋น๋์ค์ ๊ฐ์ ๋์ฉ๋ ์ฝํ ์ธ ์์์ ๋ก๋๋ฅผ ์ต์ ํํ ์ ์์
- HTML, CSS ๋ฐ JS ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์๋ฒ์ ๋ํ ์์ฒญ ์๋ฅผ ์ต์ํํ์ฌ ์น ํ์ด์ง์ ์ ์ฒด ๋ก๋๋ฅผ ์ต์ ํํ ์ ์์
- Chrome DevTools์ Lighthouse ๊ฒ์ฌ ๋๋ WebPageTest์ ๊ฐ์ ๋๊ตดใน ์ฌ์ฉํด ์น ํ์ด์ง์ LCP๋ฅผ ์ธก์ ํ ์ ์์
2. FCP ๋
- FCP(First Contentful Paint)
- ๋ธ๋ผ์ฐ์ ๊ฐ ์น ํ์ด์ง์ ์ฒซ ๋ฒ์งธ ์ฝํ ์ธ ์์๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ธก์ ํ๋ ์ฑ๋ฅ ์งํ
- ๋ด์ฉ ์์๋ ํ ์คํธ, ์ด๋ฏธ์ง ๋๋ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋ ๋ค๋ฅธ ์ ํ์ผ์ด ๋ด์ฉ์ผ ์ ์์
- FCP๋ ์น ํ์ด์ง์ ๋ก๋ฉ ์๋์ ๋ํ ์ฌ์ฉ์์ ์ธ์์ ๋ฐ์ํ๊ณ ์น ํ์ด์ง์ ๋ํ ์ฌ์ฉ์์ ์ฐธ์ฌ์ ์ํฅ์ ๋ฏธ์น ์ ์๊ธฐ ๋๋ฌธ์ ์ค์ํ ์งํ์
- FCP๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด
- HTML, CSS ๋ฐ JS ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์๋ฒ์ ๋ํ ์์ฒญ ์๋ฅผ ์ต์ํํ์ฌ ์ท ํ์ด์ง ๋ก๋๋ฅผ ์ต์ ํํ ์ ์์
- ๋ํ ๋ก๋ ํ๋ก์ธ์ค์์ ์ฐ์ ์์๋ฅผ ์ง์ ํ์ฌ ์์ ๋ด์ฉ๊ณผ ๊ฐ์ ์ค์ํ ๋ฆฌ์์ค์ ๋ก๋๋ฅผ ์ต์ ํํ ์ ์์
3. Controlled Pattern ์ด๋
- Controlled Pattern
- ํผ ์์์ ์ํ๋ฅผ React ์ปดํฌ๋ํธ์ state๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ์
- ์ด ํจํด์ ์ฌ์ฉํ๋ฉด React๊ฐ ํผ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์ดํ ์ ์๊ฒ ๋จ
- ๋ณต์กํ ํผ์ด๋ ๋์ ์ธ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ์ ์ ์ฉ
- Controlled Pattern์ ์ฃผ์ ํน์ง
- ์ํ ๊ด๋ฆฌ
- ํผ ์์์ ๊ฐ์ React์ state๋ก ๊ด๋ฆฌํจ
- ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๋ผ state๋ฅผ ์ ๋ฐ์ดํธ - ๊ฐ ์ค์
- ํผ ์์์ value ์์ฑ์ state ๊ฐ์ผ๋ก ์ค์ - ์ด๋ฒคํธ ํธ๋ค๋ง
- onChange ์ด๋ฒคํธ๋ฅผ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ์ ๊ฐ์งํ๊ณ state๋ฅผ ์ ๋ฐ์ดํธ
- ์ํ ๊ด๋ฆฌ
- Controlled Pattern์ ์ฅ์
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ: React๊ฐ ํผ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์ดํ๋ฏ๋ก UI์ ์ํ ๊ฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅ
- ์ฆ์ ์ ํจ์ฑ ๊ฒ์ฌ: ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ๋ผ ์ฆ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณต
- ์กฐ๊ฑด๋ถ ๋นํ์ฑํ: ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํผ ์์๋ฅผ ์ฝ๊ฒ ๋นํ์ฑํ
- ๊ฐ ํฌ๋งทํ : ์ ๋ ฅ๊ฐ์ ์ฆ์ ํฌ๋งทํ ํ๊ฑฐ๋ ๋ณํํ ์ ์์
- ์ฃผ์์ฌํญ
- ์ฑ๋ฅ: ๋ง์ ์์ ํผ ์์๊ฐ ์๋ ๊ฒฝ์ฐ, ๊ฐ ์ ๋ ฅ๋ง๋ค ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ ์ ์์ด ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์
- ๋ณต์ก์ฑ: ๊ฐ๋จํ ํผ์ ๊ฒฝ์ฐ Uncontrolled ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๊ฐ๋จํ ์ ์์
import React, { useState } from 'react';
function ControlledForm() {
const [inputValue, setInputValue] = useState('');
const handleChange = (event) => {
setInputValue(event.target.value);
};
const handleSubmit = (event) => {
event.preventDefault();
console.log('Submitted value:', inputValue);
};
return (
<form onSubmit={handleSubmit}>
<input type='text' value={inputValue} onChange={handleChange} />
<button type='submit'>Submit</button>
</form>
);
}
4. Uncontrolled Pattern ์ด๋
- Uncontrolled Pattern
- React์์ ํผ ์์์ ์ํ๋ฅผ ์ง์ React์ state๋ก ๊ด๋ฆฌํ์ง ์๊ณ , DOM์ด ๋ด๋ถ์ ์ผ๋ก ๊ด๋ฆฌํ๋๋ก ํ๋ ๋ฐฉ์
- ์ฃผ๋ก ref๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๋๋ง DOM์์ ๊ฐ์ ๊ฐ์ ธ์ด
- ๊ฐ๋จํ ํผ์ด๋ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํ ๊ฒฝ์ฐ, ๋๋ ๋น-React ์ฝ๋์์ ํตํฉ์ด ํ์ํ ๊ฒฝ์ฐ์ ์ ์ฉ
- ํ์ง๋ง React ๊ณต์ ๋ฌธ์์์๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ Controlled ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์!
- Uncontrolled Pattern์ ์ฃผ์ ํน์ง
- ์ํ ๊ด๋ฆฌ
- React์ state๋ฅผ ์ฌ์ฉํ์ง ์๊ณ DOM์ด ์์ฒด์ ์ผ๋ก ์ํ๋ฅผ ๊ด๋ฆฌ
- ํ์ํ ๊ฒฝ์ฐ์๋ง ref๋ฅผ ํตํด DOM์์ ๊ฐ์ ์ฝ์ด์ด - ๊ฐ ์ค์
- ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋ ค๋ฉด defaultValue ์์ฑ์ ์ฌ์ฉ - ์ด๋ฒคํธ ํธ๋ค๋ง
- onChange ์ด๋ฒคํธ๋ฅผ ๋ฐ๋์ ์ฌ์ฉํ ํ์ ์์
- ์ํ ๊ด๋ฆฌ
- Uncontrolled Pattern์ ์ฅ์
- ๊ฐ๋จ์ฑ: ๊ฐ๋จํ ํผ์ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํด์ง ์ ์์
- ์ฑ๋ฅ: React์ state๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ์ ๋ ฅ ์๋ง๋ค ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ์ง ์์
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํตํฉ: React ์ธ๋ถ์ DOM ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉํ๊ธฐ ์ฌ์
- ํ์ผ ์ ๋ ฅ: file input๊ณผ ๊ฐ์ด ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ ์ฉ
- ์ฃผ์์ฌํญ
- ์ ํจ์ฑ ๊ฒ์ฌ: ์ฆ๊ฐ์ ์ธ ์ ํจ์ฑ ๊ฒ์ฌ๋ ์ ๋ ฅ๊ฐ ๋ณํ์ด ์ด๋ ค์
- ๋์ UI: ์ ๋ ฅ๊ฐ์ ๋ฐ๋ผ UI๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ค์
- ๊ฐ ์ด๊ธฐํ: ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ ๋ ฅ๊ฐ์ ์ด๊ธฐํํ๊ฑฐ๋ ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ค์
'Frontend ๐ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node] Dialogflow API๋ฅผ ํ์ฉํ ์ฑ๋ด ์ฌ์ดํธ - 4. Redux์ ๋ฉ์ธ์ง ์ ์ฅ (0) | 2024.08.19 |
---|---|
[Node] Dialogflow API๋ฅผ ํ์ฉํ ์ฑ๋ด ์ฌ์ดํธ - 3. TextQuery Function, EventQuery Function (0) | 2024.08.16 |
[React] ์ฌ์ ๋ ๋๋ง, Suspense etc. (1) | 2024.07.24 |
[React] ํ์ด๋๋ ์ด์ (Hydration), Next etc. (1) | 2024.07.12 |
[React] SPA, SSR, SEO etc. (1) | 2024.07.05 |