π μ°μν ν
ν¬λ¬λ 3κΈ° κ΅μ‘μ
- μλ μ€νλΌμΈμΌλ‘ 100λͺ
μ λ λ½μμ νλ€κ³ νλλ°, μ΄λ²μλ μ½λ‘λμ μν₯μΌλ‘ μ¨λΌμΈμΌλ‘ μ§νλμμ΅λλ€.
- κ±°κΈ°λ€κ° μ΄λ²μλ μ½λ‘λ λλ¬Έμ λμ΄ μμμΌν΄μ μ½ 30λͺ
μ λ λ½μ μκ°μ΄μλΌκ³ νμ
¨μ§λ§, μ½λ‘λκ° μ¬ν΄μ Έ μ¨λΌμΈμΌλ‘ μ§νλμ μ½ 400μ¬λͺ
μ κ΅μ‘μμΌλ‘ λ½μλ€κ³ νμ
¨μ΅λλ€.
- κ·Όλ° μ΄ κ΅μ‘μ λ£κ³ μΆμ΄μ μ§μν μ¬λλ§ 1200μ¬λͺ
.. π€ μ΄μ μ μΈ μ¬λμ΄ κ΅μ₯ν λ§μ κ±° κ°λ€..
- μ΄λ² κ΅μ‘μ zoomμ μ΄μ©ν΄μ μ¨λΌμΈμΌλ‘ μ§νλμκ³ , κ°μ¬λμ μ°μννμ λ€μ κΉλ―Όνλ(μΉνλ‘ νΈμλκ°λ° κ·Έλ£Ήμ₯)μ΄ μ§ννμ
¨μ΅λλ€.
- λν, 9μ νλ¬λμ ν, λͺ©μΌλ‘ μ§νλκ³ μ΄ 8νμ°¨λ‘ μ§νλ μμ μ΄κ³ μ λ κ³μ λλ λλ§λ€ λΈλ‘κΉ
μ ν μμ μ
λλ€. β
π μ°μν ν
ν¬λ¬λ 3κΈ° κ·Έ 첫 μκ° μκ°
- 첫 μκ°μ΄λΌ κ·Έλ°μ§ κ΅μ‘μ μΈ λΆλΆλ³΄λ€ κ΅μ₯ν μ’μ λ§μμ λ§μ΄ ν΄μ£Όμ
¨λ€.
π μ°λ¦¬λ€μ κ³ λ―Ό..
π₯ λ΄κ° μ§κΈ νκ³ μλκ² λ§λ κ²μΈκ°? (λ΄κ° μ§κΈ μνκ³ μλ..?)
- μ΄ κ°μλ₯Ό μ μ²ν λ μ μ΄ ν
ν¬λ¬λμ λ£κ³ μΆμκ°μ λν μ§λ¬Έμ΄ μμλλ° κ±°κΈ°μ λλΆλΆμ κ³ λ―Ό
- κ°λ°μ ν λ λμμ λκ³ ν΄κ²°μ λλλ° μ΄κ² μνκ³ μλ건μ§μ λν μꡬμ¬μ΄ κ°μ₯ ν¬λ€. λλ¬Έμ μ΄ ν
ν¬λ¬λμ ν΅ν΄μ λ€νΈμνΉμ νκ³ μΆκ³ μλμ΄λ€νν
λ°λ νΌλλ°±κ³Ό μ‘°μΈλ€μ μνλ€. (μ½λ νμ§μ λν λ¬Έμ , μ½λ리뷰)
- μν€ν
μ²λ μ€κ³μ λν κ³ λ―Ό.
- μ μ κΈ°μ μ λν κ³ λ―ΌμΌλ‘ react μνκ΄λ¦¬λ₯Ό ν΄μΌν λ,
Mobx
λ₯Ό μ¨μΌνλ, Redux
λ₯Ό μ¬μ©ν΄μΌνλμ λν κ³ λ―Ό
- μ΄μ¬λ‘ λ©΄μ λ³Όλ κ°λ°μλ€μκ² μ΄ κΈ°μ μ μ μ ννμ΄μ? λ¬Όμ΄λ΄€μ λ, μ λλ‘ κ³ λ―Όν΄μ κΈ°μ μ μ νν μ¬λλ€μ κ΅μ₯ν λλ¬Όμλ€.
κ·Έλμ κ·Έλ° κ²λ€μ ν¬κ΄ν΄μ μ λ¬νκ³ μΆμ κ²λ€μ β
- λꡬμ λ°μ
- 20~30λ
μ μλ λ°λ₯(μλ₯Ό λ€μ΄ Nodeλ₯Ό λ§λ λ€.)λΆν° λ§λ€μ΄ Hello Worldλ₯Ό λμ°κΈ° μ΄λ°κ²λ€μ κ³ λ―Όμ΄μλ€λ©΄, μ§κΈμ λꡬμ λ°λ¬λ‘ μμ°μ± ν₯μμ λμμ μ£Όλ κ²λ€μ΄ λ§μ΄ μ겨λ¬λ€.
- μ΄λ¬ν μ΄μ λ‘ κ³ λ―Όμ κ΄μ μ΄ λ¬λΌμ‘λ€. (μλ₯Ό λ€μ΄, μ΄λ€ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ°μ§? μ΄λ€ λ°©μμΌλ‘ λ§λ€μ΄μ§λ μκ³ λ¦¬μ¦μ΄ μ’μκΉ?, μ±λ₯μ μ΄λ¨κΉ λ±..)
- κ·Έλ κΈ° λλ¬Έμ μμ¦ νλ‘κ·Έλλ° νμ΅ λ°©λ²μ΄ λꡬμ μ¬μ©λ°©λ²μ μ΅νλ κ²μ΄λ€.
π 4μ£Όκ° μ§ννλ©΄μ μμ£Ό λ€μ ν€μλ
- μνμ κ΄λ¦¬μ μ΄λ»κ² λ€λ£° κ²μΈκ°?
- νκ²½: λ°νμ νκ²½λΏμλλΌ κ°λ°νκ²½μ λν ν° λ²μ£Ό
- μ ν: μ€μ μλΉμ€μ λκ° μ νμ λν κ²
- λ―Έμ
: κ·Έλμ 무μλ³΄λ€ μ΄λ€ λꡬλ₯Ό μ¬μ©νλλΌλ κ·Έ λκ΅¬κ° μμ²μ μΌλ‘ ν΄κ²°νκ³ μ νλ λ―Έμ
μ μ μ΄ν΄λλ κ²μ΄ κ·Έ λꡬλ₯Ό κ°μ₯ μ μ¬μ©νλ λ°©λ²μ΄λ€.
- μλμ : μ΄λ°κ²λ€μ΄ λͺ¨λ μλμ μΈκ²λ€.. μ΄ν΄νκ³ μ μ©νλ κ²μ λ°λΌμ νλ§λλ‘ μ μνκΈ°λ μλ§€
π μ΄ κ°μ λͺ©ν
- κ°κ°μ λν κΈ°λ³ΈκΈ°λ₯Ό μλ €μ£Όκ³ λν
μΌν λΆλΆμ ν¬μΈνΈλ₯Ό μ§μ΄μ£Όκ³ λλ¨Έμ§λ κ·Έ λΆλΆμ λν΄μ κ³μ νμ΅μ μ΄μ΄κ°λ©΄μ μμκ°κ³ , μ΄ κ°μκ° μμν΄μ λλ¬λ€κ³ λμ΄ μλκ³ λ€νΈμνΉμ μ΄μ΄κ° μ μκ² λ§λ€ μ μκ² νκ³ μΆλ€.
π κ°μλ₯Ό νλ©΄μ μ£Όλ‘ λ€λ£° λꡬ
π TypeScript
- Typeμ λͺ
μνλ κ².
- νμ
μΆλ‘ μ ν μ μλ νμ
μ λͺ
μνμ§ μμλ TypeScriptκ° μμμ μΆλ‘ ν΄μ νμ
μ μΈν
ν΄μ€λ€.
let foo = 10;
- μ€μ λ‘ λ¬Έμ μΌμ΄λ λ λ€λ₯Έ νμ
μ κ°μ λ£μ λ μ€λ₯κ° λ°μ
// νμ
μ λͺ
μμ μΌλ‘ μ λ λ°©λ²μΌλ‘ λ³μλ€μλ€ μ½λ‘ μ νκ³ λ€μλ€ μ λλ€.
let foo : number = 10; foo = false;
π λͺ
μμ μΈ κ²κ³Ό μ묡μ μΈ κ²
- μΆλ‘ μ μμͺ½μμ μΌμ΄λκΈ° λλ¬Έμ μ묡μ μ΄λκΉ λͺ
μμ μΈ κ²λ³΄λ€λ μ½λ μ¬λνν
μ λ¬ν΄μ£Όλ μ 보λμ΄ μ λ€.
- λͺ μλ
μ μλ μ½λκ° λ³΅μ‘ν΄λ μ μ§μ¬μ 보μμ§λ§, μμ¦μ λν΄ν μ½λλ³΄λ¨ λͺ
μμ μ΄κ³ μ½κΈ° μ¬μ΄ μ½λ(μ½λκ° κΈΈλλΌλ)λ₯Ό μ νΈνλ€.
- νμ
μ€νμ λ§λλ κ°λ°μλ€λ λΉμ·ν μκ°μ νκ³ μκ³ , λ μ΄κ²μ΄ μμ¦μ νΈλλ.
- JavaScript λν μμ μ€νμμ μμ¦ λμ€λ μλ‘μ΄ λ¬Έλ²λ€μ΄ λͺ
μμ μΌλ‘ ννμ νμ₯ μν€λ κ²μ΄ 보μΈλ€.
- λνμ μΌλ‘ κ°λ³μΈμ κ°μ κ².
// λ°μμ λ΄€μ λ μ’μ§ μꡬλ.
// ν¨μ λ΄λΆμ μΈμκ° μ무κ²λ μκΈ° λλ¬Έμ κ°λ³μΈμλ₯Ό λ°λμ§ λͺ¨λ₯Έλ€. μ묡μ ..
function bar() {
arguments.
return 0;
}
bar(10,20);
- κ·Έλμ spread operator(μ€νλ λ λ¬Έλ²)μ΄ λμ¨κ²λ μ΄λ° μ΄μ .
function bar(...args) {
return 0;
}
bar(10,20);
π type alias
- μμνμ
μ μΌλ°νλμ΄μκΈ° λλ¬Έμ λ€μνκ² μ¬μ©κ°λ₯νλ€.
- νμ§λ§ νμ
μ μλ―Έλ₯Ό λΆμ¬νκ³ μΆμ λ λ¨μ μ΄ λλ€.
- κ·Έλμ ννλ ₯μ λ£κ³ μΆμλ
type alias
κ° μ€νμ μ 곡νλ€.
// λμ
μ²λΌ 보μ΄μ§λ§ type alias μ€λ₯Έμͺ½μμλ νμ
μ λ³λͺ
μ λΆμ¬μ€λ€.
type Age = number;
let age: Age = 10;
// κ°μ²΄ type alias
type Foo = {
age: Age; // μΈλ―Έμ½λ‘
name: string;
}
const foo: Foo = {
age: 10, // μ½€λ§
name: 'kim'
}
- κ²°κ΅ μ΅μ’
μ μΈ νμ
μ Primitive type.
π interface
- type aliasμ λΉμ·νμ§λ§ λ μ€μ μ΄λ€ μν©μμ μ΄λ€ κ²μ μ¬μ©νλ κ²μ΄ μ’μκΉ? μ λν μκΈ°λ μΆνμ μλ €μ€λ€κ³ νμ λ€.
type Age = number;
interface Bar {
age: Age;
name: string;
}
const bar: Bar = {
age: 10,
name: "Kim",
};
π μλ¬ κ²μΆ
πΈ νμ
μ€ν¬λ¦½νΈ λ¬Έλ² μμμλ ν¬κ² λκ°μ§κ° μ‘΄μ¬
- μ»΄νμΌ νμμμ μλλλ μμ (type Alias, generic, interface)
- λ°νμκΉμ§ κ°λ κ²½μ° μλ¬λ₯Ό μ‘λ μμ (JavaScriptλ‘ λ°νλλ μμ)
- JavaScriptλ‘ κ°λ°μ ν λλ μλν° μνμμ λλ μ€λ₯λ‘ λμ€λ κ²μ μ¬μ€μ λ°νμμ λμ€λ μλ¬μ κ±°μ μΌμΉνλ€.
- λλ¬Έμ νμ
μ€ν¬λ¦½νΈκ° μ 곡νλ benefitμ κ±°μ λ€ μ»΄νμΌνμμ μ 곡νλ μ₯μ μ΄λ€.
π TypeScriptλ₯Ό μ¬μ©ν CRA(Create React App)
- CRAλ react appμ κ°μ₯ λΉ λ₯΄κ² λ§λλ λ°©λ²μ΄λ€.
> yarn create-react-app woowahan --template typescript
- μ΄λ κ² νλ©΄
tsconfig.json
νμΌκ³Ό tsxλ‘ μ΄λ£¨μ΄μ§ craκ° μμ±λλ€.
tsconfig.json
νμΌμ typescript μ»΄νμΌλ¬ μ΅μ
μ μ€μ ν μ μλ€.
import React from 'react';
import ReactDOM from 'react-dom';
// μΈν°νμ΄μ€
interface AppProps {
title: string;
color: string;
}
// νμ
μ μ
// μν : μκ°μ νλ¦μ λ°λΌμ λ³ννλ κ²
// νμ¬ μνλ λΆλ³
function App(props: AppProps){
return (
<h1>{props.title}</h1>
)
}
// λ²μΆμΌ λμ λλλ₯Ό μ΄μ©
// λκ°μ μΈμ
// render μ΅μμμμλ§ μ€ν
// λ¨μΌ λ²μΆμΌ λ
ReactDOM.render(
// 첫λ²μ§Έ μΈμ 리μ‘νΈ μ»΄ν¬λνΈλ₯Ό DOMμΌλ‘ λ³κ²½ν λ€μμ λλ²μ§Έ μΈμ HTML 컨ν
μ΄λμ λΆμ³λ£λλ€.
// StrictMode => κ²½κ³ ν΄μ£Όλ μλ΄ν΄μ£Όλ κ°λ°ν΄μμ μ 곡νλ ν΄
<React.StrictMode>
<App title="Tech Hello?" color="blue"/>
</React.StrictMode>,
// λμΌλ‘ λ³κ²½ν root μ»΄ν¬λνΈμ λΆμΉλ€.
document.getElementById('root')
);
π Babelμμμ JSX transpiler
- Babel μμ μλ JSX transpilerκ° μ€λ₯Έμͺ½μ²λΌ λ³νν΄μ€λ€.
- κ·Έλ κΈ° λλ¬Έμ μμ»λ€κ³ μκ°ν΄λ 리μ‘νΈ μ»΄ν¬λνΈλ νμ 리μ‘νΈ ν¨ν€μ§ importλ₯Ό μμΌμΌνλ€.
- κ·Έ μ΄μ λ 리μ‘νΈ ν¨ν€μ§λ λ³νλ λ€μμ μ°κΈ° λλ¬Έμ λ³ννκΈ° μ μ λ°λμ ν¬ν¨ν΄μ€λ€.
- JSXλ κ²°κ΅ CreateElementλΌκ³ νλ 리μ‘νΈκ° μ 곡ν ν¨μλ₯Ό μ’ λ νΈνκ² λ§λ€μ΄λμ (λ§μΉ HTML νκΉ
νλ―μ΄) κ΅¬μ‘°μΌ λΏμ΄λ€.
// 첫 λ²μ§Έ μΈμλ HTML νκ·Έμ²λΌ μκΈ΄ νν¬λͺ
, λλ²μ§ΈμΈμλ Property, μΈλ²μ§Έ μΈμλ Child
function App() {
return /*#__PURE__*/_react.default.createElement("h1", {
id: "header"
}, "hello ");
}
π CRAμ μ₯μ κ³Ό λ¬Έμ μ
- μ₯μ : κ°λ¨νκ³ , μ λ§ν κ²λ€μ λ€ μΈν
λμ΄μλ€.
- λ¨μ
- μ₯μ κ·Έ μΈμ λͺ¨λ κ²μ λ¨μ
- CRAκ° μ 곡νμ§ μλ μΈν
μ ν λ κ΅μ₯ν κΉλ€λ‘λ€.
- CRAμ μ μ°νμ§ λͺ»ν λͺκ°μ§λ€μ μ΄λ κ² λ°κΏ¨μΌλ©΄ μ’κ² λ€λΌκ³ λ§μν΄λ CRA κΈ°μ¬μλΆλ€μ 보μμ μ΄λΌμ μ λ°μμ£Όμ§ μλλ€.
- κ°μ₯ ν¬λ¦¬ν°μ»¬ν λ¬Έμ λ λ€μν νκ²½μ λν λμμ΄ μ΄λ ΅λ€.(local, product λκ°μ§λ§ μ§μ)
eject
λ₯Ό μ¬μ©ν΄ μ€μ νμΌμ λΉΌμ 컀μ€ν°λ§μ΄μ§μ΄ κ°λ₯νμ§λ§, λ§€μ° λ³΅μ‘νκ³ νμ§λ§λΌκ³ κΆκ³ λ₯Ό νκ³ μλ€.
π μνκ΄λ¦¬
π Flux
- μ μΌ λ¨Όμ λμ¨ approachκ° flux μν€ν
μ²π
π Redux
- reduxλ fluxλ₯Ό μ‘°κΈ λ μ νννκ³ λ μ°κΈ° νΈνκ³ simpleνκ² μ 곡λλ λΌμ΄λΈλ¬λ¦¬
π Mobx
- Mobxλ reduxμ λμ±ν보λ€λ μμ ν μνλ₯Ό κ΄λ¦¬νλ νλ¬λ€μμ λ°κΏλ²λ¦° λ€λ₯Έ λ°©μμ΄λ€.
- μνλ λ€λ₯΄κ³ μνλ₯Ό λ°λΌλ³΄λ κ΄μ λλ€λ₯΄λ€.
- μ²μμ μ°λ©΄ κ΅μ₯ν νΈνμ§λ§, λ¨μν κ²μ λ¨μν ννλ₯Ό μ·¨νλ μ΄μ κ° μλ€.
- λ¨μν ννλ₯Ό κ°μ§λ©΄ κ·Έκ±Έ λ§λ μ¬λμ΄ μνλ ννλ κ²°κ³Όλ¬Όμ κ°μ΄λνκΈ° μ½κΈ° λλ¬Έμ΄λ€.
π 첫λ²μ§Έ μκ° μκ° νκΈ°
- μΌλ¨ κ°μνμλ κΉλ―Όνλκ»μ κ΅μ₯ν μΉμ νκ² μλ €μ£Όμ
¨κ³ κ·Έμ λ°λΌ λ°°μΈμ μ΄ λ§λ€κ³ λκΌμ΅λλ€.
- μ€κ°μ μ¬λ μκ°μ΄ λλ²μ λ μμμ§λ§ κ·Έ μκ° λ§μ λ μ§λ¬Έμ λ΅λ³μ ν΄μ£Όλ QnA μκ°μ κ°μ‘μ΅λλ€.
- reactλ₯Ό 곡λΆλ₯Ό νλ©΄μ λκ° μ λͺ» 곡λΆνκ³ μλ€λ μκ°μ΄ λ€μκ³ κ·Έμ λ°λΌμ μκ·Ήμ λ§μ΄ λ°μλ κΈ°νμμ΅λλ€.
- κ΅μ‘μλ€ λν μ λ§ μ΄μ μ μ΄κ³ λ°°μ°κ³ μνλ μμ§?κ° λ§μμ λ²μ¨ μ¬λλ°©λ νμ‘κ³ μ΄λ² κΈ°νμ λ€νΈμνΉμ΄ μλμ μ€ν°λλ₯Ό ν μ μλ κΈ°νκ° μκ²ΌμΌλ©΄ μ’κ² μ΅λλ€.
- μμΌλ‘ λ¨μ κ΅μ‘κΈ°κ°λ κΈ°λκ° λκ³ μ§μ€ν΄μ λ€μλ €κ³ λ
Έλ ₯ν΄μΌκ² μ΅λλ€.. π€
π μ£Όλμ΄λ€νν
ν΄μ£Όκ³ μΆμ λ§(κΉλ―Όν λκ»μ..)
- μ£Όλμ΄λ€μ΄ μλμ΄μ λΉκ΅νμ λ μλμ μΌλ‘ μ 리ν λΆλΆμ μκ°
- μ΄ μκ°μ΄ μλ€λ benefitμ μΆ©λΆν νμ©ν΄μ μ΄μ‘°νκ² μ¬λ¬κ°μ§ 곡λΆλ₯Ό νλ κ±° 보λ€λ μκ°μ΄ μΆ©λΆν μμΌλ μ¬μ λ₯Ό κ°μ§κ³ νμΌλ©΄ μ’κ² λ€.
- μ΄ μκ°μΌλ‘ μ¬λ¬ μ 보λ₯Ό μ΅λν μ μλλ° μ΄κ±Έ λ°©ν΄νλ κ²μ΄ μ΄μ‘°ν μκ°μ΄λ€.
- μ΄λ° μκ°μ΄ μκ°μ΄ μ§λ μλ‘ μκΈ° μμ μ λ§μ΄ νλ€κ³ μ§μΉκ² νλ€.
- λλ¬Έμ λ§λΌν€μ μμνλ€ μκ°νκ³ μ¬μ λ₯Ό κ°μ ΈλΌ!