Diffing Algorithm
1. Diffing Algorithm์ ํ์์ฑ
React๊ฐ ๊ธฐ์กด ๊ฐ์ DOM๊ณผ ๋ณ๊ฒฝ๋ ์๋ก์ด ๊ฐ์ DOM์ ๋น๊ต ์
๋ณ๊ฒฝ๋ ์๋ก์ด ๊ฐ์ DOM ํธ๋ฆฌ์ ๋ถํฉํ๋๋ก ๊ธฐ์กด์ UI๋ฅผ ํจ์จ์ ์ผ๋ก ๊ฐฑ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ผ ํ์
์ฆ ํ๋์ ํธ๋ฆฌ๋ฅผ ๋ค๋ฅธ ํธ๋ฆฌ๋ก ๋ณํ์ ์ํค๋ ๊ฐ์ฅ ์์ ์กฐ์ ๋ฐฉ์์ ์์๋ด์ผ๋ง ํ์
๊ธฐ์กด์ ์์๋ธ ์กฐ์ ๋ฐฉ์ ์๊ณ ๋ฆฌ์ฆ์ O(n^3)์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์์์.
์ด๋ ๋๋ฌด ๋น์ผ ์ฐ์ฐ์ผ๋ก ๋ ๊ฐ์ง ๊ฐ์ ์ผ๋ก ์๋ก์ด ํด๋ฆฌ์คํฑ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํจ.
์ด ๋ ๊ฐ์ ์ ๊ฑฐ์ ๋ชจ๋ ์ค์ ์ฌ์ฉ ์ฌ๋ก์ ๋ค์ด๋ง๊ณ , React๋ ๋น๊ต ์๊ณ ๋ฆฌ์ฆ(Diffing Algorithm)์ ์ฌ์ฉ
๊ฐ๊ธฐ ์๋ก ๋ค๋ฅธ ๋ ์์๋ ๋ค๋ฅธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ ๊ฒ์ด๋ค.
๊ฐ๋ฐ์๊ฐ ์ ๊ณตํ๋ key ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ , ์ฌ๋ฌ ๋ฒ ๋ ๋๋ง์ ๊ฑฐ์ณ๋ ๋ณ๊ฒฝ๋์ง ๋ง์์ผ ํ๋ ์์ ์์๊ฐ ๋ฌด์์ธ์ง ์์๋ผ ์ ์์ ๊ฒ์ด๋ค.
2. React๊ฐ DOM ํธ๋ฆฌ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ
ํธ๋ฆฌ์ ๋ ๋ฒจ ์์๋๋ก ์ํํ๋ ๋ฐฉ์์ผ๋ก ํ์
์ฆ ๊ฐ์ ๋ ๋ฒจ(์์น)๋ผ๋ฆฌ ๋น๊ต
์ด๋ ๋๋น ์ฐ์ ํ์(BFS)์ ์ผ์ข
1) ๋ค๋ฅธ ํ์
์ DOM ์๋ฆฌ๋จผํธ์ธ ๊ฒฝ์ฐ
DOM ํธ๋ฆฌ๋ ๊ฐ HTML ํ๊ทธ๋ง๋ค ๊ฐ๊ฐ์ ๊ท์น์ด ์์ด ๊ทธ ์๋ ๋ค์ด๊ฐ๋ ์์ ํ๊ทธ๊ฐ ํ์ ์ ์ด๋ผ๋ ํน์ง์ด ์์
์์ ํ๊ทธ์ ๋ถ๋ชจ ํ๊ทธ ๋ํ ์ ํด์ ธ ์๋ค๋ ํน์ง์ด ์๊ธฐ ๋๋ฌธ์, ๋ถ๋ชจ ํ๊ทธ๊ฐ ๋ฌ๋ผ์ง๋ค๋ฉด React๋ ์ด์ ํธ๋ฆฌ๋ฅผ ๋ฒ๋ฆฌ๊ณ ์๋ก์ด ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๊ณ , ์ด์ ์ DOM ๋ ธ๋๋ค์ ์ ๋ถ ํ๊ดด๋จ
2) ๊ฐ์ ํ์
์ DOM ์๋ฆฌ๋จผํธ์ธ ๊ฒฝ์ฐ
ํ์ ์ด ๋ฐ๋์ง ์๋๋ค๋ฉด React๋ ์ต๋ํ ๋ ๋๋ง์ ํ์ง ์๋ ๋ฐฉํฅ์ผ๋ก ์ต์ํ์ ๋ณ๊ฒฝ ์ฌํญ๋ง ์ ๋ฐ์ดํธ
์ ๋ฐ์ดํธํ ๋ด์ฉ์ด ์๊ธฐ๋ฉด virtual DOM ๋ด๋ถ์ ํ๋กํผํฐ๋ง ์์ ํ ๋ค, ๋ชจ๋ ๋ ธ๋์ ๊ฑธ์น ์ ๋ฐ์ดํธ๊ฐ ๋๋๋ฉด ๊ทธ๋ ๋จ ํ๋ฒ ์ค์ DOM์ผ๋ก์ ๋ ๋๋ง์ ์๋
๋ ์๋ฆฌ๋จผํธ ๋น๊ต ์, React๋ ์ ํํ color ์คํ์ผ๋ง ๋ฐ๋๊ณ ์์์ ๋์น์ฑ
๋ฐ๋ผ์ React๋ color ์คํ์ผ๋ง ์์ , ๋ค๋ฅธ ์์๋ ์์ ํ์ง ์์
์ด๋ ๋ฏ ํ๋์ DOM ๋ ธ๋๋ฅผ ์ฒ๋ฆฌํ ๋ค React๋ ๋ค์ด์ด ํด๋น ๋ ธ๋๋ค ๋ฐ์ ์์๋ค์ ์์ฐจ์ ์ผ๋ก ๋์์ ์ํํ๋ฉด์ ์ฐจ์ด๊ฐ ๋ฐ๊ฒฌ๋ ๋๋ง๋ค ๋ณ๊ฒฝํจ
์ด๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค๊ณ ํํ
3) ์์ ์๋ฆฌ๋จผํธ์ ์ฌ๊ท์ ์ฒ๋ฆฌ
์๋์ ๊ฐ์ด ์์ ์๋ฆฌ๋จผํธ ๋ณ๊ฒฝ ์
React๋ ๊ธฐ์กด
<ul>
๊ณผ ์๋ก์ด<ul>
์ ๋น๊ต ์ ์์ ๋ ธ๋๋ฅผ ์์ฐจ์ ์ผ๋ก ์์์๋ถํฐ ์๋๋ก ๋น๊ตํ๋ฉด์ ๋ฐ๋ ์ ์ ์ฐพ์๋๋ฌธ์ ์ฒซ ๋ฒ์งธ ์์ ๋ ธ๋๋ค๊ณผ ๋ ๋ฒ์งธ ์์ ๋ ธ๋๋ค์ด ์ผ์นํ๋ ์ ํ์ธ ํ ์ธ ๋ฒ์งธ ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐ
์ด๋ ๋ฏ React๋ ์์์ ์๋๋ก ์์ฐจ์ ์ผ๋ก ๋น๊ตํ๊ธฐ์ ๋ฆฌ์คํธ์ ์ฒ์์ ์๋ฆฌ๋จผํธ๋ฅผ ์ฝ์ ํ์ ์ด์ ์ฝ๋์ ๋นํด ํจ์ฌ ๋์ ์ฑ๋ฅ์ ๋ผ ์ ์์.
๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ์์ ์๋ฆฌ๋จผํธ ๋ณ๊ฒฝ ์
React๋ ์ฐ๋ฆฌ์ ๊ธฐ๋๋๋ก ์ต์ํ์ผ๋ก ๋์ํ์ง ๋ชปํ๊ฒ ๋จ. ๊ธฐ์กด์ฒ๋ผ ์ฒ์์ ๋ ธ๋๋ค์ ๋น๊ตํ๊ธฐ ๋๋ฌธ
<li>
Duke</li>
์<li>
Connecticut</li>
์ผ๋ก ์์ ๋ ธ๋๊ฐ ์๋ก ๋ค๋ฅด๋ค๊ณ ์ธ์งํ React๋ ๋ฆฌ์คํธ ์ ์ฒด๊ฐ ๋ฐ๋์๋ค๊ณ ๋ฐ์๋ค์์ฆ ๊ทธ๋๋ก์ธ ์์ ๋ ธ๋๋ ์ ์ง์์ผ๋ ๋๋ค๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ๊ณ ์ ๋ถ ๋ฒ๋ฆฌ๊ณ ์๋กญ๊ฒ ๋ ๋๋ง ํด๋ฒ๋ฆฝ๋๋ค. ์ด๋ ๊ต์ฅํ ๋นํจ์จ์ ์ธ ๋์ ๋ฐฉ์
๋ฐ๋ผ์ React๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
key
๋ผ๋ ์์ฑ์ ์ง์
4) ํค(Key)
๋ง์ฝ ์์ ๋ ธ๋๋ค์ด key๋ฅผ ๊ฐ๊ณ ์๋ค๋ฉด, React๋ key๋ก ๊ธฐ์กด ํธ๋ฆฌ์ ์์๊ณผ ์๋ก์ด ํธ๋ฆฌ์ ์์์ ์ผ์น ์ฌ๋ถ ํ์ธ ๊ฐ๋ฅ
React๋ key ์์ฑ์ผ๋ก โ2014โ๋ผ๋ ์์ ์๋ฆฌ๋จผํธ๊ฐ ์๋กญ๊ฒ ์๊ฒผ๊ณ , โ2015โ, โ2016โ ํค๋ฅผ ๊ฐ์ง ์๋ฆฌ๋จผํธ๋ ๊ทธ์ ์์น๋ง ์ด๋ํ๋ค๋ ๊ฑธ ์๊ฒ ๋จ.
๋ฐ๋ผ์ React๋ ๊ธฐ์กด์ ๋์ ๋ฐฉ์๋๋ก ๋ค๋ฅธ ์์ ์๋ฆฌ๋จผํธ๋ ๋ณ๊ฒฝํ์ง ์๊ณ ์ถ๊ฐ๋ ์๋ฆฌ๋จผํธ๋ง ๋ณ๊ฒฝ
์ด key ์์ฑ์๋ ๋ณดํต ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์์ ์ ๋ํฌํ ๊ฐ(ex. Id)์ ๋ถ์ฌํด ์ฃผ๋ฉด ๋จ
ํค๋ ์ ์ญ์ ์ผ๋ก ์ ์ผํ ํ์๋ ์๊ณ , ํ์ ์๋ฆฌ๋จผํธ ์ฌ์ด์์๋ง ์ ์ผํ๋ฉด ๋จ
๋ง์ฝ ์ ๋ํฌํ ๊ฐ์ด ์๋ค๋ฉด ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ key๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅ
๋ค๋ง ๋ฐฐ์ด์ด ๋ค๋ฅด๊ฒ ์ ๋ ฌ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค๋ฉด ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ key๋ก ์ ํํ์ ๊ฒฝ์ฐ๋ ๋นํจ์จ์ ์ผ๋ก ๋์ํ ์ ์๋ค๋ ์ ์ฐธ๊ณ
์ธ๋ฑ์ค๋ ๊ทธ๋๋ก์ง๋ง ๊ทธ ์์๊ฐ ๋ฐ๋๋ค๋ฉด React๋ ๋ฐฐ์ด์ ์ ์ฒด๊ฐ ๋ฐ๋์๋ค๊ณ ๋ฐ์๋ค์ผ ๊ฒ์ด๊ณ , ๊ธฐ์กด์ DOM ํธ๋ฆฌ๋ฅผ ๋ฒ๋ฆฌ๊ณ ์๋ก์ด DOM ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํด ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ผ๋ก ๋์ํ๊ฒ ๋ ๊ฒ์.
Last updated