1. React Component
React๋ก UI๋ฅผ ์ค๊ณํ๋ 5๊ฐ์ง ์์น์ ๋ํด ์ง์์ ์ผ๋ก ํ๋ จํ๊ณ ๋ณต์กํ UI๋ฅผ ์ค๊ณํ๊ธฐ ์ํ ๋จ์ํ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๋ ๊ณผ์ ์ ๋ํด ์ดํดํ์.
Thinking in React (React๋ก ์ฌ๊ณ ํ๊ธฐ)
Step 1: Break the UI into a component hierarchy
UI๋ฅผ ์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ(ํ์ด๋ผํค)๋ก ๋๋๊ธฐ
Step 2: Build a static version in React
React๋ก ์ ์ ์ธ UI ๋ง๋ค๊ธฐ
Keyword
REST API ์ GraphQL
REST API ๋ ๋ฌด์์ธ๊ฐ
GraphQL์ ์ ๋ฑ์ฅํ๋๊ฐ?
REST API vs GraphQL
JSON
DSL(Domain-Specific Language)
์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ
SRP(๋จ์ผ ์ฑ ์ ์์น)
Atomic Design
React component ์ props
๋ฐ์ดํฐ
๋ฐฑ์๋์์ JSON ๋ฐ์ดํฐ๋ฅผ ์๋ตํ๋ API๋ฅผ ์ ๊ณตํ๋ค๊ณ ๊ฐ์
REST API
์น ์๋น์ค์์ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํต์ ์ํคํ ์ฒ๋ก URI์ ๋ฆฌ์์ค๋ฅผ ๋ช ์ํ๊ณ , HTTP Request Method๋ฅผ ํตํด ์์์ ๋ํ CRUD ์์ ์ ์ ์ํ๋ค.
๋ฆฌ์์ค ์ค์ฌ
GET, POST, PUT/PATCH, DELETE (CRUD ์์ )
GraphQL
REST API์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋ฑ์ฅ
REST API ๋จ์ - Over fetching & Under fetching
Over fetching ํ์ํ ๋ฐ์ดํฐ ๋ณด๋ค ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ๊ฒฝ์ฐ
Under fetching ํ์ํ ๋ฐ์ดํฐ ๋ณด๋ค ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ๊ฒฝ์ฐ
GraphQL์ ๋จ์ผ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๊ณ , ์ ๋ณด๋ฅผ ํน์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋์ ์์ฒญ๋ง์ผ๋ก ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์๋ค.
Query์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ค.
Query (Read), Mutation(Create, Update, Delete), Subscription(Event)
REST API vs GraphQL
GraphQL์ ์ฌ์ฉํด๋ณด์ง ์์์ ๊ธฐ์ ์ ๋ํ ์ฅ๋จ์ ์ ๋น๊ต๋ ํ์คํ ํ ์ ์์ง๋ง, REST API๋ ์์ ์ค์ฌ์ ์ผ๋ก ๋ช ์์ ํ์๋ก ํํํ๋ฏ๋ก ์ง๊ด์ ์ธ ์ดํด๊ฐ ๊ฐ๋ฅํ ์ฅ์ ๊ณผ Over/Under fetching์ ๋จ์ ์ด ์กด์ฌํ๋ ๋คํธ์ํฌ ๋น์ฉ๊ณผ ํ์ด์ง ์ด๊ธฐ ๋ ๋๋ง ์๋๋ฅผ ๋์ด์ฌ๋ฆฌ๊ณ ์ถ๋ค๋ฉด GraphQL์ ์ฌ์ฉํด ์ํ๋ ์ ๋ณด๋ง ํน์ ํด ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค. ์ถ๊ฐ์ ์ผ๋ก ๋จ์ผ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๋๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌ๋ก ์์ฒญํ๋ฉด ์คํ๋ ค ๋ฐ์ดํฐ ์ฌ์ด์ฆ๊ฐ ๋ ์ปค์ง์ง ์์๊น?
JSON (JavaScript Object Notation)
Javascript ๊ฐ์ฒด ๋ฌธ๋ฒ์ ๋ฐ๋ฅด๋ ๋ฌธ์์ด ๋ฐ์ดํฐ ํฌ๋ฉง์ผ๋ก key-value ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ ํต์ ์ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉํ๋ค.
ํ๋ก ํธ์๋๋ ์์ ๊ฐ์ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋๋ก UI๋ฅผ ๊ตฌ์ฑํ๋ค. React๋ ์ ์ธํ UI, ์ฆ XML๊ณผ ์ ์ฌํ ๋ฌธ๋ฒ์ ์ฌ์ฉํด HTML ๋ฌธ์์ฒ๋ผ ์์ฑํ ์ ์๋ค.
DSL (Domain Specific Language)
ํน์ ๋๋ฉ์ธ์ด๋ ๋ฌธ์ ์์ญ์ ํด๊ฒฐํ๊ธฐ ์ํด ํนํ๋ ์ธ์ด๋ฅผ ๋งํ๋ค. SQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ๊ธฐ ์ํ ์ฟผ๋ฆฌ ์ธ์ด๋ก DSL์ ์์๋ค. GraphQL๋ ์น ์๋น์ค์์ ๋ฐ์ดํฐ ํต์ ์ ์ํ DSL์ด๋ค. HTML๊ณผ CSS๋ ์น ํ์ด์ง์ ๊ตฌ์กฐ์ ์คํ์ผ๋ง, ๋ ์ด์์์ ์ง์ ํ๋ ์น ์๋น์ค์ ํนํ๋ DSL๋ก ๋ณผ ์ ์๋ค.
์ปดํฌ๋ํธ ๊ณ์ธต ๊ตฌ์กฐ
React์ ๊ฐ๋ ฅํ ํน์ง!
์ปดํฌ๋ํธ ๊ธฐ๋ฐ (React App ๊ตฌ์ฑ ์์)
์์ฒด ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์บก์ํ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ ์กฐํฉํ์ฌ ๋ณต์กํ UI๋ฅผ ๋ง๋ค ์ ์๋ค.
์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ธฐ์ค๋ค
๋จ์ผ ์ฑ ์ ์์น (SRP - Single Responsibility Principle)
CSS
Design's Layer
Information Architecture
1. ๋จ์ผ ์ฑ
์ ์์น (SRP)
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์์น ์ค ํ๋ ๋ชจ๋ ํด๋์ค๋ ๋จ ํ๋์ ์ฑ ์๋ง ๊ฐ์ง๋ฉฐ ๊ทธ ์ฑ ์์ ์บก์ํํด์ผ ํ๋ค. React์์ ๋จ์ผ ์ฑ ์ ์์น์ ๋ชจ๋ ์ปดํฌ๋ํธ๋ ํ๋์ ์ฑ ์์ ๊ฐ์ ธ์ผ ํ๋ค. ํ๋์ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ถ API ํธ์ถ, ์ด๋ฒคํธ ํธ๋ค๋ง, ๋ค์์ ์ํ ๊ด๋ฆฌ, ์ฅํฉํ JSX ๋ฑ์ผ๋ก ์ฌ์ด์ฆ๊ฐ ๋๋ฌด ์ปค์ง๋ค๋ฉด ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌ
2. CSS
ํด๋์ค ์ ํ์๋ฅผ ํตํด ์ด๋ ํ ์ฉ๋๋ก ๋ง๋ค์ง ์๊ฐํ๊ณ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ
3. Design's Layer
๋์์ธ ํด๋ก ์ค๊ณํ Layer(๊ณ์ธต)์ ๋ฐ๋ผ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ
4. Information Architecture
JSON Schema(๋ฐ์ดํฐ ๊ตฌ์กฐ)์ ๋ฐ๋ฅธ ์ปดํฌ๋ํธ ๋ถ๋ฆฌ ์์ฐ์ค๋ฌ์ด SRP๋ฅผ ์ํด ๊ฐ์ ๋๋ฉฐ ์ค์ ๋ก ๋ฐ์ดํฐ ๊ตฌ์กฐ์๋ฐ๋ผ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๊ฒ ๋จ. ์ฃผ๋ก ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ธํด ๊ฐ์ ์ ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๊ฒ ๋๋ค.
์์ ์ปดํฌ๋ํธ๋ฅผ ์กฐ๋ฆฝํด ๋ค์ํ ๊ฐ์ง์์ UI๋ฅผ ์์ฑํ ์ ์๋ ์ ํ์ ์ธ ๋ฐฉ๋ฒ
Atomic Design
๊ด๋ จ ๋งํฌ
๋์์ธ ์์คํ ์ ์ด๋ค ์กฐ์ง์ด ๋์งํธ ์ธํฐํ์ด์ค๋ฅผ ๋์์ธํ๊ณ ๊ตฌ์ถํ๋ ๋ฐฉ์์ ๋งํ๋ค. Atomic Design์ ๋์์ธ ์์คํ ๋ฐฉ๋ฒ๋ก ์ค ํ๋๋ก React์ ์ด๋ฅผ ๋์ ํด ์น ์ ํ๋ฆฌ์ผ์ด์ UI๋ฅผ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์กฐํํ์ฌ ๊ฐ๋ฐ ์์ฐ์ฑ๊ณผ ์ ์ง ๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ๋ง๋ค์ด์ค๋ค.
Atom Atom์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ฅ ์์ ๋จ์๋ก ๋ถ๋ฆฌํ ๊ฒ์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก HTML element ๋จ์๋ก ์์ฑ๋๋ค. ๋จ๋ ์ฌ์ฉ์ ์ด๋ ต๊ณ , ์ด๊ฒ๋ค์ ๊ฒฐํฉํ molecule, organism ๋จ์๋ก ๊ฒฐํฉํด ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
Molecule ์ฌ๋ฌ๊ฐ์ Atom์ ์กฐํฉํ์ฌ SRP๋ฅผ ๋ง์กฑํ๋ ํ๋์ ์ผ์ ์ํํ๋ ๋จ์. Input Atom์ ํ ์คํธ๋ฅผ ์ ๋ ฅํ๊ณ Button Atom์ ํด๋ฆญํด form์ ์ ์กํ๋ molecule์ ์์๊ฐ ์๋ค. ํ๋์ ์ฑ ์์ ๊ฐ์ง๋ฏ๋ก ์ฌ์ฌ์ฉ์ฑ๊ณผ UI์ ์ผ๊ด์ฑ, ํ ์คํธ์ ์ฉ์ดํ๋ค.
Organism ์น ์๋น์ค์์ ํํ๋ ์ ์๋ ๋ช ํํ ๋ ์ด์์๊ณผ ํน์ ์ปจํ ์คํธ(ํน์ ์ฝ๋, ์์ญ์ ๋ํ ํ๊ฒฝ์ ๋ณด)๋ฅผ ๊ฐ์ง๋ค. ์ปจํ ์คํธ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ด ์ด๋ ต๋ค.
Template ์ค์ ์ฝํ ์ธ ๋ ์๋ ์ปดํฌ๋ํธ๋ฅผ ํ์ด์ง ๋ ์ด์์์ ๋ง๊ฒ ๋ฐฐ์นํ ์์ด์ด ํ๋ ์, ์ค์ผ๋ ํค UI
Page ์ ์ ๊ฐ ๋ณผ ์ ์๋ ์ค์ ์ปจํ ์ธ ๋ฅผ ๋ด๊ณ ์๋ค.
Atom, Molecule, Organism ์ด 3๊ฐ์ง ํค์๋๊ฐ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ค. ์ฐ๊ด๋ ์ปจํ ์ธ ๋ ์ด์์์ ๊ธฐ์ค์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋๋๋ฉด ํด๋น ์ปดํฌ๋ํธ๋ Organism๋จ์๋ก ๋ถ๋ฆฌ๋๋๋ฐ, ๊ฐ๊ฐ ๋ค๋ฅธ ํ์ด์ง์์ ๋์ผํ UI๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํ ํ์ด์ง์์ ํน์ UI์ ๋ฐฐ์น๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฑ์ ์์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์คํ๋ ค ์๋ก์ด ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋๊ฒ ๋์ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด๋ฌํ ์ด์ ๋ก ๋ณธ์ธ์ ๊ฒฝ์ฐ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ์ถ๋ค๋ฉด ๊ฐ์ฅ ์์ ๋จ์ Atoms ์ปดํฌ๋ํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์์ฑํ๊ณ , ๋ง์ฝ ํ๋์ ๊ธฐ๋ฅ์ ์ํํ๋ ์ปดํฌ๋ํธ๊ฐ ํ์ํ๋ค๋ฉด Molecule๋ก ์กฐํฉํ๊ณ Organism์ ์ต์ข ์ ์ผ๋ก ์์ฑํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก Atom + Molecule ํผํฉ๋ Organism์ด ์์ฑ๋๋ค.
Extract Function
SRP๋ฅผ ์ํ ์๋จ, ๋ณต์กํ ์ฝ๋๋ฅผ ํจ์๋ก ์ถ์ถํ์ฌ ๋ถ๋ฆฌํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ๋ง๋ ๋ค. ์ผ๋จ ํ๋์ ์ปดํฌ๋ํธ์์ ๊ธธ๊ฒ ์์ฑํ๊ณ ๋ถ๋ฆฌํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ๋ณด์ด๋ฉด ๋ถ๋ฆฌํ๋ค.
React Component & Props
React Component
component๋ ์ํ๋ฅผ ํตํด ๋์ ์ธ UI๋ฅผ ํํํ ์ ์๊ณ , ์ด๋ฅผ ์กฐํฉํด ๋ณต์กํ UI๋ฅผ ๊ตฌ์ฑ ํ ์ ์๋ค.
Props
React์ Props๋ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ปดํฌ๋ํธ ๊ฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์์ฑํ๋ค.
TypeScript๋ฅผ ์ ์ฌ์ฉํ๊ฑฐ๋ ์๋ชป ์ฌ์ฉํ๊ฑฐ๋๋ฅผ ๊ฒฐ์ ํ๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ํ๊ฐํ ์ ์๋ค.
์ ์ธํ / ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ
์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
๋ฌด์์(What) ์ํํด์ผ ํ๋์ง ๊ฐ๋ฐ์๊ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ค.
๋ด๋ถ์ ์ธ ๊ตฌํ์ ์ถ์ํํ๋ค.
2์ฃผ์ฐจ์ ์ ์ธ์ API์ Virtual DOM์ ๋ํด ๋ค๋ฃฌ์ ์ด ์๋๋ฐ ์๊ธฐํ๊ณ ์ ๋ค์ ์ ๋ฆฌ
๋ช ๋ นํ์ผ๋ก ์ผ์ผํ DOM ์กฐ์์ ํ์ง์๊ณ React์ ๋ฌด์์ ์ํํด์ผ ํ๋์ง ์ ์ธ์ ์ผ๋ก ์๋ ค์ฃผ๋ ๋ฐฉ์์ด๋ค. (๋ง์น 'ํด์ค!'๊ฐ์ ๋๋์ด๋๊น)
์ ์ธ์ API์ Virtual DOM์ ์๊ด ๊ด๊ณ
JSX๋ก ๋ฐํ๋ React element๊ฐ Virtual DOM์ ์์ฑํ๋ฉฐ, ์ํ ๋ณ๊ฒฝ๋ฑ์ผ๋ก ๋ฆฌ๋ ๋๋ง์ด ํธ๋ฆฌ๊ฑฐ๋๋ฉด Diffing ์๊ณ ๋ฆฌ์ฆ์ ํตํด Virtual DOM๊ณผ Real DOM์ ๋น๊ต ์ํํ์ฌ ๋ฆฌ๋ ๋๋ง ์ต์ ํ๋ฅผ ์ํํ๋ค. ๊ฐ๋ฐ์๊ฐ ์ ์ธ์ API๋ฅผ ํตํด ์ํ๋ฅผ ๋ณ๊ฒฝํ์ ๋ฟ React๊ฐ ์๋์ผ๋ก ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ฐ์ํ UI ์ ๋ฐ์ดํธ๋ฅผ ์ํํ๋ค.
๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ
์ด๋ป๊ฒ(How) ์ํํด์ผ ํ๋์ง ๊ฐ๋ฐ์๊ฐ ์ผ์ผํ ๋ช ์์ ์ผ๋ก ์ง์ ํ๋ค.
๋ด๋ถ์ ์ธ ๊ตฌํ์ ๋ช ์์ ์ผ๋ก ์์ฑํ๋ค.
Last updated