μΌκ΄ μ λ°μ΄νΈλ‘ 리μ‘νΈ μ ν리μΌμ΄μ μ μ΅κ³ μ±λ₯μ λ°ννμΈμ. μν λ³κ²½μ μ΅μ ννμ¬ ν¨μ¨μ±κ³Ό λ λΆλλ¬μ΄ μ¬μ©μ κ²½νμ μ»λ λ°©λ²μ μμ보μΈμ.
리μ‘νΈ μΌκ΄ μ λ°μ΄νΈ ν μ΅μ ν: μν λ³κ²½ ν¨μ¨μ±
μ¬μ©μ μΈν°νμ΄μ€ ꡬμΆμ μν΄ λ리 μ±νλ μλ°μ€ν¬λ¦½νΈ λΌμ΄λΈλ¬λ¦¬μΈ 리μ‘νΈλ μνν μ¬μ©μ κ²½νμ μ 곡νκΈ° μν΄ μ±λ₯μ μ°μ μν©λλ€. 리μ‘νΈμ μ±λ₯ μ΅μ νμμ μ€μν μΈ‘λ©΄ μ€ νλλ μΌκ΄ μ λ°μ΄νΈ λ©μ»€λμ¦μ λλ€. μΌκ΄ μ λ°μ΄νΈλ₯Ό μ΄ν΄νκ³ ν¨κ³Όμ μΌλ‘ νμ©νλ©΄, νΉν μν λ³κ²½μ΄ μ¦μ μλ리μ€μμ 리μ‘νΈ μ ν리μΌμ΄μ μ λ°μμ±κ³Ό ν¨μ¨μ±μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
리μ‘νΈ μΌκ΄ μ λ°μ΄νΈλ 무μμΈκ°?
리μ‘νΈμμλ μ»΄ν¬λνΈμ μνκ° λ³κ²½λ λλ§λ€ ν΄λΉ μ»΄ν¬λνΈμ κ·Έ μμλ€μ 리λ λλ§μ νΈλ¦¬κ±°ν©λλ€. μ΅μ νκ° μλ€λ©΄ κ° μν λ³κ²½μ μ¦κ°μ μΈ λ¦¬λ λλ§μΌλ‘ μ΄μ΄μ§ κ²μ λλ€. μ΄λ νΉν μ§§μ κΈ°κ° λ΄μ μ¬λ¬ μν λ³κ²½μ΄ λ°μν κ²½μ° λΉν¨μ¨μ μΌ μ μμ΅λλ€. μΌκ΄ μ λ°μ΄νΈλ μ¬λ¬ μν μ λ°μ΄νΈλ₯Ό λ¨μΌ 리λ λλ§ μ£ΌκΈ°λ‘ κ·Έλ£Ήννμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€. 리μ‘νΈλ λͺ¨λ λκΈ°μ μ½λκ° μ€νλκΈ°λ₯Ό μ§λ₯μ μΌλ‘ κΈ°λ€λ¦° ν μ΄λ¬ν μ λ°μ΄νΈλ₯Ό ν¨κ» μ²λ¦¬ν©λλ€. μ΄λ 리λ λλ§ νμλ₯Ό μ΅μννμ¬ μ±λ₯ ν₯μμΌλ‘ μ΄μ΄μ§λλ€.
μ΄λ κ² μκ°ν΄λ³΄μΈμ: μΌν λͺ©λ‘μ μλ κ° νλͺ©μ μ¬κΈ° μν΄ μ¬λ¬ λ² κ°λ³μ μΌλ‘ μλ£νμ μ κ°λ λμ , νμν λͺ¨λ νλͺ©μ λͺ¨μ ν λ²λ§ κ°λλ€. μ΄λ μκ°κ³Ό μμμ μ μ½ν΄ μ€λλ€.
μΌκ΄ μ λ°μ΄νΈλ μ΄λ»κ² μλνλκ°?
리μ‘νΈλ νλ₯Ό νμ©νμ¬ μν μ
λ°μ΄νΈλ₯Ό κ΄λ¦¬ν©λλ€. setState
(λλ useState
κ° λ°ννλ μν μ
λ°μ΄νΈ ν¨μ)λ₯Ό νΈμΆν λ 리μ‘νΈλ μ¦μ μ»΄ν¬λνΈλ₯Ό 리λ λλ§νμ§ μμ΅λλ€. λμ , μ
λ°μ΄νΈλ₯Ό νμ μΆκ°ν©λλ€. νμ¬ μ΄λ²€νΈ 루ν μ£ΌκΈ°κ° μλ£λλ©΄(μΌλ°μ μΌλ‘ λͺ¨λ λκΈ°μ μ½λκ° μ€νμ λ§μΉ ν), 리μ‘νΈλ νλ₯Ό μ²λ¦¬νκ³ λͺ¨λ μΌκ΄ μ
λ°μ΄νΈλ₯Ό λ¨μΌ ν¨μ€λ‘ μ μ©ν©λλ€. μ΄ λ¨μΌ ν¨μ€λ λμ λ μν λ³κ²½ μ¬νμ κ°μ§κ³ μ»΄ν¬λνΈμ 리λ λλ§μ νΈλ¦¬κ±°ν©λλ€.
λκΈ°μ μ λ°μ΄νΈμ λΉλκΈ°μ μ λ°μ΄νΈ
λκΈ°μ μν μ
λ°μ΄νΈμ λΉλκΈ°μ μν μ
λ°μ΄νΈλ₯Ό ꡬλ³νλ κ²μ΄ μ€μν©λλ€. 리μ‘νΈλ λκΈ°μ μ
λ°μ΄νΈλ₯Ό μλμΌλ‘ μΌκ΄ μ²λ¦¬ν©λλ€. κ·Έλ¬λ setTimeout
, setInterval
, νλ‘λ―Έμ€(.then()
) λλ 리μ‘νΈμ μ μ΄ λ°μμ λμ€ν¨μΉλ μ΄λ²€νΈ νΈλ€λ¬ λ΄μ λΉλκΈ°μ μ
λ°μ΄νΈλ μ΄μ λ²μ μ 리μ‘νΈμμλ μλμΌλ‘ μΌκ΄ μ²λ¦¬λμ§ μμμ΅λλ€. μ΄λ μκΈ°μΉ μμ λμκ³Ό μ±λ₯ μ νλ₯Ό μ λ°ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, μΌκ΄ μ
λ°μ΄νΈ μμ΄ setTimeout
μ½λ°± λ΄μμ μΉ΄μ΄ν°λ₯Ό μ¬λ¬ λ² μ
λ°μ΄νΈνλ€κ³ μμν΄λ³΄μΈμ. κ° μ
λ°μ΄νΈλ λ³λμ 리λ λλ§μ νΈλ¦¬κ±°νμ¬ μ μ¬μ μΌλ‘ λ²λ²
κ±°λ¦¬κ³ λΉν¨μ¨μ μΈ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ΄λν κ²μ
λλ€.
μΌκ΄ μ λ°μ΄νΈμ μ΄μ
- μ±λ₯ ν₯μ: 리λ λλ§ νμλ₯Ό μ€μ΄λ κ²μ νΉν 볡μ‘ν μ»΄ν¬λνΈμ λκ·λͺ¨ μ ν리μΌμ΄μ μμ λ λμ μ ν리μΌμ΄μ μ±λ₯μΌλ‘ μ§μ μ΄μ΄μ§λλ€.
- μ¬μ©μ κ²½ν κ°μ : ν¨μ¨μ μΈ λ¦¬λ λλ§μ λ λΆλλ½κ³ λ°μμ±μ΄ μ’μ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λ€μ΄ μ λ°μ μΌλ‘ λ λμ μ¬μ©μ κ²½νμ μ 곡ν©λλ€.
- μμ μλͺ¨ κ°μ: λΆνμν 리λ λλ§μ μ΅μνν¨μΌλ‘μ¨ μΌκ΄ μ λ°μ΄νΈλ CPU λ° λ©λͺ¨λ¦¬ μμμ μ μ½νμ¬ λ ν¨μ¨μ μΈ μ ν리μΌμ΄μ μ κΈ°μ¬ν©λλ€.
- μμΈ‘ κ°λ₯ν λμ: μΌκ΄ μ λ°μ΄νΈλ μ¬λ¬ μ λ°μ΄νΈ ν μ»΄ν¬λνΈμ μνκ° μΌκ΄λλλ‘ λ³΄μ₯νμ¬ λ μμΈ‘ κ°λ₯νκ³ μ λ’°ν μ μλ λμμΌλ‘ μ΄μ΄μ§λλ€.
μΌκ΄ μ λ°μ΄νΈ μ€μ μμ
μμ 1: ν΄λ¦ νΈλ€λ¬ λ΄μ λ€μ€ μν μ λ°μ΄νΈ
νλμ ν΄λ¦ νΈλ€λ¬ λ΄μμ μ¬λ¬ μν λ³μλ₯Ό μ λ°μ΄νΈν΄μΌ νλ μλ리μ€λ₯Ό μκ°ν΄ 보μΈμ:
import React, { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
const [message, setMessage] = useState('');
const handleClick = () => {
setCount(count + 1);
setMessage('Button clicked!');
};
return (
Count: {count}
Message: {message}
);
}
export default Example;
μ΄ μμ μμ setCount
μ setMessage
λ λͺ¨λ handleClick
ν¨μ λ΄μμ νΈμΆλ©λλ€. 리μ‘νΈλ μ΄λ¬ν μ
λ°μ΄νΈλ₯Ό μλμΌλ‘ μΌκ΄ μ²λ¦¬νμ¬ μ»΄ν¬λνΈμ λ¨μΌ 리λ λλ§μ μ λ°ν©λλ€. μ΄λ λ λ²μ λ³λ 리λ λλ§μ νΈλ¦¬κ±°νλ κ²λ³΄λ€ ν¨μ¬ ν¨μ¨μ μ
λλ€.
μμ 2: νΌ μ μΆ νΈλ€λ¬ λ΄μ μν μ λ°μ΄νΈ
νΌ μ μΆμ μ’ μ’ μ¬μ©μ μ λ ₯μ κΈ°λ°μΌλ‘ μ¬λ¬ μν λ³μλ₯Ό μ λ°μ΄νΈνλ κ²μ ν¬ν¨ν©λλ€:
import React, { useState } from 'react';
function FormExample() {
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const handleSubmit = (event) => {
event.preventDefault();
setName('');
setEmail('');
console.log('Form submitted:', { name, email });
};
return (
);
}
export default FormExample;
μ¦μ λͺ ννμ§λ μμ§λ§, μ¬μ©μκ° μ λ ₯ν λ λ°λ³΅μ μΌλ‘ νΈμΆλλ `setName`κ³Ό `setEmail`μ‘°μ°¨λ *κ° μ΄λ²€νΈ νΈλ€λ¬ μ€ν λ΄μμ* ν¨μ¨μ μΌλ‘ μΌκ΄ μ²λ¦¬λ©λλ€. μ¬μ©μκ° νΌμ μ μΆνλ©΄ μ΅μ’ κ°μ μ΄λ―Έ μ€μ λμ΄ λ¨μΌ 리λ λλ§ λ΄μμ μ²λ¦¬λ μ€λΉκ° λ©λλ€.
λΉλκΈ° μ λ°μ΄νΈ λ¬Έμ ν΄κ²° (리μ‘νΈ 17 μ΄ν)
μμ μΈκΈνλ―μ΄, 리μ‘νΈ 17 λ° μ΄μ λ²μ μ λΉλκΈ° μ λ°μ΄νΈλ μλμΌλ‘ μΌκ΄ μ²λ¦¬λμ§ μμμ΅λλ€. μ΄λ λ€νΈμν¬ μμ²μ΄λ νμ΄λ¨Έμ κ°μ λΉλκΈ° μμ μ μ²λ¦¬ν λ μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμμ΅λλ€.
ReactDOM.unstable_batchedUpdates
μ¬μ©νκΈ° (리μ‘νΈ 17 μ΄ν)
μ΄μ λ²μ μ 리μ‘νΈμμ λΉλκΈ° μ
λ°μ΄νΈλ₯Ό μλμΌλ‘ μΌκ΄ μ²λ¦¬νλ €λ©΄ ReactDOM.unstable_batchedUpdates
APIλ₯Ό μ¬μ©ν μ μμμ΅λλ€. μ΄ APIλ₯Ό μ¬μ©νλ©΄ μ¬λ¬ μν μ
λ°μ΄νΈλ₯Ό λ¨μΌ λ°°μΉλ‘ λ¬Άμ΄ λ¨μΌ 리λ λλ§ μ£ΌκΈ°μμ ν¨κ» μ²λ¦¬λλλ‘ ν μ μμ΅λλ€.
import React, { useState } from 'react';
import ReactDOM from 'react-dom';
function AsyncExample() {
const [count, setCount] = useState(0);
const handleClick = () => {
setTimeout(() => {
ReactDOM.unstable_batchedUpdates(() => {
setCount(count + 1);
setCount(count + 1);
});
}, 1000);
};
return (
Count: {count}
);
}
export default AsyncExample;
μ€μ: μ΄λ¦μμ μ μ μλ―μ΄ ReactDOM.unstable_batchedUpdates
λ λΆμμ ν APIμμΌλ©° ν₯ν 리μ‘νΈ λ²μ μμ λ³κ²½λκ±°λ μ κ±°λ μ μμμ΅λλ€. μΌλ°μ μΌλ‘ 리μ‘νΈ 18 μ΄μμμ μ 곡νλ μλ μΌκ΄ μ²λ¦¬λ₯Ό μ¬μ©νλ κ²μ΄ κΆμ₯λ©λλ€.
리μ‘νΈ 18 μ΄μμ μλ μΌκ΄ μ²λ¦¬
리μ‘νΈ 18μ λκΈ°μ μ΄λ λΉλκΈ°μ μ΄λ μκ΄μμ΄ λͺ¨λ μν μ
λ°μ΄νΈμ λν μλ μΌκ΄ μ²λ¦¬λ₯Ό λμ
νμ΅λλ€. μ΄λ λΉλκΈ° μ
λ°μ΄νΈλ₯Ό μΌκ΄ μ²λ¦¬νκΈ° μν΄ λ μ΄μ μλμΌλ‘ ReactDOM.unstable_batchedUpdates
λ₯Ό μ¬μ©ν νμκ° μμμ μλ―Έν©λλ€. 리μ‘νΈ 18μ μ΄λ₯Ό μλμΌλ‘ μ²λ¦¬νμ¬ μ½λλ₯Ό λ¨μννκ³ μ±λ₯μ ν₯μμν΅λλ€.
μ΄λ μΌλ°μ μΈ μ±λ₯ λ¬Έμ μ μμΈμ μ κ±°νκ³ ν¨μ¨μ μΈ λ¦¬μ‘νΈ μ ν리μΌμ΄μ μ λ μ½κ² μμ±ν μ μκ² ν΄μ£Όλ―λ‘ μλΉν κ°μ μ λλ€. μλ μΌκ΄ μ²λ¦¬λ₯Ό ν΅ν΄ μν μ λ°μ΄νΈλ₯Ό μλμΌλ‘ μ΅μ ννλ κ²μ λν΄ κ±±μ νμ§ μκ³ μ ν리μΌμ΄μ λ‘μ§ μμ±μ μ§μ€ν μ μμ΅λλ€.
μλ μΌκ΄ μ²λ¦¬μ μ΄μ
- λ¨μνλ μ½λ: μλ μΌκ΄ μ²λ¦¬μ νμμ±μ μ κ±°νμ¬ μ½λλ₯Ό λ κΉλνκ³ μ μ§λ³΄μνκΈ° μ½κ² λ§λλλ€.
- μ±λ₯ ν₯μ: λͺ¨λ μν μ λ°μ΄νΈκ° μΌκ΄ μ²λ¦¬λλλ‘ λ³΄μ₯νμ¬ λ λμ λ²μμ μλ리μ€μμ λ λμ μ±λ₯μ μ 곡ν©λλ€.
- μΈμ§ λΆν κ°μ: μΌκ΄ μ²λ¦¬μ λν΄ μκ°ν νμκ° μκ² νμ¬ μ ν리μΌμ΄μ μ λ€λ₯Έ μΈ‘λ©΄μ μ§μ€ν μ μκ² ν©λλ€.
- λ μΌκ΄λ λμ: λ€μν μ νμ μν μ λ°μ΄νΈμ κ±Έμ³ λ μΌκ΄λκ³ μμΈ‘ κ°λ₯ν λμμ μ 곡ν©λλ€.
μν λ³κ²½ μ΅μ νλ₯Ό μν μ€μ©μ μΈ ν
리μ‘νΈμ μΌκ΄ μ λ°μ΄νΈ λ©μ»€λμ¦μ΄ μλΉν μ±λ₯ μ΄μ μ μ 곡νμ§λ§, μ ν리μΌμ΄μ μμ μν λ³κ²½μ λμ± μ΅μ ννκΈ° μν΄ λ°λ₯Ό μ μλ λͺ κ°μ§ μ€μ©μ μΈ νμ΄ μμ΅λλ€:
- λΆνμν μν μ λ°μ΄νΈ μ΅μν: μ΄λ€ μν λ³μκ° μ λ§λ‘ νμνμ§ μ μ€νκ² κ³ λ €νκ³ λΆνμνκ² μνλ₯Ό μ λ°μ΄νΈνλ κ²μ νΌνμΈμ. μ€λ³΅λ μν μ λ°μ΄νΈλ μΌκ΄ μ λ°μ΄νΈκ° μλλΌλ λΆνμν 리λ λλ§μ μ λ°ν μ μμ΅λλ€.
- ν¨μν μ
λ°μ΄νΈ μ¬μ©: μ΄μ μνλ₯Ό κΈ°λ°μΌλ‘ μνλ₯Ό μ
λ°μ΄νΈν λλ
setState
μ ν¨μν νν(λλuseState
κ° λ°ννλ μ λ°μ΄ν° ν¨μ)λ₯Ό μ¬μ©νμΈμ. μ΄λ κ² νλ©΄ μ λ°μ΄νΈκ° μΌκ΄ μ²λ¦¬λ λμλ μ¬λ°λ₯Έ μ΄μ μνλ‘ μμ νλ κ²μ 보μ₯ν©λλ€. - μ»΄ν¬λνΈ λ©λͺ¨μ΄μ μ΄μ
: λμΌν propsλ₯Ό μ¬λ¬ λ² λ°λ μ»΄ν¬λνΈλ₯Ό λ©λͺ¨μ΄μ μ΄μ
νκΈ° μν΄
React.memo
λ₯Ό μ¬μ©νμΈμ. μ΄λ μ΄λ¬ν μ»΄ν¬λνΈμ λΆνμν 리λ λλ§μ λ°©μ§ν©λλ€. useCallback
κ³ΌuseMemo
μ¬μ©: μ΄ ν λ€μ κ°κ° ν¨μμ κ°μ λ©λͺ¨μ΄μ μ΄μ νλ λ° λμμ΄ λ μ μμ΅λλ€. μ΄λ μ΄λ¬ν ν¨μλ κ°μ μμ‘΄νλ μμ μ»΄ν¬λνΈμ λΆνμν 리λ λλ§μ λ°©μ§ν μ μμ΅λλ€.- κΈ΄ λͺ©λ‘ κ°μν: κΈ΄ λ°μ΄ν° λͺ©λ‘μ λ λλ§ν λλ κ°μν κΈ°μ μ μ¬μ©νμ¬ νμ¬ νλ©΄μ 보μ΄λ νλͺ©λ§ λ λλ§νμΈμ. μ΄λ νΉν λκ·λͺ¨ λ°μ΄ν°μ
μ λ€λ£° λ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. μ΄λ₯Ό μν΄
react-window
λ°react-virtualized
μ κ°μ λΌμ΄λΈλ¬λ¦¬κ° μ μ©ν©λλ€. - μ ν리μΌμ΄μ νλ‘νμΌλ§: 리μ‘νΈμ νλ‘νμΌλ¬ λꡬλ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ μ μ±λ₯ λ³λͺ© νμμ μλ³νμΈμ. μ΄ λꡬλ λ무 μμ£Ό 리λ λλ§λκ±°λ λ λλ§νλ λ° λ무 μ€λ 걸리λ μ»΄ν¬λνΈλ₯Ό μ νν μ°Ύμλ΄λ λ° λμμ΄ λ μ μμ΅λλ€.
κ³ κΈ κΈ°λ²: λλ°μ΄μ±κ³Ό μ€λ‘νλ§
κ²μμ°½μ μ λ ₯νλ κ²κ³Ό κ°μ΄ μ¬μ©μ μ λ ₯μ μν΄ μν μ λ°μ΄νΈκ° λΉλ²νκ² νΈλ¦¬κ±°λλ μλ리μ€μμλ λλ°μ΄μ±κ³Ό μ€λ‘νλ§μ΄ μ±λ₯ μ΅μ νλ₯Ό μν μ μ©ν κΈ°λ²μ΄ λ μ μμ΅λλ€. μ΄λ¬ν κΈ°λ²μ μν μ λ°μ΄νΈκ° μ²λ¦¬λλ μλλ₯Ό μ ννμ¬ κ³Όλν 리λ λλ§μ λ°©μ§ν©λλ€.
λλ°μ΄μ±
λλ°μ΄μ±μ μΌμ κΈ°κ° λμ νλμ΄ μμ λκΉμ§ ν¨μ μ€νμ μ§μ°μν΅λλ€. μν μ λ°μ΄νΈμ λ§₯λ½μμ μ΄λ μ¬μ©μκ° μΌμ μκ° λμ νμ΄νμ λ©μΆ νμλ§ μνκ° μ λ°μ΄νΈλλ€λ κ²μ μλ―Έν©λλ€. μ΄λ κ²μ 쿼리μ κ°μ΄ μ΅μ’ κ°μλ§ λ°μν΄μΌ νλ μλ리μ€μ μ μ©ν©λλ€.
μ€λ‘νλ§
μ€λ‘νλ§μ ν¨μκ° μ€νλ μ μλ μλλ₯Ό μ νν©λλ€. μν μ λ°μ΄νΈμ λ§₯λ½μμ μ΄λ μ¬μ©μκ° μΌλ§λ μμ£Ό νμ΄ννλ μκ΄μμ΄ μνκ° νΉμ λΉλλ‘λ§ μ λ°μ΄νΈλλ€λ κ²μ μλ―Έν©λλ€. μ΄λ μ§νλ₯ νμμ€κ³Ό κ°μ΄ μ¬μ©μμκ² μ§μμ μΈ νΌλλ°±μ μ 곡ν΄μΌ νλ μλ리μ€μ μ μ©ν©λλ€.
νν ν¨μ κ³Ό νΌνλ λ°©λ²
- μν μ§μ λ³κ²½: μν κ°μ²΄λ₯Ό μ§μ λ³κ²½νλ κ²μ νΌνμΈμ. νμ
setState
(λλuseState
κ° λ°ννλ μ λ°μ΄ν° ν¨μ)λ₯Ό μ¬μ©νμ¬ μνλ₯Ό μ λ°μ΄νΈνμΈμ. μνλ₯Ό μ§μ λ³κ²½νλ©΄ μκΈ°μΉ μμ λμκ³Ό μ±λ₯ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. - λΆνμν 리λ λλ§: μ»΄ν¬λνΈ νΈλ¦¬λ₯Ό μ μ€νκ² λΆμνμ¬ λΆνμν 리λ λλ§μ μλ³νκ³ μ κ±°νμΈμ. λ©λͺ¨μ΄μ μ΄μ κΈ°μ μ μ¬μ©νκ³ μμ μ»΄ν¬λνΈμ λΆνμν propsλ₯Ό μ λ¬νλ κ²μ νΌνμΈμ.
- 볡μ‘ν μ¬μ‘°μ κ³Όμ : μ¬μ‘°μ κ³Όμ μ λλ¦¬κ² λ§λ€ μ μλ μ§λμΉκ² 볡μ‘ν μ»΄ν¬λνΈ κ΅¬μ‘°λ₯Ό λ§λλ κ²μ νΌνμΈμ. μ»΄ν¬λνΈ νΈλ¦¬λ₯Ό λ¨μννκ³ μ½λ λΆν κ³Ό κ°μ κΈ°μ μ μ¬μ©νμ¬ μ±λ₯μ ν₯μμν€μΈμ.
- μ±λ₯ κ²½κ³ λ¬΄μ: 리μ‘νΈ κ°λ°μ λꡬμ μ±λ₯ κ²½κ³ μ μ£Όμλ₯Ό κΈ°μΈμ΄μΈμ. μ΄λ¬ν κ²½κ³ λ μ ν리μΌμ΄μ μ μ μ¬μ μΈ μ±λ₯ λ¬Έμ μ λν κ·μ€ν ν΅μ°°λ ₯μ μ 곡ν μ μμ΅λλ€.
κ΅μ ν κ³ λ €μ¬ν
κΈλ‘λ² κ³ κ°μ μν 리μ‘νΈ μ ν리μΌμ΄μ μ κ°λ°ν λλ κ΅μ ν(i18n)μ νμ§ν(l10n)λ₯Ό κ³ λ €νλ κ²μ΄ μ€μν©λλ€. μ΄λ¬ν κ΄νμ μ ν리μΌμ΄μ μ λ€μν μΈμ΄, μ§μ λ° λ¬Ένμ λ§κ² μ‘°μ νλ κ²μ ν¬ν¨ν©λλ€.
- μΈμ΄ μ§μ: μ ν리μΌμ΄μ
μ΄ μ¬λ¬ μΈμ΄λ₯Ό μ§μνλμ§ νμΈνμΈμ. λ²μμ κ΄λ¦¬νκ³ μΈμ΄ κ°μ λμ μΌλ‘ μ ννλ €λ©΄
react-i18next
μ κ°μ i18n λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμΈμ. - λ μ§ λ° μκ° νμ: κ° μ§μμ λ§λ νμμΌλ‘ λ μ§μ μκ°μ νμνλ €λ©΄ λ‘μΌμΌ μΈμ λ μ§ λ° μκ° μμμ μ¬μ©νμΈμ.
- μ«μ νμ: κ° μ§μμ λ§λ νμμΌλ‘ μ«μλ₯Ό νμνλ €λ©΄ λ‘μΌμΌ μΈμ μ«μ μμμ μ¬μ©νμΈμ.
- ν΅ν νμ: κ° μ§μμ λ§λ νμμΌλ‘ ν΅νλ₯Ό νμνλ €λ©΄ λ‘μΌμΌ μΈμ ν΅ν μμμ μ¬μ©νμΈμ.
- μ€λ₯Έμͺ½μμ μΌμͺ½(RTL) μ§μ: μ ν리μΌμ΄μ μ΄ μλμ΄ λ° νλΈλ¦¬μ΄μ κ°μ RTL μΈμ΄λ₯Ό μ§μνλμ§ νμΈνμΈμ. LTR λ° RTL μΈμ΄ λͺ¨λμ μ μνλ λ μ΄μμμ λ§λ€λ €λ©΄ CSS λ Όλ¦¬μ μμ±μ μ¬μ©νμΈμ.
κ²°λ‘
리μ‘νΈμ μΌκ΄ μ λ°μ΄νΈ λ©μ»€λμ¦μ μ ν리μΌμ΄μ μ μ±λ₯μ μ΅μ ννκΈ° μν κ°λ ₯ν λꡬμ λλ€. μΌκ΄ μ λ°μ΄νΈμ μλ λ°©μμ μ΄ν΄νκ³ μ΄ κΈμμ μ€λͺ ν μ€μ©μ μΈ νμ λ°λ₯΄λ©΄ 리μ‘νΈ μ ν리μΌμ΄μ μ λ°μμ±κ³Ό ν¨μ¨μ±μ ν¬κ² ν₯μμμΌ λ λμ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€. 리μ‘νΈ 18μμ μλ μΌκ΄ μ²λ¦¬κ° λμ λλ©΄μ μν λ³κ²½ μ΅μ νκ° λμ± μ¬μμ‘μ΅λλ€. μ΄λ¬ν λͺ¨λ² μ¬λ‘λ₯Ό μ±νν¨μΌλ‘μ¨ λ¦¬μ‘νΈ μ ν리μΌμ΄μ μ΄ μ±λ₯μ΄ λ°μ΄λκ³ νμ₯ κ°λ₯νλ©° μ μ§λ³΄μ κ°λ₯νλλ‘ λ³΄μ₯νμ¬ μ μΈκ³ μ¬μ©μμκ² μνν κ²½νμ μ 곡ν μ μμ΅λλ€.
νΉμ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ κ·Έμ λ°λΌ μ΅μ ν λ Έλ ₯μ μ‘°μ νκΈ° μν΄ λ¦¬μ‘νΈ νλ‘νμΌλ¬μ κ°μ λꡬλ₯Ό νμ©νλ κ²μ μμ§ λ§μΈμ. μ§μμ μΈ λͺ¨λν°λ§κ³Ό κ°μ μ κ³ μ±λ₯ 리μ‘νΈ μ ν리μΌμ΄μ μ μ μ§νλ λ° ν΅μ¬μ λλ€.