1.External Store
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ
๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ ์์คํ ์ ๋ค์ํ ์ธก๋ฉด ๋๋ ์ฑ ์์ ๊ตฌ์ฑ ๋ฐ ๊ฒฉ๋ฆฌ๋ฅผ ๊ฐ์กฐํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์์น์ด๋ค. React์ ๋งฅ๋ฝ์์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ฑ ์์, ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ์ํ ๊ด๋ฆฌ ๋ฐ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ฐ์ ๋ค์ํ ๊ด์ฌ์ฌ๋ฅผ ๋ณ๊ฐ์ ๋ชจ๋์ ๋ถ๋ถ์ผ๋ก ๋ถ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์์ ๋ ์ป๋ ์ด์
๋ชจ๋์ฑ(Modularity): ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์์ ์์ฒด ํฌํจ ๊ตฌ์ฑ ์์๋ก ๋๋๋ฉด ์ ์ง ๊ด๋ฆฌ์ ์ฌ์ฌ์ฉ์ด ๋ ์ฌ์์ง๋ค. ๊ฐ ๊ตฌ์ฑ ์์๋ ํน์ ์ฑ ์์ ์ค์ ์ ๋์ด ๊ฐ๋ณ์ ์ผ๋ก ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ์์ ํ ์ ์๋๋ก ํ๋ค.
์ฝ๋ ์ฌ์ฌ์ฉ์ฑ(Code reusability): ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ด๋ ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๋ฐ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ์ ์ฝํ ์ ์๋ค.
ํ์ (Collaboration): ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํ ํ๋ก์ ํธ์์ ์์ ํ ๋ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์๋ก์ ์ฝ๋๋ฅผ ๋ฐฉํดํ์ง ์๊ณ ๋์์ ์์ ํ ์ ์๋ค. ๊ฐ ๊ฐ๋ฐ์๋ ๋ค๋ฅธ ์ฌ๋์ ๋ฐ์ ๋ฐ์ ์ผ๋ ค ์์ด ํ ๋น๋ ๊ด์ฌ์ฌ์ ์ง์คํ ์ ์๋ค.
React๊ด์ ์์ ๋ค์ํ ๊ธฐ์ ๊ณผ ํจํด์ ์ฌ์ฉํ์ฌ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
๊ตฌ์ฑ ์์ ๊ธฐ๋ฐ ์ํคํ ์ฒ(Component-based architecture): React๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์์ ๊ตฌ์ฑ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋๋ก ๊ถ์ฅํ๋ค. ๊ฐ ๊ตฌ์ฑ ์์๋ ๊ณ ์ ํ ๋ ผ๋ฆฌ์ ํ๋ ์ ํ ์ด์ ์ ์บก์ํํ์ฌ ๋ฌธ์ ๋ฅผ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ ์ ์๋ค. ๊ตฌ์ฑ ์์๋ฅผ ํจ๊ป ๊ตฌ์ฑํ์ฌ ๋ณต์กํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์๋ค.
SRP(Single Responsibility Principle): SRP์ ๋ฐ๋ผ ๊ฐ ๊ตฌ์ฑ ์์๋ ๋จ์ผ ์ฑ ์ ๋๋ ๊ด์ฌ์ฌ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ ๋ ๋๋ง, ์ฌ์ฉ์ ์ ๋ ฅ ์ฒ๋ฆฌ ๋ฐ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ณ๋์ ๊ตฌ์ฑ ์์๊ฐ ์์ ์ ์๋ค.
์ปจํ ์ด๋ ๋ฐ ํ๋ ์ ํ ์ด์ ๊ตฌ์ฑ ์์(Container and Presentational Components): ์ค๋งํธ ์ปดํฌ๋ํธ์ ๋ค ์ปดํฌ๋ํธ๋ผ๊ณ ๋ ํ๋ ์ปจํ ์ด๋์ ํ๋ ์ ํ ์ด์ ์ปดํฌ๋ํธ์ ๊ฐ๋ ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐ ๋์์ด ๋๋ค. ์ปจํ ์ด๋ ์ปดํฌ๋ํธ๋ ๋ก์ง๊ณผ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ฉด ํ๋ ์ ํ ์ด์ ์ปดํฌ๋ํธ๋ ์ ๊ณต๋ ์ํ์ ๊ธฐ๋ฐ์ผ๋ก UI๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ์ค์ ์ ๋๋ค.
์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(State management libraries): React๋ useState ๋ฐ useReducer๋ผ๋ ์์ฒด ์ํ ๊ด๋ฆฌ ์์คํ ์ ์ ๊ณตํ๋ค. ๊ทธ๋ฌ๋ ๋ณด๋ค ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ Redux ๋๋ MobX์ ๊ฐ์ ์ธ๋ถ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ก ์ ํํ ์ ์๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ํ ๊ด๋ฆฌ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ์ค์ ์ง์ค์ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ๋ค.
๋ณ๋์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ(Separate data fetching): React ์ ํ๋ฆฌ์ผ์ด์ ์์๋ API ๋๋ ๊ธฐํ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ ผ๋ฆฌ๋ฅผ ๋ณ๋์ ํ์ผ ๋๋ ํํฌ๋ก ๋ถ๋ฆฌํ๋ฉด ๋ฌธ์ ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒฉ๋ฆฌํ๊ณ ํ ์คํธํ ์ ์๋ค.
Layered Architecture
์์คํ ์ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ๋ณ ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑํ๋ ์ํํธ์จ์ด ์ํคํ ์ฒ ํจํด์ด๋ค. ์ฌ๊ธฐ์ ๊ฐ ๊ณ์ธต์ ํน์ ์ฑ ์์ ๊ฐ์ง๋ฉฐ ์ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ธ์ ํ ๊ณ์ธต๊ณผ ์ํธ ์์ฉํ๋ค. ๊ณ์ธตํ๋ ์ํคํ ์ฒ๋ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ, ๋ชจ๋์ ์ค๊ณ ๋ฐ ์์คํ ์ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ์ ์ด์งํ๋ค.
Layered Architecture์์ ๊ฐ ๊ณ์ธต์ ๊ด๋ จ ๊ธฐ๋ฅ์ ๋ ผ๋ฆฌ์ ๊ทธ๋ฃน์ ๋ํ๋ด๋ฉฐ ํน์ ์์ ์งํฉ์ ๋ด๋นํ๋ฉฐ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ณ์ธต์ ๋ค์๊ณผ ๊ฐ๋ค.
ํ๋ ์ ํ ์ด์ ๊ณ์ธต(Presentation Layer): ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ณ์ธต์ด๋ผ๊ณ ๋ ํ๋ ์ด ๊ณ์ธต์ ์์คํ ๊ณผ ์ฌ์ฉ์ ๊ฐ์ ์ํธ ์์ฉ์ ์ฒ๋ฆฌํ๋ค. ์ ๋ณด ํ์ ๋ฐ ์ฌ์ฉ์ ์ ๋ ฅ ์บก์ฒ์ ์ค์ ์ ๋๋ค. ํ๋ ์ ํ ์ด์ ๊ณ์ธต์๋ ์น ํ์ด์ง, ๋ชจ๋ฐ์ผ ์ฑ ํ๋ฉด ๋๋ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ์ธํฐํ์ด์ค์ ๊ฐ์ ๊ตฌ์ฑ ์์๊ฐ ํฌํจ๋ ์ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต(Application Layer): ๋น์ฆ๋์ค ๋ก์ง ๊ณ์ธต์ด๋ผ๊ณ ๋ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๊ท์น์ด ํฌํจ๋์ด ์๋ค. ์์คํ ์์ ์ํํ๋ ์ค์ ๋์ ๋ฐ ์์ ์ ๋ํ๋ ๋๋ค. ํ๋ ์ ํ ์ด์ ๊ณ์ธต์์ ์์ฒญ์ ๋ฐ์ ์ฒ๋ฆฌํ๊ณ ํ์ํ ์์ ์ ์คํ์ ์กฐ์ ํ๋ค. ์ด ๊ณ์ธต์ ๋น์ฆ๋์ค ๋ ผ๋ฆฌ, ์ํฌํ๋ก ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ ๊ท์น ๊ตฌํ์ ๋ด๋นํ๋ค.
๋๋ฉ์ธ ๊ณ์ธต(Domain Layer): ๋๋ฉ์ธ ๊ณ์ธต์ ๋๋ฉ์ธ๋ณ ๋ ผ๋ฆฌ๋ฅผ ์บก์ํํ๊ณ ๋ฌธ์ ๋๋ฉ์ธ๊ณผ ๊ด๋ จ๋ ๊ฐ๋ ๋ฐ ์ํฐํฐ๋ฅผ ๋ํ๋ ๋๋ค. ์ฌ๊ธฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์ ์ดํ๋ โโ๋น์ฆ๋์ค ๊ฐ์ฒด, ์ํฐํฐ ๋ฐ ๊ท์น์ด ํฌํจ๋๋ค. ๋๋ฉ์ธ ๊ณ์ธต์ ํน์ ๊ธฐ์ ์ด๋ ํ๋ ์์ํฌ์ ๋ ๋ฆฝ์ ์ด๋ฉฐ ์ธํ๋ผ ๋ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ธ๋ถ ์ฌํญ์ ๋ํด ๋ ๋ฆฝ์ ์ด์ด์ผ ํ๋ค.
๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต(Data Access Layer): ์ง์์ฑ ๊ณ์ธต์ด๋ผ๊ณ ๋ ํ๋ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๊ฒ์์ ์ฒ๋ฆฌํ๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ๊ธฐํ ๋ฐ์ดํฐ ์์ค์์ ์ํธ ์์ฉ์ ์ถ์ํํ๋ค. ์ด ๊ณ์ธต์ ์ฟผ๋ฆฌ ์คํ, ๋ฐ์ดํฐ ์ก์ธ์ค, ๋๋ฉ์ธ ๊ฐ์ฒด ์ ์ฅ ๋ฐ ๊ฒ์์ ์ํ ์ธํฐํ์ด์ค ์ ๊ณต์ ๋ด๋นํ๋ค. ๋ฐ์ดํฐ ์ ์ฅ ๋ฉ์ปค๋์ฆ์ ๋ณต์ก์ฑ์ผ๋ก๋ถํฐ ์์ ๊ณ์ธต์ ๋ณดํธํ๊ณ ํตํฉ ๋ฐ์ดํฐ ์ก์ธ์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
์ธํ๋ผ ๊ณ์ธต(Infrastructure Layer): ์ธํ๋ผ ๊ณ์ธต์ ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ฅ์ ํ์ํ ๊ธฐ๋ณธ ์๋น์ค ๋ฐ ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํ๋ค. ์ฌ๊ธฐ์๋ ์ธ๋ถ ์๋น์ค ํตํฉ, ํ์ผ ์์คํ , ๋คํธ์ํฌ ํต์ , ๋ก๊น , ์บ์ฑ ๋ฐ ๋ณด์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ์์๊ฐ ํฌํจ๋๋ค. ์ธํ๋ผ ๊ณ์ธต์ ์์ ๊ณ์ธต์ ์ง์ํ๊ณ ์์ ๊ณ์ธต์ด ํจ๊ณผ์ ์ผ๋ก ์์ ์ ์ํํ ์ ์๋๋ก ํ๋ค.
Layered Architecture์ ์ฃผ์ ์ด์
๋ชจ๋ํ ๋ฐ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ(Modularity and separation of concerns): Layered Architecture๋ ๊ด๋ จ ๊ธฐ๋ฅ์ ๋ณ๊ฐ์ ๊ณ์ธต์ผ๋ก ๊ทธ๋ฃนํํ์ฌ ๊ด์ฌ์ฌ๋ฅผ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ค. ์ด๋ฅผ ํตํด ๊ฐ ๊ณ์ธต์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ํ ์คํธํ ์ ์์ผ๋ฏ๋ก ์์คํ ์ ๋ชจ๋์ ๊ฐ๋ฐ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์ ์ฐ์ฑ ๋ฐ ํ์ฅ์ฑ(Flexibility and scalability): Layered Architecture๋ ์ ์ฒด ์์คํ ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ๊ฐ๋ณ ๊ณ์ธต์ ๊ต์ฒดํ๊ฑฐ๋ ์์ ํ ์ ์๋ ์ ์ฐ์ฑ์ ํ์ฉํ๋ค. ์๋ก์ด ๊ณ์ธต์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๊ณ์ธต์ ์ ๊ฑฐํ์ฌ ๋ณํํ๋ ์๊ตฌ ์ฌํญ์ ์์ฉํ๊ฑฐ๋ ์๋ก์ด ๊ธฐ์ ์ ํตํฉํ ์ ์๋ค. ์ด๋ฌํ ํ์ฅ์ฑ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์์คํ ์ด ์ฑ์ฅํ๊ณ ์งํํ๋ ๋ฐ ๋์์ด ๋๋ค.
์ฝ๋ ์ฌ์ฌ์ฉ์ฑ(Code reusability): ์์คํ ์ ๋ ์ด์ด๋ก ๊ตฌ์ฑํ๋ฉด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ ์์๋ฅผ ์๋ณํ๊ณ ์ฌ๋ฌ ๋ ์ด์ด ๋๋ ํ๋ก์ ํธ์์ ๊ณต์ ํ ์ ์๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ ํจ์จ์ฑ์ด ํฅ์๋๊ณ ์ฝ๋ ์ค๋ณต์ด ์ค์ด๋ญ๋๋ค.
ํ ์คํธ ๊ฐ๋ฅ์ฑ(Testability): Layered Architecture๋ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ค. ๊ฐ ๊ณ์ธต์ ๊ฐ๋ณ์ ์ผ๋ก ํ ์คํธํ ์ ์์ผ๋ฏ๋ก ๋ณด๋ค ์ง์ค์ ์ด๊ณ ๋์์ด ์ง์ ๋ ํ ์คํธ ์๋๋ฆฌ์ค๊ฐ ๊ฐ๋ฅํ๋ค. ๋จ์ ํ ์คํธ, ํตํฉ ํ ์คํธ ๋ฐ ์ข ๋จ ๊ฐ ํ ์คํธ๋ฅผ ๊ฐ ๊ณ์ธต์์ ์ํํ์ฌ ์์คํ ์ด ์ ์ฒด์ ์ผ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ ์ ์๋ค.
Flux Architecture
Flux ์ํคํ ์ฒ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํจํด์ด๋ค. Facebook์์ ๊ฐ๋ฐํ์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํด React์ ํจ๊ป ์ฌ์ฉ๋๋ค. Flux๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ฐ๋ฅด๋ฏ๋ก ๋ณต์กํ ์ํ ์ํธ ์์ฉ์ ๊ด๋ฆฌํ๊ณ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ๋๋ฒ๊ทธํ ์ ์๋ค.
Flux ์ํคํ ์ฒ๋ ๋ค์ ๋ค ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ
Dispatcher: Dispatcher๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ํ๋ธ ์ญํ ์ ํ๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ๋ถ๋ถ์์ ์์ ์ ์์ ํ๊ณ ์ ์ ํ ์ ์ฅ์๋ก ๋ฐ์กํ๋ค. ์์ ์ด ์์ฐจ์ ์ด๊ณ ๊ฒฐ์ ์ ์ธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋๋๋ก ํ๋ค. Dispatcher๋ ๋ฑ๋ก๋ ์ฝ๋ฐฑ ๋ชฉ๋ก์ ์ ์ง ๊ด๋ฆฌํ๊ณ ์์ ์ด ๋ฐ์ก๋ ๋ ์ด๋ฅผ ์๋ฆฌ๋ ์ญํ ์ ํ๋ค.
Actions: Actions์ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ ๋๋ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ๋ํ๋ ๋๋ค. "์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ค." ๋๋ "์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์๋ค."์ ๊ฐ์ด ๋ฐ์ํ ์ํฉ์ ์ค๋ช ํ๋ ์ผ๋ฐ JavaScript ๊ฐ์ฒด์ด๋ค. ์ก์ ์ ์ก์ ๊ฐ์ฒด ์์ฑ์ ๋ด๋นํ๋ ํฌํผ ํจ์์ธ ์ก์ ์์ฑ์์ ์ํด ์์ฑ๋๋ค. ์์ ์ด ์์ฑ๋๋ฉด Dispatcher๋ก ๋ฐ์ก๋๋ค.
Stores: Stores์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํ ๋ฐ ๋น์ฆ๋์ค ๋ก์ง์ด ํฌํจ๋๋ค. ๋ฐ์ก๋ ์์ ์ ์๋ตํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๋ด๋ถ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ค. Stores๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ทฐ(๊ตฌ์ฑ ์์)์ ๋ํ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐ ๋ ธ์ถ์ ๋ด๋นํ๋ค. ์์ ์ ์์ ํ๊ณ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด Dispatcher์ ๋ฑ๋กํ๋ค. Stores์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ทฐ์ ์๋ฆฌ๊ธฐ ์ํด ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ๋ด๋ณด๋ ๋๋ค.
Views: ์ข ์ข React ๊ตฌ์ฑ ์์๋ก ํ์๋๋ Views๋ Stores์์ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ ๋๋งํ๋ ์ญํ ์ ํ๋ค. ๊ด์ฌ ์๋ ๋งค์ฅ์ ๊ตฌ๋ ํ๊ณ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ค. Stores๊ฐ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ๋ด๋ณด๋ด๋ฉด ๋ทฐ๋ Stores์์ ์ ๋ฐ์ดํธ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ณ ์ค์ค๋ก๋ฅผ ๋ค์ ๋ ๋๋งํ๋ค.
Flux ์ํคํ ์ฒ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์๊ฒฉํ ๋จ๋ฐฉํฅ ํจํด์ ๋ฐ๋ฅธ๋ค.
์ฌ์ฉ์ ์ํธ ์์ฉ ๋๋ ์์คํ ์ด๋ฒคํธ๋ Dispatcher๋ก ๋ฐ์ก๋๋ ์์ ์ ํธ๋ฆฌ๊ฑฐํ๋ค.
Dispatcher๋ ์กฐ์น๋ฅผ ์์ ํ์ฌ ์ ์ ํ ์์ ์ผ๋ก ๋ณด๋ ๋๋ค.
Stores๋ ์์ ์ ์ฒ๋ฆฌํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
Stores๊ฐ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ๋ณ๊ฒฝ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
Views(๊ตฌ์ฑ ์์)๋ ์ด๋ฌํ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ ์ ์ฅ์์์ ์ ๋ฐ์ดํธ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ค.
Views๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ์ฌ ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์ค๋ก๋ฅผ ๋ค์ ๋ ๋๋งํ๋ค.
Flux ์ํคํ ์ฒ ์ฌ์ฉ์ ์ด์
์์ธก ๊ฐ๋ฅํ ๋ฐ์ดํฐ ํ๋ฆ(Predictable data flow): Flux์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ํตํด ๋ฐ์ดํฐ๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ํตํด ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋๊ณ ํ๋ฅด๋์ง ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค. ์ด ์์ธก ๊ฐ๋ฅ์ฑ์ ๋๋ฒ๊น ์ ๋จ์ํํ๊ณ ์ํ ๋ณ๊ฒฝ์ ์์ธ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋๋ค.
์ค์ํ๋ ์ํ ๊ด๋ฆฌ(Centralized state management): Flux Stores๋ ์ค์ํ๋ ๋ฐฉ์์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ํฌํจํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํนํ ๋ณต์กํ ๋ฐ์ดํฐ ์ข ์์ฑ์ด ์๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํ๋ฅผ ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ์ถ๋ก ํ ์ ์๋ค.
์ ์ง ๋ณด์์ฑ(Maintainability): Flux์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ํตํด ๋ ๋์ ์ฝ๋ ๊ตฌ์ฑ ๋ฐ ๋ชจ๋ํ๊ฐ ๊ฐ๋ฅํ๋ค. ๊ฐ ๊ตฌ์ฑ ์์(Dispatcher, Actions, Stores, Views)์๋ ํน์ ์ฑ ์์ด ์์ผ๋ฏ๋ก ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ณด๋ค ์ฝ๊ฒ โโ์ ์ง ๊ด๋ฆฌํ๊ณ ์์ ํ ์ ์๋ค.
ํ์ฅ์ฑ(Scalability): Flux๋ ๋ง์ ์์ ๋ฐ์ดํฐ ๋ฐ ์ํ ์ํธ ์์ฉ์ด ์๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํ์ฅ ๊ฐ๋ฅํ ์ํคํ ์ฒ๋ฅผ ์ ๊ณตํ๋ค. ๋จ๋ฐฉํฅ ํ๋ฆ ๋ฐ ์ค์ ์ง์ค์ ์ํ ๊ด๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ํ์ฅํ๋ ๋ฐ ๋์์ด ๋๋ค.
useReducer
React์์ useReducer ํํฌ๋ ๋ณต์กํ ์ํ ๋ฐ ์ํ ์ ํ์ ๋ณด๋ค ์ ์ด๋๊ณ ์์ธก ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ๋ด์ฅ ํจ์์ด๋ค. ์ด๊ฒ์ useState ํํฌ์ ๋์์ด๋ฉฐ ์ฌ๋ฌ ๊ฐ์ด ํฌํจ๋ ์ํ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ํ ์ ํ์ด ์ด์ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ ํนํ ์ ์ฉํ๋ค.
useReducer ํํฌ๋ ๋ฆฌ๋์ ํจ์์ ์ด๊ธฐ ์ํ๋ผ๋ ๋ ๊ฐ์ง ์ธ์๋ฅผ ์ฌ์ฉํ๋ค. reducer function์ ๋ค๋ฅธ ์์ ์ ๋ํ ์๋ต์ผ๋ก ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ ์ญํ ์ ํ๋ค. ์ด๊ธฐ ์ํ ์ธ์๋ ์ํ์ ์ด๊ธฐ ๊ฐ์ ์ค์ ํ๋ค.
reducer ํจ์๋ state์ action ๋ ๊ฐ์ง ์ธ์๋ฅผ ๋ฐ๋๋ค. action type์ ํ์ธํ๊ณ ๊ทธ์ ๋ฐ๋ผ ํ์ํ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๋ค. reducer ํจ์๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ผ๋ ํญ์ ์๋ก์ด ์ํ ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ผ ํ๋ค.
useReducer๋ฅผ ์ฌ์ฉ ์ ์ด์
๋ณต์กํ ์ํ ๊ด๋ฆฌ(Complex state management): useReducer๋ ์ฌ๋ฌ ๊ฐ ๋๋ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ด๋ จ๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ ํฉํ๋ค. ์ด๋ฅผ ํตํด ๋ณด๋ค ๋ณต์กํ ์ํ ์ ํ ๋ฐ ๋ ผ๋ฆฌ๋ฅผ ์ค์ ์ง์ค์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
์์ธก ๊ฐ๋ฅํ ์ ๋ฐ์ดํธ(Predictable updates): ์ํ ์ ํ์ ํน์ ํจํด์ ๋ฐ๋ฅด๋ ๋ฆฌ๋์ ํจ์์ ์ํด ๊ฒฐ์ ๋๋ฏ๋ก ์ํ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ ์์ธก ๊ฐ๋ฅํ๊ณ ์ถ์ ํ ์ ์๋ค.
์ต์ ํ(Optimization): useReducer๋ ์ด์ ์ํ์ ์์กดํ๋ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ค. ์ด๋ ์ํ ์ ํ์ด ๊ฐ์ฅ ์ต์ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์ ์ฌ์ ๊ฒฝํฉ ์ํ๋ฅผ ๋ฐฉ์งํ๋๋ก ํ๋ค.
์ํ ๋ก์ง ๊ณต์ (Sharing state logic): ๋ฆฌ๋์ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์์์ ์ฌ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ฝ๋ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๊ณ ์ค๋ณต์ด ์ค์ด๋ญ๋๋ค.
useReducer๋ useState์ ๊ฐ์ ๊ฐ๋จํ ์ํ ๊ด๋ฆฌ ์๋ฃจ์ ์ ๋นํด ์ถ๊ฐ์ ์ธ ๋ณต์ก์ฑ์ ์ ๋ฐํ ์ ์๋ค๋ ์ ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ํ ๋ก์ง์ด ๋ ๋ณต์กํด์ง๊ณ ์ํ ์ ํ์ ๋ํ ์์ธก ๊ฐ๋ฅํ๊ณ ์ ์ด๋ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํ ๊ฒฝ์ฐ 'useReducer'๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
useCallback
React์์ useCallback ํํฌ๋ ์ฝ๋ฐฑ ํจ์ ์์ฑ์ ๋ฉ๋ชจํ๊ณ ์ต์ ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ ๋๋ง ์ฑ๋ฅ ์ต์ ํ ๋๋ ๋ถํ์ํ ๋ค์ ๋ ๋๋ง ๋ฐฉ์ง์ ๊ฐ์ด ์ฐธ์กฐ ๋๋ฑ์ฑ์ ์์กดํ๋ ์์ ๊ตฌ์ฑ ์์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌํ๋ ์๋๋ฆฌ์ค์์ ์ฃผ๋ก ์ ์ฉํ๋ค.
๊ตฌ์ฑ ์์ ๋ด์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ์ํ ๋ ํด๋น ํจ์์ ์ ์ธ์คํด์ค๊ฐ ๊ฐ ๋ ๋๋ง์์ ์์ฑ๋๋ค. ์ด๋ก ์ธํด ํจ์ ๋ก์ง์ด ๋์ผํ๊ฒ ์ ์ง๋๋๋ผ๋ ์ด๋ฌํ ์ฝ๋ฐฑ์ ์์กดํ๋ ์์ ๊ตฌ์ฑ ์์๊ฐ ๋ถํ์ํ๊ฒ ๋ค์ ๋ ๋๋ง๋ ์ ์๋ค. useCallback์ ์ข ์ ํญ๋ชฉ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์๋ง ๋ณ๊ฒฝ๋๋ ๋ฉ๋ชจํ๋ ๋ฒ์ ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐํํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ์ํํ๋ ๋ฐ ๋์์ด ๋๋ค.
useCallback ํํฌ๋ ์ฝ๋ฐฑ ํจ์์ ์ข ์์ฑ ๋ฐฐ์ด์ด๋ผ๋ ๋ ๊ฐ์ง ์ธ์๋ฅผ ์ฌ์ฉํ๋ค. ์ข ์์ฑ์ ๋ฉ๋ชจํ๋ ์ฝ๋ฐฑ์ ์ ๋ฐ์ดํธํด์ผ ํ๋ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
useCallback ์ฌ์ฉ ์ ์ด์
์ต์ ํ๋ ์ฑ๋ฅ(Optimized performance): useCallback์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฉ๋ชจํ์ฌ ์์ ๊ตฌ์ฑ ์์์ ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋๋ค. ์ข ์์ฑ์ด ๋ณ๊ฒฝ๋ ๋๋ง ์ฝ๋ฐฑ์ด ๋ค์ ์์ฑ๋๋๋ก ํ๋ค.
๋ถํ์ํ ํจ์ ์ฌ์์ฑ ๋ฐฉ์ง(Avoiding unnecessary function recreation): ์ฝ๋ฐฑ์ ํ์ ๊ตฌ์ฑ ์์์ ์ํ์ผ๋ก ์ ๋ฌํ ๋ useCallback์ ๊ฐ ๋ ๋๋ง์์ ์ฝ๋ฐฑ ์ธ์คํด์ค ์ฌ์์ฑ์ ๋ฐฉ์งํ์ฌ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ์ต์ ํ๋ก ์ด์ด์ง ์ ์๋ค.
์์ ๋ ์ฐธ์กฐ(Stable references): useCallback์ ์ฝ๋ฐฑ ํจ์์ ๋ํ ์์ ์ ์ธ ์ฐธ์กฐ๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ ์ปดํฌ๋ํธ ๋ฉ๋ชจ๋ฅผ ์ํด 'React.memo'๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ฝ๋ฐฑ์ ์ ๋ฌํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ฐธ์กฐ๋ฅผ ๋น๊ตํ๋ ์๋๋ฆฌ์ค์์ ์ค์ํ ์ ์๋ค.
Last updated