νλ‘ νΈμλ κΈ°μ λ©΄μ μ μν νΈλλΆ λ§λ€κΈ°
κΈ°λ³Έμ μΌλ‘ μ κ° μ΄μ μ 곡λΆνλ λ΄μ©μ μ 리νμ§λ§,
λ μ½κ³ μ΄ν΄κ° λλ λ°©ν₯μ μμ§μ μλ£κ° μμ κ²½μ° ν΄λΉ μλ£λ₯Ό λμ λ£κΈ°λ ν©λλ€
μ κ° λͺ¨λ₯΄λ λΆλΆμΈλ° μ λ¦¬κ° νμν λΆλΆμ μ£Όλ‘ Interview_Question_for_Beginner π₯ λ₯Ό μ°Έκ³ ν©λλ€!
μ λ§ λκ³ λκ³ λ³΄κΈ° μ’μ μλ£κ° λ§μΌλ©° κΈ°μ μ λν μ μ§λ¬Έ 리μ€νΈ π λν μ‘΄μ¬ν©λλ€
-
νλ‘μΈμ€μ μ€λ λ π₯
- νλ‘μΈμ€κ° λκ°μ?
- μ€λ λκ° λκ°μ?
- νλ‘μΈμ€μ μ€λ λλ μ΄λ€ μ°¨μ΄κ° μλμ?
-
μ±κΈ μ€λ λμ λ©ν° μ€λ λ π₯
- μ±κΈ μ€λ λ μ₯μ
- μ±κΈ μ€λ λ λ¨μ
- λ©ν° μ€λ λ μ₯μ
- λ©ν° μ€λ λ λ¨μ
-
- HTTPλ λκ°μ?
- HTTP νλ‘ν μ½μ κ°μ₯ ν° νΉμ§μ λκ°μ?
- URLμ λκ°μ?
- HTTP/1.1 κ³Ό HTTP/2.0μ μ°¨μ΄λ λκ°μ?
- HTTPSλ HTTPλ λκ° λ€λ₯Έκ°μ?
- μ¬ν) 곡κ°ν€ (λΉλμΉν€) λ°©μμ΄ λκ°μ?
-
- μΏ ν€, μΈμ μ μ μ°λμ?
- μΏ ν€κ° λκ°μ?
- μΈμ μ΄ λκ°μ?
- μΏ ν€μ μΈμ μ μ°¨μ΄λ μ΄λ€ μ μ΄ μμκΉμ?
-
- CORSκ° λκ°μ?
- CORSλ₯Ό κ²ͺκ³ μ§μ ν΄κ²°ν΄ λ³Έ κ²½νμ΄ μμΌλ©΄ λ§ν΄μ£ΌμΈμ
-
- SaaSκ° λκ°μ?
- κΈ°ν λΉμ¦λμ€ μ νβμ λκ° μλμ?
-
- μ μμΌ λ°©λ²λ‘ μ΄λ λκ°μ?
-
- CI CDλ λκ°μ?
-
- μΉν©μ΄λ?
- λͺ¨λμ΄λ?
- λͺ¨λ λ²λ€λ§μ΄λ?
- μΉν©μ΄ λ±μ₯ν μ΄μ μΉν© μ¬μ© μμ μ΄μ
- λ°λ²¨μ΄λ?
- μΉν©μ μ£Όμ μμ± 4κ°μ§
-
νμ κ³Ό μΈν°νμ΄μ€ π₯
- μ΄ κΈμ 보μλ λΆλ€κ»
- νμ μ€ν¬λ¦½νΈλ₯Ό μ μ°λμ? (λ³ΈμΈμ΄ λλμ )
- νμ κ³Ό μΈν°νμ΄μ€μ μ°¨μ΄λ₯Ό μλμ? π₯π₯π₯
- μ λ€λ¦μ΄λ? π₯π₯π₯
νλ‘μΈμ€λ μ΄μ체μ λ‘λΆν° μμμ ν λΉλ°μ μμ μ λ¨μμ΄λ€
μ€λ λλ νλ‘μΈμ€κ° ν λΉλ°μ μμμ μ΄μ©νλ μ€ν νλ¦μ λ¨μμ΄λ€
νλ‘κ·Έλ¨ > νλ‘μΈμ€ > μ€λ λ π
μΆμ²: Link π₯
λ¨Όμ νλ‘μΈμ€μ μ€λ λμ λν΄ λ³Έκ²©μ μΌλ‘ μ€λͺ νκΈ° μ μ νλ‘κ·Έλ¨μ λν΄μ μ€λͺ νκ³ κ°μΌ νλ€.
νλ‘κ·Έλ¨μ΄λ, νμΌμ΄ μ μ₯ μ₯μΉμ μ μ₯λμ΄ μμ§λ§ λ©λͺ¨λ¦¬μλ μ¬λΌκ°μ§ μμ μ μ μΈ μν λ₯Ό λ§νλ€.
-
λ©λͺ¨λ¦¬μ μ¬λΌκ° μμ§ μμ : μμ§ μ΄μ체μ κ° νλ‘κ·Έλ¨μκ² λ 립μ μΈ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄μ£Όμ§ μμλ€λ λ»μ΄λ€. λͺ¨λ νλ‘κ·Έλ¨μ μ΄μ체μ κ° μ€νλκΈ° μν λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν΄ μ€μΌ μ€νλ μ μλ€.
-
μ μ μΈ μν : μ μ μ΄λΌλ λ¨μ΄ κ·Έλλ‘, μμ§ μ€νλμ§ μκ³ κ°λ§ν μλ€λ λ»μ΄λ€.
νλ‘κ·Έλ¨μ΄λΌλ λ¨μ΄λ μμ§ μ€νλμ§ μμ νμΌ κ·Έ μ체λ₯Ό κ°λ¦¬ν€λ λ§μ΄λ€. κ·Έλ₯ μ½λ λ©μ΄λ¦¬λ€.
νλ‘κ·Έλ¨μκ² μλ―Έλ₯Ό λΆμ¬νκΈ° μν΄ νλ‘κ·Έλ¨μ μ€νν΄ λ³΄μ.
νλ‘κ·Έλ¨μ μ€ννλ μκ° ν΄λΉ νμΌμ μ»΄ν¨ν° λ©λͺ¨λ¦¬μ μ¬λΌκ°κ² λκ³ , μ΄ μνλ₯Ό λμ μΈ μνλΌκ³ νλ©° μ΄ μνμ νλ‘κ·Έλ¨μ νλ‘μΈμ€ λΌκ³ νλ€.
λ°λΌμ μν€νΌλμμμλ νλ‘μΈμ€μ λν΄ μ μλ₯Ό λ΄λ¦΄ λ κ·Έλ₯ μ€νλκ³ μλ μ»΄ν¨ν° νλ‘κ·Έλ¨ μ΄λΌκ³ μ μλ₯Ό λ΄λ¦¬κ³ μμΌλ©°, μ€μΌμ€λ§ λ¨κ³μμμ "μμ " κ³Ό κ°μ λ¨μ΄λΌκ³ λ΄λ 무방νλ€κ³ νκ³ μλ€.
ν μ€ μμ½: νλ‘κ·Έλ¨μ μ½λ λ©μ΄λ¦¬ νμΌ, κ·Έ νλ‘κ·Έλ¨μ μ€νν κ² νλ‘μΈμ€
κ³Όκ±°μλ νλ‘κ·Έλ¨μ μ€νν λ μ€ν μμλΆν° μ€ν λκΉμ§ νλ‘μΈμ€ νλλ§μ μ¬μ©ν΄μ μ§ννλ€κ³ νλ€. νμ§λ§ μκ°μ΄ νλ₯Όμλ‘ νλ‘κ·Έλ¨μ΄ 볡μ‘ν΄μ§κ³ νλ‘μΈμ€ νλλ§μ μ¬μ©ν΄μ νλ‘κ·Έλ¨μ μ€ννκΈ°λ λ² μ°¨κ² λμλ€. μ€μ λ‘ μ΄μ λ νλ‘κ·Έλ¨ νλκ° λ¨μν ν κ°μ§ μμ λ§μ νλ κ²½μ°λ μλ€. κ·Έλ¬λ©΄ μ΄μ μ΄λ»κ² ν΄μΌν κΉ?
μ½κ² λ μ€λ₯΄λ λ°©λ²μ, "ν νλ‘κ·Έλ¨μ μ²λ¦¬νκΈ° μν νλ‘μΈμ€λ₯Ό μ¬λ¬ κ° λ§λ€λ©΄ λμ§ μμκΉ?" μκ°μ΄ λ€μ§λ§ μ΄λ λΆκ°λ₯ν μΌμ΄μλ€. μλνλ©΄ μ΄μ체μ λ μμ μ±μ μν΄μ νλ‘μΈμ€λ§λ€ μμ μκ² ν λΉλ λ©λͺ¨λ¦¬ λ΄μ μ 보μλ§ μ κ·Όν μ μλλ‘ μ μ½μ λκ³ μκ³ , μ΄λ₯Ό λ²μ΄λλ μ 보μ μ κ·Όνλ €λ©΄ μ€λ₯κ° λ°μνκΈ° λλ¬Έμ΄λ€.
μλ¬΄νΌ νλ‘μΈμ€μλ λ€λ₯Έ λ μμ μ€ν λ¨μ κ°λ μ΄ νμνκ² λμκ³ , μ΄ κ°λ μ΄ λ°λ‘ μ€λ λ λ€.
μ€λ λλ νλ‘μΈμ€μ λ€λ₯΄κ² μ€λ λ κ° λ©λͺ¨λ¦¬λ₯Ό 곡μ νλ©° μλνλ€.
μ€λ λλΌλ¦¬ νλ‘μΈμ€μ μμμ 곡μ νλ©΄μ νλ‘μΈμ€ μ€ν νλ¦μ μΌλΆκ° λλ κ²μ΄λ€.
μκΉ νλ‘κ·Έλ¨μ΄ μ½λ λ©μ΄λ¦¬λΌκ³ νλλ°, μ€λ λλ μ½λμ λΉμ νμλ©΄ μ€λ λλ μ½λ λ΄μ μ μΈλ ν¨μλ€μ΄ λκ³ λ°λΌμ function Add(){} λν μΌμ’ μ μ€λ λλΌκ³ λ³Ό μ μκ² λλ κ²μ΄λ€.
μ΄μ체μ λ νλ‘μΈμ€κ° λ©λͺ¨λ¦¬μ μ¬λΌκ° λ, νλ‘μΈμ€λ§λ€ κ°κ° λ 립λ λ©λͺ¨λ¦¬ μμμ, Code/Data/Stack/Heapμ νμμΌλ‘ ν λΉν΄ μ€λ€.
κ°κ°μ λ 립λ λ©λͺ¨λ¦¬ μμμ ν λΉν΄ μ£ΌκΈ° λλ¬Έμ νλ‘μΈμ€λ λ€λ₯Έ νλ‘μΈμ€μ λ³μλ μλ£μ μ κ·Όν μ μλ€.
μ΄μ λ€λ₯΄κ² μ€λ λλ κ°μ νλ‘μΈμ€ λ΄μ λ©λͺ¨λ¦¬λ₯Ό μλ‘ κ³΅μ ν μ μλ€.
νλ‘μΈμ€κ° ν λΉλ°μ λ©λͺ¨λ¦¬ μμ λ΄μμ Stack νμμΌλ‘ ν λΉλ λ©λͺ¨λ¦¬ μμμ λ°λ‘ ν λΉλ°κ³ , λλ¨Έμ§ Code/Data/Head νμμΌλ‘ ν λΉλ λ©λͺ¨λ¦¬ μμμ 곡μ νλ€.
λ°λΌμ κ°κ°μ μ€λ λλ λ³λμ μ€νμ κ°μ§κ³ μμ§λ§ ν λ©λͺ¨λ¦¬λ μλ‘ μ½κ³ μΈ μ μκ² λλ€.
κ·Έλ₯ λ©΄μ κ΄μ΄ νλ‘μΈμ€μ μ€λ λμ μ°¨μ΄κ° κΆκΈν΄μ λ¬Όμ΄λ³ΌκΉ?
μλλ€. κΈ°λ³Έμ μΈ μ΄μ λ λ³Έλ¬Έ 맨 μμμ μΈκΈνλ― μ§μμκ° νλ‘κ·Έλ¨, νλ‘μΈμ€, μ€λ λμ λν κΈ°λ³Έ κ°λ μ λν΄ μ μ΄ν΄νκ³ μλμ§ νμΈνκΈ° μν¨μ΄λ€.
νλ‘μΈμ€μ μ€λ λλ κ°λ μ λ²μλΆν° λ€λ₯΄λ€. μ€λ λλ νλ‘μΈμ€ μμ ν¬ν¨λμ΄ μκΈ° λλ¬Έμ΄λ€.
νλ‘μΈμ€λ νλ‘κ·Έλ¨μ μ€ννλ μκ° ν΄λΉ νμΌμ΄ μ»΄ν¨ν° λ©λͺ¨λ¦¬μ μ¬λΌκ°κ² λκ³ , μ΄ λμ μΈ μνμ νλ‘κ·Έλ¨μ νλ‘μΈμ€λΌκ³ νλ€.
μ€λ λλ νλ‘μΈμ€λ₯Ό ꡬμ±νλ λ μμ μ€ν λ¨μμ κ°λ μ΄λ€.
νλ‘μΈμ€λ λ©λͺ¨λ¦¬μ μ¬λΌκ° λ μ΄μ체μ λ‘λΆν° λ μμ μΈ μμ€ν μμμ ν λΉ λ°λ λ°λ©΄, μ€λ λλ νλ‘μΈμ€ λ΄λΆμμ λ€λ₯Έ λ©λͺ¨λ¦¬ μμμ κ°μ νλ‘μΈμ€ λ΄ λ€λ₯Έ μ€λ λμ 곡μ νλ€.
μΆμ²: velog, μμ§λμ κΈ 'μ±κΈμ€λ λ, λ©ν°μ€λ λμ μλ―Έ'
νλμ νλ‘μΈμ€μμ νλμ μ€λ λ μ€ν
νλμ λ μ§μ€ν°μ μ€νμΌλ‘ νν.
μμ μ κ·Όμ λν λκΈ°νλ₯Ό μ κ²½μ°μ§ μμλ λλ€.
μ¬λ¬κ°μ μ€λ λκ° κ³΅μ λ μμμ μ¬μ©ν κ²½μ°, κ° μ€λ λκ° μνλ κ²°κ³Όλ₯Ό μ»κ² νλ €λ©΄ κ³΅μ© μμμ λν μ κ·Όμ΄ ν΅μ λμ΄μΌ νλ©°, μ΄ μμ μ νλ‘κ·Έλλ¨Έμκ² λ§μ λ Έλ ₯μ μꡬνκ³ λ§μ λΉμ©μ λ°μμν¨λ€. λ¨μΌ μ€λ λ λͺ¨λΈμμλ μ΄λ¬ν μμ μ΄ νμνμ§ μλ€.
μμ μ ν μμ μ μꡬνμ§ μλλ€.
μμ μ νμ μ¬λ¬ κ°μ νλ‘μΈμ€κ° νλμ νλ‘μΈμλ₯Ό 곡μ ν λ λ°μνλ μμ μΌλ‘ λ§μ λΉμ©μ νμλ‘ νλ€.
μ¬λ¬ κ°μ CPUλ₯Ό νμ©νμ§ λͺ»νλ€.
νλ‘μΈμλ₯Ό μ΅λν νμ©νκ² νλ €λ©΄ cluster λͺ¨λμ μ¬μ©νκ±°λ, μΈλΆμμ μ¬λ¬ κ°μ νλ‘κ·Έλ¨ μΈμ€ν΄μ€λ₯Ό μ€νμν€λ λ°©λ²μ μ¬μ©ν΄μΌ νλ€.
λ κ°μ μμ μ νλμ μ€λ λλ‘ μ²λ¦¬νλ κ²½μ°μ, λ κ°μ μ€λ λλ‘ μ²λ¦¬νλ κ²½μ°λ₯Ό κ°μ νμ λ, νμμ κ²½μ°λ 짧μ μκ° λμ 2κ°μ μ€λ λκ° λ²κ°μκ°λ©΄μ μμ μ μννλ€. κ·Έλμ λμμ λ μμ μ΄ μ²λ¦¬λλ κ²κ³Ό κ°μ΄ λλΌκ² λλ€.
νμ§λ§ μ€νμ¬ λ κ°μ μ€λ λλ‘ μμ ν μκ°μ΄ μ±κΈμ€λ λλ‘ μμ ν μκ°λ³΄λ€ λ 걸릴 μλ μλλ°, κ·Έ μ΄μ λ μ€λ λ κ°μ μμ μ ν(context switching)μ μκ°μ΄ 걸리기 λλ¬Έμ΄λ€.
λ°λΌμ λ¨μν CPUλ§μ μ¬μ©νλ κ³μ°μμ μ΄λΌλ©΄, μ€νλ € λ©ν°μ€λ λλ³΄λ€ μ±κΈμ€λ λλ‘ νλ‘κ·Έλλ°νλ κ²μ΄ λ ν¨μ¨μ μ΄λ€.
νλ‘κ·Έλ¨μ λ€μμ μ€ν λ¨μλ‘ λλμ΄ μ€ν.
νλ‘μΈμ€ λ΄μμ μμμ 곡μ νμ¬ μμ μμ±κ³Ό κ΄λ¦¬μ μ€λ³΅μ μ΅μν
μλ²κ° λ§μ μμ²μ ν¨μ¨μ μΌλ‘ μνν μ μλ νκ²½μ μ 곡
κ°κ°μ μ€λ λκ° κ³ μ μ λ μ§μ€ν°μ μ€νμΌλ‘ ννλ¨.
μλ‘μ΄ νλ‘μΈμ€λ₯Ό μμ±νλ κ²λ³΄λ€ κΈ°μ‘΄ νλ‘μΈμ€μμ μ€λ λλ₯Ό μμ±νλ κ²μ΄ λΉ λ₯΄λ€.
νλ‘μΈμ€μ μμκ³Ό μνλ₯Ό 곡μ νμ¬ ν¨μ¨μ μΌλ‘ μ΄μμ΄ κ°λ₯νλ€.
νλ‘μΈμ€μ μμ μ νλ³΄λ€ μ€λ λμ μμ μ νμ΄ λ λΉ λ₯΄λ€.
νλμ μ€λ λλ§ μ€νμ€μΌ λλ μ€νμκ°μ΄ μ€νλ € μ§μ°λ μ μλ€.
λ©ν° μ€λ λ©μ μν΄ μ΄μ체μ μ μ§μμ΄ νμνλ€.
μ€λ λ μ€μΌμ₯΄λ§μ μ κ²½μ¨μΌ νλ€.
HTTPλ HyperText Transfer Protocolμ μ½μλ‘ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν΄ μ μν ν΅μ νλ‘ν μ½μ λλ€
μΉμ κΈ°μ€μΌλ‘ λΈλΌμ°μ μ μλ² κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν λ°©μμΌλ‘ HTTP νλ‘ν μ½μ μ¬μ©νκ³ μμ΅λλ€.
HTTP νλ‘ν μ½μ μνκ° μλ (stateless) νλ‘ν μ½μ λλ€.
μ¬κΈ°μ μνκ° μλ€λ λ§μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν κ°κ°μ λ°μ΄ν° μμ²μ΄ μλ‘ λ 립μ μΌλ‘ κ΄λ¦¬κ° λλ€λ λ§μ λλ€.
μ΄μ μ 보λλ λ°μ΄ν° μμ²κ³Ό λ€μμ λ³΄λΌ λ°μ΄ν° μμ²μ΄ μλ‘ κ΄λ ¨μ΄ μλ€λ μλ―Έμ λλ€.
μ΄λ¬ν νΉμ§ λλΆμ μλ²λ μΈμ κ³Ό κ°μ λ³λμ μΆκ° μ 보λ₯Ό κ΄λ¦¬νμ§ μμλ λκ³ , λ€μμ μμ² μ²λ¦¬ λ° μλ²μ λΆνλ₯Ό μ€μΌ μ μλ μ±λ₯ μμ μ΄μ μ΄ μκΉλλ€.
HTTP νλ‘ν μ½μ μΌλ°μ μΌλ‘ TCP/IP ν΅μ μμμ λμνλ©° κΈ°λ³Έ ν¬νΈλ 80λ²μ λλ€
URL(Uniform Resource Locators)μ μλ²μ μμ(resource)λ₯Ό μμ²νκΈ° μν΄ μ λ ₯νλ μλ¬Έ μ£Όμμ λλ€.
μ«μλ‘ λμ΄μλ IPμ£Όμ보λ€λ ν¨μ¬ κΈ°μ΅νκΈ° μ½λ€λ μ₯μ μ΄ μμ΅λλ€.
λΈλΌμ°μ μμλ μ΄λ κ² urlλ‘ λμ΄μλ HTTP μμ²μ DNS(Domain Name System)λ₯Ό ν΅ν΄ hostμ ν΄λΉνλ μ€μ IP μ£Όμλ‘ λ³ννμ¬ μλ²μ μμ²(Request)μ 보λ λλ€
URLμ ꡬ쑰λ λ€μκ³Ό κ°μ΅λλ€
HTTP/1.1μ κΈ°λ³Έμ μΌλ‘ 컀λ₯μ λΉ νλμ μμ²κ³Ό μλ΅λ§ μ²λ¦¬νλ€.
μ¦, μ¬λ¬ κ°μ μμ²μ ν λ²μ μ μ‘ν μ μκ³ μλ΅ λν λ§μ°¬κ°μ§λ€.
λ°λΌμ HTML λ¬Έμ λ΄μ ν¬ν¨λ μ¬λ¬ κ°μ 리μμ€ μμ², μ¦ CSS νμΌμ λ‘λνλ link νκ·Έ, μ΄λ―Έμ§ νμΌμ λ‘λνλ img νκ·Έ, μλ°μ€ν¬λ¦½νΈλ₯Ό λ‘λνλ script νκ·Έ λ±μ μν 리μμ€ μμ²μ΄ κ°λ³μ μΌλ‘ μ μ‘λκ³ μλ΅ λν κ°λ³μ μΌλ‘ μ μ‘λλ€.
μ΄μ²λΌ HTTP/1.1μ 리μμ€μ λμ μ μ‘μ΄ λΆκ°λ₯ν ꡬ쑰μ΄λ―λ‘ μμ²ν 리μμ€μ κ°μμ λΉλ‘νμ¬ μλ΅ μκ°λ μ¦κ°νλ λ¨μ μ΄ μλ€.
HTTP/2λ 컀λ₯μ λΉ μ¬λ¬ κ°μ μμ²κ³Ό μλ΅, μ¦ λ€μ€ μμ²/μλ΅μ΄ κ°λ₯νλ€.
μ¬λ¬ 리μμ€μ λμ μ μ‘μ΄ κ°λ₯νλ―λ‘ HTTP/1.1μ λΉν΄ νμ΄μ§ λ‘λ μλκ° μ½ 50% μ λ λΉ λ₯΄λ€κ³ μλ €μ Έ μλ€.
HTTPSλ HTTPμ λ°μ΄ν° μνΈνκ° μΆκ°λ νλ‘ν μ½μ΄λ€.
HTTPSλ HTTP(80λ²)μ λ€λ₯΄κ² 443λ² ν¬νΈλ₯Ό μ¬μ©νλ©°, λ€νΈμν¬ μμμ μ€κ°μ μ 3μκ° μ 보λ₯Ό λ³Ό μ μλλ‘ κ³΅κ°ν€ μνΈνλ₯Ό μ§μνκ³ μλ€.
HTTPSλ₯Ό μ¬μ©ν κ²½μ° λ΄κ° λΈλΌμ°μ λ₯Ό ν΅ν΄ μ λ ₯νλ μ 보λ₯Ό (ex: form data) λ€λ₯Έ λκ΅°κ°κ° νμ³λ³΄μ§ λͺ»νκ² λ§λλ κΈ°λ₯μ λλ€.
HTTP νμμΌλ‘ μ λ ₯ν μ 보λ₯Ό λ³΄λΌ κ²½μ°, μ λ ₯ν νν κ·Έλλ‘ λ³΄λ΄μ§κ² λλ€
id: my_naver_id
pw: my_naver_pw
λ°λΌμ λκ΅°κ°κ° μ μμ μΌλ‘ μ΄ μμ²μ μΊμΉν΄μ λ΄ μ 보λ₯Ό λ€μ¬λ€ λ³Έλ€λ©΄, κ·Έλλ‘ μμ΄λμ λΉλ°λ²νΈκ° λ ΈμΆλ μ μλ€.
νμ§λ§ HTTPSλ₯Ό μ¬μ©ν κ²½μ°, μ΄ ν΅μ μμ²(request)μ λ³΄λΌ λ μλ΅(response)μ ν΄μ£Όλ μλ²λ§ μμλ³Ό μ μλλ‘ μ 보λ₯Ό μνΈνν΄μ 보λ΄κ² λλ€
μ€μ λ‘ μ΄λ λ€λ κ²μ μλκ³ μ΄ν΄λ₯Ό λκΈ°μν΄ μμ±νμμ΅λλ€ π
id: ^!@$!A_!@E!@#(_a*&@)
pw: !@#%_+#$%_!#@!$
λν HTTPSλ κΈ°κ΄μΌλ‘λΆν° κ²μ¦λ μ¬μ΄νΈλ§ μ£Όμμ HTTPS μ¬μ©μ΄ νκ°λκΈ° λλ¬Έμ, λ΄κ° μ μν μ¬μ΄νΈκ° μλμ μΌλ‘ μμ ν μ£Όμλ₯Ό κ°μ‘μμ μ¦λͺ νλ κ²μ΄κΈ°λ νλ€
HTTPSλ 곡κ°ν€/κ°μΈν€ μνΈν λ°©μμ μ΄μ©ν΄ λ°μ΄ν°λ₯Ό μνΈννκ³ μλ€. 곡κ°ν€μ κ°μΈν€λ μλ‘λ₯Ό μν 1μμ ν€μ΄λ€.
- 곡κ°ν€: λͺ¨λμκ² κ³΅κ°λ, λλ 곡κ°κ° κ°λ₯ν ν€
- κ°μΈν€: λλ§ κ°μ§κ³ μκ³ μμ΄μΌ νλ ν€
곡κ°ν€μ κ°μΈν€λ‘ μνΈννλ©΄ λ€μκ³Ό κ°μ ν¨κ³Όλ₯Ό μ»μ μ μλ€.
- 곡κ°ν€ μνΈν: 곡κ°ν€λ‘ μνΈνλ₯Ό νλ©΄ κ°μΈν€λ‘λ§ λ³΅νΈνν μ μλ€. -> κ°μΈν€λ λλ§ κ°μ§κ³ μμΌλ―λ‘, λλ§ λ³Ό μ μλ€.
- κ°μΈν€ μνΈν: κ°μΈν€λ‘ μνΈννλ©΄ 곡κ°ν€λ‘λ§ λ³΅νΈνν μ μλ€. -> 곡κ°ν€λ λͺ¨λμκ² κ³΅κ°λμ΄ μμΌλ―λ‘, λ΄κ° μΈμ¦ν μ 보μμ μλ € μ λ’°μ±μ 보μ₯ν μ μλ€.
HTTPSλ₯Ό μ¬μ©νκΈ° μν΄μλ μΈμ¦λ κΈ°κ΄ CA(Certificate Authority)μ 곡κ°ν€λ₯Ό μ μ‘νμ¬ μΈμ¦μλ₯Ό λ°κΈλ°μμΌ νλ€.
HTTPλ νμ μ°κ²°λμ΄μλ κ²μ΄ μλ νμν λλ§λ€ μμ²μ 보λ΄κ³ μλ΅μ λ°λ λΉμ°κ²°μ±μ΄λΌλ νΉμ§μ κ°μ§κ³ μλ€.
μ΄λ ν΄λΌμ΄μΈνΈκ° μλ΅μ λ°μΌλ©΄ μλ²λ μ μμ λλλ€λ κ²μΈλ°, μ°κ²°μ΄ λλλ©΄ μν μ λ³΄κ° μ μ§λμ§ μλ νΉμ±μ΄ μλ€.
λ‘κ·ΈμΈμ ν λ€, λ€λ₯Έ λλ©μΈμΌλ‘ μ΄λνλ€ κΈ°μ‘΄ μ¬μ΄νΈλ‘ λμμ€λ©΄ λ‘κ·ΈμΈ μ λ³΄κ° μ μ§λμ§ μλλ€λ κ²
μ΄λ κ² μ μ§λμ§ μλ λ‘κ·ΈμΈ μ 보λ₯Ό μ μ§νκΈ° μν λ°©λ²μ΄ μΏ ν€μ μΈμ μ΄λ€.
HTTPμ μΌμ’ μΌλ‘ μ¬μ©μκ° μ΄λ ν μΉ μ¬μ΄νΈλ₯Ό λ°©λ¬Έν κ²½μ°, κ·Έ μ¬μ΄νΈκ° μ¬μ©νκ³ μλ μλ²μμ μ¬μ©μμ μ»΄ν¨ν°μ μ μ₯νλ μμ κΈ°λ‘ μ 보 νμΌμ΄λ€.
HTTPμμ ν΄λΌμ΄μΈνΈμ μν μ 보λ₯Ό ν΄λΌμ΄μΈνΈμ PCμ μ μ₯νμλ€κ° νμμ μ 보λ₯Ό μ°Έμ‘°νκ±°λ μ¬μ¬μ©ν μ μλ€.
- μ΄λ¦, κ°, λ§λ£μΌ(μ μ₯ κΈ°κ° μ€μ ), κ²½λ‘ μ λ³΄λ‘ κ΅¬μ±λμ΄ μλ€.
- ν΄λΌμ΄μΈνΈμ μ΄ 300κ°μ μΏ ν€λ₯Ό μ μ₯ν μ μλ€.
- νλμ λλ©μΈ λΉ 20κ°μ μΏ ν€λ₯Ό κ°μ§ μ μλ€
- νλμ μΏ ν€λ 4KB(=4096byte)κΉμ§ μ μ₯ κ°λ₯νλ€.
- ν΄λΌμ΄μΈνΈκ° νμ΄μ§λ₯Ό μμ²νλ€ (μ¬μ©μκ° μΉμ¬μ΄νΈ μ κ·Ό) μΉ μλ²λ μΏ ν€λ₯Ό μμ±νλ€
- μμ±ν μΏ ν€μ μ 보λ₯Ό λ΄μ HTTP νλ©΄μ λλ €μ€ λ, κ°μ΄ ν΄λΌμ΄μΈνΈμκ² λλ €μ€λ€
- λ겨 λ°μ μΏ ν€λ ν΄λΌμ΄μΈνΈκ° κ°μ§κ³ μλ€κ°(λ‘컬 PCμ μ μ₯) λ€μ μλ²μ μμ²ν λ μμ²κ³Ό ν¨κ» μΏ ν€λ₯Ό μ μ‘νλ€
- λμΌ μ¬μ΄νΈ μ¬λ°©λ¬Έμ ν΄λΌμ΄μΈνΈμ PCμ ν΄λΉ μΏ ν€κ° μλ κ²½μ°, μμ² νμ΄μ§μ ν¨κ» μΏ ν€λ₯Ό μ μ‘νλ€
- λ°©λ¬Ένλ μ¬μ΄νΈμ λ€μ λ°©λ¬Έ νμμ λ μμ΄λμ λΉλ°λ²νΈ μλ μ λ ₯
- νμ μ°½μ ν΅ν΄ "μ€λ μ΄ μ°½μ λ€μ λ³΄μ§ μκΈ°" 체ν¬
- μΏ ν€μ νΉμ§μΌλ‘λ ν΄λΌμ΄μΈνΈ(λΈλΌμ°μ )λ¨μ μ μ₯λλ€λ κ²μ΄λ€
- μ¦ λ³΄μμ μ½ν μ μλ€
- μΏ ν€λ₯Ό νμ³μ κ³μ μ κ·Ό κΆν λ±μ νμ·¨νμ¬ μ μ μ μ 보λ₯Ό μ μ©ν μ μλ€
document.cookie λ₯Ό ν΅ν΄ μΏ ν€ μ€ν 리μ§μ μ μ₯λ μ¬μ©μ κΆνμ΄ μλ μΏ ν€μ μ κ·Ό
HTTP μΈμ μ΄λ ν΄λΌμ΄μ΄μΈνΈκ° μΉμλ²μ μ°κ²°λ μκ°λΆν° μΉ λΈλΌμ°μ λ₯Ό λ«μ μλ²μμ HTTP ν΅μ μ λλΌ λ κΉμ§μ κΈ°κ° μ΄λ€.
νμ§λ§ λ³΄ν΅ μΈμ μ΄λΌκ³ λ§ν λμλ μλ²μ μΈμ μ λν μ 보(μΈμ μν, ν΄λΌμ΄μΈνΈ μν, μΈμ λ°μ΄ν° λ±)λ₯Ό μ μ₯ν΄ λκ³ μΈμ μΏ ν€( κ³ μ ν μΈμ ID κ° )λ₯Ό ν΄λΌμ΄μΈνΈμκ² μ£Όμ΄ μλ²κ° ν΄λΌμ΄μΈνΈλ₯Ό μλ³ν μ μλλ‘ νλ λ°©μμ체λ₯Ό μλ―Ένλ κ²½μ° κ° λ§λ€.
- λ°λ‘ μ©λμ μ νμ΄ μλ€ (μλ²μ λ₯λ ₯μ λ°λΌ λ€λ₯Ό μ μλ€)
- μλ²μ μΈμ κ°μ²΄λ₯Ό μμ±νλ©° κ° ν΄λΌμ΄μΈνΈ λ§λ€ κ³ μ ν μΈμ ID κ°μ λΆμ¬νλ€
- μΏ ν€λ₯Ό μ¬μ©νμ¬ μΈμ ID κ°μ ν΄λΌμ΄μΈνΈμ 보λΈλ€
- μΉ λΈλΌμ°μ κ° μ’ λ£λλ©΄ μΈμ μΏ ν€λ μμ λλ€
- ν΄λΌμ΄μΈνΈ νμ΄μ§κ° μμ²νλ€
- μλ²κ° ν΄λΌμ΄μΈνΈλ§λ€ κ°λ³μ μΈμ IDλ₯Ό λΆμ¬νλ€
- ν΄λΌμ΄μΈνΈλ μμ²ν λλ§λ€ μΈμ IDλ₯Ό μλ²μ μ λ¬νλ€
- μλ²λ λ°μ μΈμ IDλ‘ ν΄λΌμ΄μΈνΈ μ 보λ₯Ό κ°μ Έμ νμ©νλ€
-
μ μ₯ μμΉ
μΏ ν€: ν΄λΌμ΄μΈνΈμ νμΌλ‘ μ μ₯λμ΄ μλ€
μΈμ : μλ²μ μ μ₯λμ΄ μλ€
-
보μ
μΏ ν€: ν΄λΌμ΄μΈνΈμ λΈλΌμ°μ λ‘컬μ μ μ₯λκΈ° λλ¬Έμ λ³μ§λκ±°λ HTTP request μμ² μμ μ΄λ₯Ό κ°μ·¨λΉν μ μμ΄μ 보μμ μ·¨μ½νλ€
μΈμ : μΏ ν€λ₯Ό μ΄μ©ν΄μ μΈμ idλ§ μ μ₯νκ³ κ·Έκ²μΌλ‘ ꡬλΆν΄μ μλ²μμ μ²λ¦¬νκΈ° λλ¬Έμ λΉκ΅μ μΌλ‘ μμ νλ€
-
λΌμ΄ν μ¬μ΄ν΄
μΏ ν€: λ§λ£μκ°μ μμ§λ§ νμΌλ‘ μ μ₯λκΈ° λλ¬Έμ λΈλΌμ°μ λ₯Ό μ’ λ£ν΄λ κ³μν΄μ μ λ³΄κ° λ¨μμλ€. λ§λ£κΈ°κ°μ λ°λΌ μλμ μΌλ‘ λλνκ² μΏ ν€λ₯Ό μμ ν λκΉμ§ μ μ§λλ€
μΈμ : λ§λ£κΈ°κ°μ μ ν μλ μμ§λ§ λΈλΌμ°μ κ° μ’ λ£λλ©΄ κ·Έμ μκ΄μμ΄ μμ λλ€
-
μλ
μΏ ν€: μΏ ν€μ μ λ³΄κ° μκΈ° λλ¬Έμ μλ²μ μμ²μ μλκ° λΉ λ₯΄λ€
μΈμ : μ λ³΄κ° μλ²μ μκΈ° λλ¬Έμ μ²λ¦¬κ° μꡬλμ΄ λΉκ΅μ μΌλ‘ λ리λ€
CORSλ Cross Origin Resource Sharingμ μ½μλ‘, κ΅μ°¨ μΆμ² 곡μ λΌλ μλ―Έμ λλ€.
Originμ β scheme, β‘ host, β’ port λ‘ μ΄λ£¨μ΄μ§ λλ©μΈμ μλ―Έν©λλ€. (IEμ κ²½μ° portλ₯Ό λΉκ΅νμ§ μμ)
https://www.naver.com/
β scheme : https
β‘ host: www.naver.com
β’ port: null (곡κ°λμ§ μμ)
νμ¬ β μμ μ΄ μν μΆμ²(Origin)
λ₯Ό κΈ°μ€μΌλ‘ β‘ λ€λ₯Έ μΆμ²(Origin)
μ APIλ₯Ό μμ²νκ² λλ©΄ λΈλΌμ°μ μμ μ΄ μμ²μΌλ‘ λμ΄μ€λ κ²½κ³Όκ° μμ νμ§ νλ¨νκ² λλλ°,
μλ΅μ 보λ΄λ μΆμ²κ° β μμ μ΄ μν μΆμ²
κ° μλ, β‘ λ€λ₯Έ μΆμ²
μ¬λ μλ‘ μμλλ μΆμ²λΌλ©΄ μμ²μ λν΄ νμ©ν΄μ£Όλ μλ΅ ν€λλ₯Ό 보λ΄, λΈλΌμ°μ κ° μλ΅ κ²°κ³Όλ₯Ό 보μ¬μ€λλ€.
μ΄λ₯Ό CORS(Cross Origin Resource Sharing)μ΄λΌ ν©λλ€.
λͺ¨λ μλ²λ€μ΄ λ€ CORSλ₯Ό μΈμ§νμ§λ μκΈ° λλ¬Έμ΄λ€.
κ²°κ³Όμ μΌλ‘ λΈλΌμ°μ λ κ±°λΆνλ€κ³ νλλΌλ, μλ²λ μ²λ¦¬ν΄λ²λ¦¬λ κ²°κ³Όκ° μκΈΈ μ μκΈ° λλ¬Έμ
μλ²κ° μμ νκ² μμ²μ μ£Όκ³ λ°μ μ μλλ‘ λΈλΌμ°μ μμ ν΄λΉ μμ²(CORS)μ μ²λ¦¬νλ€
CORSλ λ€λ₯Έ Originμ λν μμ²μ νμ©νλ μ μ± μ λλ€.
κ°μ Originμμ http ν΅μ μ νλ κ²½μ° μμμ cookieκ° request headerμ λ€μ΄κ°μ§λ§, κ΅μ°¨ μΆμ²λ‘ μμ²νλ μν©μμλ κ·Έλ μ§ μμ΅λλ€.
Originμ΄ λ€λ₯Έ http ν΅μ μμλ request headerμ μΏ ν€κ° μλμΌλ‘ λ€μ΄κ°κΈ° μκΈ° λλ¬Έμ μλ²μκ² λλ ν΄λΌμ΄μΈνΈμκ² λ΄κ° μ΄λ€ μμ²μ 보λ΄λ μ§ μλ €μ€ νμκ° μμ΅λλ€.
νλ‘ νΈ > WithCredentials: true
μλ² > Access-Control-Allow-Credentials: true
- μλ² κ°λ°μμ λΉ λ₯΄κ² μν΅νλ€
λ§μ½ νλ‘ νΈμμ CORSκ΄λ ¨ μ€μ μ΄ λ€ λλ μ΄νμ HTTP μμ²μ 보λμ λ CORS μ€λ₯κ° λ° κ²½μ° ν΄λΉ μ€λ₯λ₯Ό μΊ‘μ³ν΄μ κ°μ΄ νμΈν΄λ³΄λ λ°©λ²
λ¨Όμ νλ‘ νΈμμ μλ΅ ν€λμ μ λλ‘ λ μ 보λ₯Ό λ£μ΄λ μ§ νμ μ κ°μ§λ κ²μ΄ μ€μνλ€ (credentials κ΄λ ¨ μ€μ μ νλμ§?)
- κ°λ° νκ²½μ νλ‘μ μ€μ μ ν΄λλ€
λ§μ½ κ°λ° νκ²½μ μμ΄μ μΈν μ μ ν΄λμ μνμ΄κ³ μλ²μ μΈν μ΄ μλ²½ν¨μλ λ¬Έμ κ° μκΈ΄λ€λ©΄, κ°λ° νκ²½μμμ νλ‘μ μ€μ λ λμμ΄ λ μ μμ΅λλ€.
ν΄λΉ νλ‘μ μ€μ μ νκ²½μ λ°λΌ (CRAλ©΄ CRA) λ°©λ²μ΄ λ€λ₯΄λ―λ‘ νμΈν΄λ³΄κ³ λ£μΌμλ©΄ λ©λλ€!
μλΉμ€λ‘μμ μννΈμ¨μ΄(Software-as-a-Service, SaaS)λ ν΄λΌμ°λ μ ν리μΌμ΄μ κ³Ό κΈ°λ³Έ IT μΈνλΌ λ° νλ«νΌμ μ¬μ©μμκ² μ 곡νλ ν΄λΌμ°λ μ»΄ν¨ν ννμ λλ€.
SaaS
λ ν΄λΌμ°λ μλΉμ€ μ 곡μ
체(ex: AWS, Azure, IBM Cloud, ...)
μ μν΄ ν΄λΌμ°λ νκ²½μ΄ κ΄λ¦¬λ©λλ€.
SW, λ°μ΄ν°λ₯Ό PCμ λ³λ μ€μΉμμ΄ μΉμμ μ§μ μ¬μ©ν μ μλ€λ μ₯μ μ΄ μμ΅λλ€.
SaaSμ μλ‘λ Google Docs, Microsoft Office 365
μ κ°μ μλΉμ λμ μλΉμ€μ μΈμ¬ κ΄λ¦¬ μννΈμ¨μ΄, μ½ν
μΈ κ΄λ¦¬ μμ€ν
, κ³ κ° κ΄κ³ κ΄λ¦¬ ν΄, IDE(ν΅ν© κ°λ° νκ²½)λ₯Ό μ 곡νλ μν°νλΌμ΄μ¦ μλΉμ€
κ° μμ΅λλ€.
-
μ± κ°λ° μ§μ λꡬ μ 곡βν©λλ€. μ¬μ©μκ° μ€μ μ ν리μΌμ΄μ λ° λ°μ΄ν°λ₯Ό μ²λ¦¬νλ―λ‘ κ°λ°μμ νλ‘κ·Έλλ¨Έμκ² μ΄μμ μΈ μ루μ μΌ μ μμ΅λλ€
-
νλ«νΌ κΈ°λ°(Cloud μ μ²΄κ° μ 곡νλ S/W μ¬μ©)μΌλ‘ μ±μ κ°λ°νκΈ° λλ¬Έμ βνΉμ νλ«νΌμ μ’ μ κ°λ₯μ±μ΄ μμ β νμ 체μ PaaSμμ νΈν μ΄λ €μ
-
μλΉμ€ μ 곡μ μ²΄κ° κ³ κ°μ λμ ν΄ ν΄λΌμ°λλ₯Ό ν΅ν΄ μΈνλΌ(μ€μ μλ², λ€νΈμν¬, κ°μν, μ€ν 리μ§)λ₯Ό κ΄λ¦¬ν©λλ€
-
μ»΄ν¨ν μΈνλΌ(μ΄μ체μ , μλ², μ€ν λ¦¬μ§ λ±) μ 곡(Amazonμ AWS λ±) β
-
물리μ μΌλ‘ λ§λ€μ΄μ§μ§ μμ κ°μ νκ²½μ΄λ―λ‘ μμ€ν ν΄μ²΄ μ©μ΄β
μ μμΌ
μ μ μν λ°λ³΅ μμ
μ ν΅ν΄ μ€μ μλ κ°λ₯ν μννΈμ¨μ΄λ₯Ό κ°λ°νμ¬ μ§μμ μΌλ‘ μ 곡νκΈ° μν μννΈμ¨μ΄ κ°λ° λ°©μμ
λλ€.
μλνλ μννΈμ¨μ΄μ μμ κ΅¬μ± μμλ₯Ό μ μνκ² μ 곡νμ¬ κ³ κ°μ λ§μ‘±λλ₯Ό κ°μ νλ κ²μ΄ μ μμΌ λ°©λ²λ‘ μ ν΅μ¬μ λλ€.
λ€μκ³Ό κ°μ λΆλΆμ κ°μΉλ₯Ό λ‘λλ€.
- κ°μΈκ³Ό κ°μΈ κ°μ μνΈμμ©μ΄ νλ‘μΈμ€ λ° ν΄λ³΄λ€ μ°μ
- μλνλ μννΈμ¨μ΄κ° ν¬κ΄μ μΈ λ¬Έμλ³΄λ€ μ°μ
- κ³ κ°κ³Όμ νμ μ΄ κ³μ½ νμλ³΄λ€ μ°μ
- λ³νμ λμνλ κ²μ΄ κ³νμ λ°λ₯΄λ κ²λ³΄λ€ μ°μ
CI/CDλ μ ν리μΌμ΄μ κ°λ° λ¨κ³λ₯Ό μλννμ¬ μ ν리μΌμ΄μ μ λ³΄λ€ μ§§μ μ£ΌκΈ°λ‘ κ³ κ°μκ² μ 곡νλ λ°©λ²μ λλ€.
CI/CDμ κΈ°λ³Έ κ°λ μ μ§μμ μΈ ν΅ν©, μ§μμ μΈ μλΉμ€ μ 곡, μ§μμ μΈ λ°°ν¬μ λλ€.
CI/CDλ μλ‘μ΄ μ½λ ν΅ν©μΌλ‘ μΈν΄ κ°λ° λ° μ΄μνμ λ°μνλ λ¬Έμ (μΌλͺ "μΈν κ·Έλ μ΄μ ν¬(integration hell)")μ ν΄κ²°νκΈ° μν μ루μ μ λλ€.
CI
λ κ°λ°μλ₯Ό μν μλν νλ‘λ μ€μΈ μ§μμ μΈ ν΅ν© Continuous Integration
μ μλ―Έν©λλ€.
CIλ₯Ό μ±κ³΅μ μΌλ‘ ꡬνν κ²½μ° μ ν리μΌμ΄μ μ λν μλ‘μ΄ μ½λ λ³κ²½ μ¬νμ΄ μ κΈ°μ μΌλ‘ λΉλ λ° ν μ€νΈλμ΄ κ³΅μ 리ν¬μ§ν 리μ ν΅ν©λλ―λ‘ μ¬λ¬ λͺ μ κ°λ°μκ° λμμ μ ν리μΌμ΄μ κ°λ°κ³Ό κ΄λ ¨λ μ½λ μμ μ ν κ²½μ° μλ‘ μΆ©λν μ μλ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
CD
λ μ§μμ μΈ μλΉμ€ μ 곡 Continuous Delivery
λ° μ§μμ μΈ λ°°ν¬ Continuous Deployment
λ₯Ό μλ―Έν©λλ€.
μ§μμ μΈ μ 곡
μ΄λ κ°λ°μλ€μ΄ μ ν리μΌμ΄μ
μ μ μ©ν λ³κ²½ μ¬νμ΄ λ²κ·Έ ν
μ€νΈλ₯Ό κ±°μ³ λ¦¬ν¬μ§ν 리(μ: GitHub λλ 컨ν
μ΄λ λ μ§μ€νΈλ¦¬)μ μλμΌλ‘ μ
λ‘λλλ κ²μ λ»ν©λλ€.
μ§μμ μΈ λ°°ν¬
λ κ°λ°μμ λ³κ²½ μ¬νμ 리ν¬μ§ν 리μμ κ³ κ°μ΄ μ¬μ© κ°λ₯ν νλ‘λμ
νκ²½κΉμ§ μλμΌλ‘ 릴리μ€νλ κ²μ μλ―Έν©λλ€
μΉν©μ΄λ μ΅μ νλ°νΈμλ νλ μμν¬μμ κ°μ₯ λ§μ΄ μ¬μ©λλ λͺ¨λ λ²λ€λ¬(Module Bundler)μ λλ€.
λͺ¨λ λ²λ€λ¬λ μΉ μ ν리μΌμ΄μ μ ꡬμ±νλ μμ(HTML, CSS, Javscript, Images λ±)μ λͺ¨λ κ°κ°μ λͺ¨λλ‘ λ³΄κ³ μ΄λ₯Ό μ‘°ν©ν΄μ λ³ν©λ νλμ κ²°κ³Όλ¬Όμ λ§λλ λꡬλ₯Ό μλ―Έν©λλ€.
λͺ¨λμ΄λ νλ‘κ·Έλλ° κ΄μ μμ νΉμ κΈ°λ₯μ κ°λ μμ μ½λ λ¨μλ₯Ό μλ―Έν©λλ€. μλ°μ€ν¬λ¦½νΈλ‘ μΉλ©΄ μλμ κ°μ μ½λκ° λͺ¨λμ λλ€.
// π math.js
function sum(a, b) {
return a + b;
}
function substract(a, b) {
return a - b;
}
const PI = 3.14;
export { sum, substract, PI };
μ΄ math.js νμΌμ μλμ κ°μ΄ 3κ°μ§ κΈ°λ₯μ κ°κ³ μλ λͺ¨λμ λλ€.
- λ μ«μμ ν©μ ꡬνλ sum() ν¨μ
- λ μ«μμ μ°¨λ₯Ό ꡬνλ substract() ν¨μ
- μμ£Όμ¨ κ°μ κ°λ PI μμ
μ΄μ²λΌ μ±κ²©μ΄ λΉμ·ν κΈ°λ₯λ€μ νλμ μλ―Έμλ νμΌλ‘ κ΄λ¦¬νλ©΄ λͺ¨λμ΄ λ©λλ€.
μΉν©μμ μ§μΉνλ λͺ¨λμ΄λΌλ κ°λ μ μμ κ°μ΄ μλ°μ€ν¬λ¦½νΈ λͺ¨λμλ§ κ΅νλμ§ μκ³ μΉ μ ν리μΌμ΄μ μ ꡬμ±νλ λͺ¨λ μμμ μλ―Έν©λλ€.
μΉ μ ν리μΌμ΄μ μ μ μνλ €λ©΄ HTML, CSS, Javascript, Images, Font λ± λ§μ νμΌλ€μ΄ νμνμ£ . μ΄ νμΌ νλνλκ° λͺ¨λ λͺ¨λμ λλ€.
μλ κ·Έλ¦Όκ³Ό κ°μ΄ μΉ μ ν리μΌμ΄μ μ ꡬμ±νλ λͺμ, λͺλ°±κ°μ μμλ€μ νλμ νμΌλ‘ λ³ν© λ° μμΆ ν΄μ£Όλ λμμ λͺ¨λ λ²λ€λ§μ΄λΌκ³ ν©λλ€.
νμΌλ€μ μ°κ΄λ κ΄κ³λ₯Ό νμ νμ¬ νμΌλ€μ νλμ νμΌλ‘ μμΆμμΌμ£Όλ κ³Όμ μ λ²λ€λ§ κ³Όμ μ΄λΌ ν©λλ€.
- νμΌ λ¨μμ μλ°μ€ν¬λ¦½νΈ λͺ¨λ κ΄λ¦¬μ νμμ±
- μΉ κ°λ° μμ μλν λꡬ
- μΉ μ ν리μΌμ΄μ μ λΉ λ₯Έ λ‘λ© μλμ λμ μ±λ₯
μμΈν 보기
μ λ¬Έμ κ΄μ μμ κ³ μλ μλ°μ€ν¬λ¦½νΈλ μλμ κ°μ΄ νΈλ¦¬ν μ ν¨ λ²μλ₯Ό κ°κ³ μμ΅λλ€.
var window = 10;
console.log(window); // 10
function logText() {
console.log(window); // 10
}
μλ°μ€ν¬λ¦½νΈμ λ³μ μ ν¨ λ²μλ κΈ°λ³Έμ μΌλ‘ μ μ λ²μλ₯Ό κ°μ΅λλ€. μ΅λν λμ λ³μ λ²μλ₯Ό κ°κΈ° λλ¬Έμ μ΄λμμλ μ κ·ΌνκΈ°κ° νΈλ¦¬νμ£ .
κ·Έλ°λ° μ΄λ¬ν μ₯μ μ΄ μ€μ λ‘ μΉ μ ν리μΌμ΄μ μ κ°λ°ν λλ μλμ κ°μ λ¬Έμ μ μΌλ‘ λ³ν©λλ€.
<!-- index.html -->
<html>
<head>
<!-- ... -->
</head>
<body>
<!-- ... -->
<script src="./app.js"></script>
<script src="./main.js"></script>
<script>
getNum(); // ??
</script>
</body>
</html>
κ°κ° λ€λ₯Έ νμΌ(app, main)μμ μλμΉ μκ² κ°μ ν¨μλ₯Ό μ μνκ³ νΈμΆνμ λ, index.htmlμμλ μ΄λ€ ν¨μλ₯Ό λΆλ¬μ€κ² λ κΉμ?
// app.js
var num = 10;
function getNum() {
console.log(num);
}
// main.js
var num = 20;
function getNum() {
console.log(num);
}
κ²°κ³Όλ κ°μ₯ λμ€μ λΆλ¬μ€κ² λλ script νμΌμΈ main.jsμ μ μΈλ κ° 20μ λλ€.
app.jsμμ μ μΈν num λ³μλ main.jsμμ λ€μ μ μΈνκ³ 20μ ν λΉνκΈ° λλ¬Έμ΄μ£ .
μ΄λ¬ν λ¬Έμ μ μ μ€μ λ‘ λ³΅μ‘ν μ ν리μΌμ΄μ μ κ°λ°ν λ λ°μν©λλ€.
λ³μμ μ΄λ¦μ λͺ¨λ κΈ°μ΅νμ§ μμ μ΄μ λ³μλ₯Ό μ€λ³΅ μ μΈνκ±°λ μλμΉ μμ κ°μ ν λΉν μ μμ£ .
μ΄μ²λΌ νμΌ λ¨μλ‘ λ³μλ₯Ό κ΄λ¦¬νκ³ μΆμ μꡬ, μλ°μ€ν¬λ¦½νΈ λͺ¨λνμ λν μꡬλ₯Ό μμ κΉμ§ AMD, Common.jsμ κ°μ λΌμ΄λΈλ¬λ¦¬λ‘ νμ΄μμ΅λλ€.
μ΄μ λΆν° νλ°νΈμλ κ°λ° μ 무λ₯Ό ν λ κ°μ₯ λ§μ΄ λ°λ³΅νλ μμ μ ν μ€νΈ νΈμ§κΈ°μμ μ½λλ₯Ό μμ νκ³ μ μ₯ν λ€ λΈλΌμ°μ μμ μλ‘ κ³ μΉ¨μ λλ₯΄λ κ²μ΄μμ΅λλ€. κ·ΈλμΌ νλ©΄μ λ³κ²½λ λ΄μ©μ λ³Ό μ μμμ£ .
μ΄μΈμλ μΉ μλΉμ€λ₯Ό κ°λ°νκ³ μΉ μλ²μ λ°°ν¬ν λ μλμ κ°μ μμ λ€μ ν΄μΌ νμ΅λλ€.
- HTML, CSS, JS μμΆ
- μ΄λ―Έμ§ μμΆ
- CSS μ μ²λ¦¬κΈ° λ³ν
μ΄λ¬ν μΌλ€μ μλν ν΄μ£Όλ λꡬλ€μ΄ νμνμ΅λλ€. κ·Έλμ Gruntμ Gulp κ°μ λꡬλ€μ΄ λ±μ₯νμ΅λλ€.
μΌλ°μ μΌλ‘ νΉμ μΉ μ¬μ΄νΈλ₯Ό μ κ·Όν λ 5μ΄ μ΄λ΄λ‘ μΉ μ¬μ΄νΈκ° νμλμ§ μμΌλ©΄ λλΆλΆμ μ¬μ©μλ€μ ν΄λΉ μ¬μ΄νΈλ₯Ό λ²μ΄λκ±°λ μ§μ€λ ₯μ μκ² λ©λλ€.
κ·Έλμ μΉ μ¬μ΄νΈμ λ‘λ© μλλ₯Ό λμ΄κΈ° μν΄ λ§μ λ Έλ ₯λ€μ΄ μμμ΅λλ€. κ·Έ μ€ λνμ μΈ λ Έλ ₯μ΄ λΈλΌμ°μ μμ μλ²λ‘ μμ²νλ νμΌ μ«μλ₯Ό μ€μ΄λ κ²μ λλ€.
μ΄λ₯Ό μν΄ μμμ μ΄ν΄λ³Έ μΉ νμ€ν¬ 맀λμ λ₯Ό μ΄μ©ν΄ νμΌλ€μ μμΆνκ³ λ³ν©νλ μμ λ€μ μ§ννμ΅λλ€.
λΏλ§ μλλΌ μ΄κΈ° νμ΄μ§ λ‘λ© μλλ₯Ό λμ΄κΈ° μν΄ λμ€μ νμν μμλ€μ λμ€μ μμ²νλ λ μ΄μ§ λ‘λ©(Lazy Loading)μ΄ λ±μ₯νμ£ .
μΉν©μ κΈ°λ³Έμ μΌλ‘ νμν μμμ 미리 λ‘λ©νλκ² μλλΌ κ·Έ λ κ·Έ λ μμ²νμλ μ² νμ κ°κ³ μμ΅λλ€.
μΉν©μ ν΅ν΄ λͺ¨λμ λ²λ€λ§νλ©΄, ν΄λΉ νμΌ λ€μ νλλ‘ λ¬ΆκΈ° λλ¬Έμ μ μ HTTP μμ²μΌλ‘λ λ²λ€λ§ λ νμΌμ λΆλ¬μ¬ μ μμ΅λλ€.
μ΄λ¬ν μ΄μ λλ¬Έμ μ°λ¦¬λ μΉν©μ μ¬μ©ν©λλ€.
λ°λ²¨μ μλ°μ€ν¬λ¦½νΈμμ μ§μνλ μ΅μ λ¬Έλ² (ES6, ES7, ES8, ES9, ...) λ€μ μ΅λν λ§μ λΈλΌμ°μ νκ²½μμ νΈνμ΄ κ°λ₯νλλ‘ λ³νν΄μ£Όλ(νΈλμ€νμΌλ§ν΄μ£Όλ) μΈμ΄μ λλ€.
λ°λ²¨μ μ¬μ©νλ©΄ κ±°λν λ³νκ° μκΈ°κΈ° μμν κΈ°μ μΈ ES6 (ECMAScript 2015) μ΄νμ λ¬Έλ²μ λΈλΌμ°μ μμ λ²μ©μ μΌλ‘ μ¬μ©λλ λ¬Έλ² λ¨κ³λ‘ λ³νν΄μ€ μ μμ΅λλ€.
// Babel Input: ES2015 arrow function
[1, 2, 3].map((n) => n + 1);
// Babel Output: ES5 equivalent
[1, 2, 3].map(function (n) {
return n + 1;
});
- entry
- output
- loader
- plugin
entry μμ±μ μΉν©μμ μΉ μμμ λ³ννκΈ° μν΄ νμν μ΅μ΄ μ§μ μ μ΄μ μλ°μ€ν¬λ¦½νΈ νμΌ κ²½λ‘μ λλ€.
λΉλλ₯Ό ν λμ νμΌμ μμΉ
λΌκ³ λ³Ό μ μμ΅λλ€
// webpack.config.js
module.exports = {
entry: "./src/index.js",
};
entry μμ±μ μ§μ λ νμΌμλ μΉ μ ν리μΌμ΄μ μ μ λ°μ μΈ κ΅¬μ‘°μ λ΄μ©μ΄ λ΄κ²¨μ Έ μμ΄μΌ ν©λλ€.
μΉν©μ΄ ν΄λΉ νμΌμ κ°μ§κ³ μΉ μ ν리μΌμ΄μ μμ μ¬μ©λλ λͺ¨λλ€μ μ°κ΄ κ΄κ³λ₯Ό μ΄ν΄νκ³ λΆμνκΈ° λλ¬Έμ μ ν리μΌμ΄μ μ λμμν¬ μ μλ λ΄μ©λ€μ΄ λ΄κ²¨μ Έ μμ΄μΌ ν©λλ€.
// index.js
import LoginView from "./LoginView.js";
import HomeView from "./HomeView.js";
import PostView from "./PostView.js";
function initApp() {
LoginView.init();
HomeView.init();
PostView.init();
}
initApp();
μ±κΈ νμ΄μ§ μ ν리μΌμ΄μ μΌλ‘ μμ±λ index.jsλ₯Ό μλ‘ λ€μ΄λ³΄κ² μ΅λλ€. 3κ°μ μ»΄ν¬λνΈλ₯Ό index.jsμ λΆλ¬μμ μ€νμ νκ³ μλ ꡬ쑰μ λλ€.
μ¬μ©μμ λ‘κ·ΈμΈ νλ©΄, λ‘κ·ΈμΈ ν μ§μ νλ λ©μΈ νλ©΄, κ·Έλ¦¬κ³ κ²μκΈμ μμ±νλ νλ©΄ λ± μΉ μλΉμ€μ νμν νλ©΄λ€μ΄ λͺ¨λ index.js νμΌμμ λΆλ €μ Έ μ¬μ©λκ³ μκΈ° λλ¬Έμ μΉν©μ μ€ννλ©΄ ν΄λΉ νμΌλ€μ λ΄μ©κΉμ§ ν΄μνμ¬ νμΌμ λΉλν΄μ€ κ²μ λλ€.
νμ§λ§ entryμ κ²½μ° μνΈλ¦¬ ν¬μΈνΈκ° 1κ°κ° λ μλ μμ§λ§ μλμ κ°μ΄ μ¬λ¬ κ°κ° λ μλ μμ΅λλ€.
entry: {
login: './src/LoginView.js',
main: './src/MainView.js'
}
μμ κ°μ΄ μνΈλ¦¬ ν¬μΈνΈλ₯Ό λΆλ¦¬νλ κ²½μ°λ μ±κΈ νμ΄μ§ μ ν리μΌμ΄μ μ΄ μλ νΉμ νμ΄μ§λ‘ μ§μ νμ λ μλ²μμ ν΄λΉ μ 보λ₯Ό λ΄λ €μ£Όλ ννμ λ©ν° νμ΄μ§ μ ν리μΌμ΄μ μ μ ν©ν©λλ€.
output μμ±μ μΉν©μ λλ¦¬κ³ λ κ²°κ³Όλ¬Όμ νμΌ κ²½λ‘λ₯Ό μλ―Έν©λλ€.
// webpack.config.js
module.exports = {
output: {
filename: "bundle.js",
},
};
μμμ λ°°μ΄ entry μμ±κ³Όλ λ€λ₯΄κ² κ°μ²΄ ννλ‘ μ΅μ λ€μ μΆκ°ν΄μΌ ν©λλ€.
μ΅μν filenameμ μ§μ ν΄μ€μΌ νλ©° μΌλ°μ μΌλ‘ μλμ κ°μ΄ path μμ±μ ν¨κ» μ μν©λλ€.
// webpack.config.js
var path = require("path");
module.exports = {
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "./dist"),
},
};
- filename μμ±μ μΉν©μΌλ‘ λΉλ(λ²λ€λ§)ν νμΌμ μ΄λ¦μ μλ―Έν©λλ€.
- path μμ±μ ν΄λΉ νμΌμ κ²½λ‘λ₯Ό μλ―Έν©λλ€.
- path μμ±μμ μ¬μ©λ path.resolve() μ½λλ μΈμλ‘ λμ΄μ¨ κ²½λ‘λ€μ μ‘°ν©νμ¬ μ ν¨ν νμΌ κ²½λ‘λ₯Ό λ§λ€μ΄μ£Όλ Node.js APIμ λλ€.
λ°λΌμ dist λΌλ ν΄λ μμ μλ bundle.jsλΌλ νμΌ μ΄λ¦μΌλ‘ μνΈλ¦¬μ λ€μ΄μ¨ νμΌμ λΉλ(λ²λ€λ§)νμ¬ κ²°κ³Όλ¬Όλ‘ κ°μ Έμ¬ κ²μ λλ€.
μμμ μ΄ν΄λ³Έ filename μμ±μ μ¬λ¬ κ°μ§ μ΅μ μ λ£μ μ μμ΅λλ€.
- κ²°κ³Ό νμΌ μ΄λ¦μ entry μμ±μ ν¬ν¨νλ μ΅μ
module.exports = {
output: {
filename: "[name].bundle.js",
},
};
- κ²°κ³Ό νμΌ μ΄λ¦μ μΉν© λ΄λΆμ μΌλ‘ μ¬μ©νλ λͺ¨λ IDλ₯Ό ν¬ν¨νλ μ΅μ
module.exports = {
output: {
filename: "[id].bundle.js",
},
};
λ‘λ(Loader)λ μΉν©μ΄ μΉ μ ν리μΌμ΄μ μ ν΄μν λ μλ°μ€ν¬λ¦½νΈ νμΌμ΄ μλ μΉ μμ(HTML, CSS, Images, ν°νΈ λ±)λ€μ λΉλ μμ, μλ°μ€ν¬λ¦½νΈμ output(μ°μΆλ¬Ό) νμΌμ ν¬ν¨λ μ μλλ‘ λμμ£Όλ μμ±μ λλ€.
// webpack.config.js
module.exports = {
module: {
rules: [],
},
};
μνΈλ¦¬λ μμν μμ±κ³Όλ λ€λ₯΄κ² moduleλΌλ μ΄λ¦μ μ¬μ©ν©λλ€.
λ‘λλ μμ λ§νλλ‘ js μ΄μΈ νμμ νμΌλ€μ λΉλν λ μΆκ°νλ μμ±μ΄λΌκ³ λ³Ό μ μλ€.
λ§μ½ js νμΌ λ΄μ css νμΌμ΄ import λ μν©μμ loaderκ° μλ€λ©΄ μ΄λ»κ² λ κΉ?
λΉλκ° μ λλ‘ λλ μ§ νμΈν΄λ³΄μ
π index.js
import "./base.css";
λΉλλ₯Ό νλ€λ©΄ λ€μκ³Ό κ°μ μλ¬λ₯Ό λ³Ό μ μμ κ²μ΄λ€.
λΉλ μμ, μνΈλ¦¬λ‘ μ€μ ν index.js νμΌ λ΄μ μΉν©μ΄ μμλ³Ό μ μλ νμΌ νμμμΈ cssκ° ν¬ν¨λμ΄μ μ΄λ₯Ό ν΄μν μ μλ€λ μλ¬λ₯Ό λ°μμμΌ°λ€.
μμ κ°μ΄ μλ λͺ©μ μΈ jsλ₯Ό λ³ννλ κ²μ΄ μλλΌλ©΄ loaderλ₯Ό ν΅ν΄ κ°μ΄ λΉλν μ μλ μ¬κ±΄μ λ§λ€μ΄ μ€μΌ νλ€
μμ μ½λ 보기
π webpack.config.js
var path = require("path");
module.exports = {
mode: "none", // production, development, none >> λ°°ν¬ μμλ productionμΌλ‘ μ€μ ν΄μΌ νλ€
entry: "./index.js",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "dist"),
},
module: {
rules: [
{
// 'test'λ νμ₯μλ₯Ό μλ―Ένλ€
test: /\.css$/,
// 'use'λ ν΄λΉ νμΌλ€μ μ΄λ€ λ°©ν₯μΌλ‘ λ‘λ©νλμ§ μ€μ ν΄μ£Όλ κ²μ΄λ€
// css-loaderλ μΉν© μμ css νμΌμ κ°μ΄ λ²λ€λ§ν μ μλλ‘ λ§λλ μ©λμ΄λ€
// style-loaderλ ν΄λΉ cssλ₯Ό html νμΌ λ΄μ μΈλΌμΈ μ½λλ‘ μ€μ μ€νμΌμ μ μ©νλ μ©λλ‘ μ¬μ©λλ€
// π₯ μμ(μ€λ₯Έμͺ½ to μΌμͺ½μΌλ‘ μ μ©) λν μν₯μ΄ μμΌλ, λ¨Όμ μ μ©λμΌ νλ λ‘λλ₯Ό μ€λ₯Έμͺ½μ μμ±ν΄μΌ νλ€
use: ["style-loader", "css-loader"],
},
// λ§λ λ°λ²¨ λ‘λ μμ
// {
// test: /\.js$/, test > νμ₯μ
// use: ["babel-loader"], use > μ¬μ©ν λΌμ΄λΈλ¬λ¦¬
// },
],
},
};
μ°λ¦¬κ° μ€μ ν outputμΈ bundle.jsμ css νμΌμ κ°μ΄ λ²λ€λ§νλ κ²μ΄ μλ λ³λμ css νμΌλ‘ λ§λ€μ΄μ£ΌκΈ° μν΄μλ νλ¬κ·ΈμΈμ μ¬μ©ν νμκ° μλ€
ν΄λΉ μ μ©μ΄ μλ£λ νμ λΉλλ₯Ό νλ©΄ λ€μκ³Ό κ°μ΄ λ²λ€λ§ μμ css νμΌμ΄ λ³λλ‘ λΆλ¦¬λ κ²μ λ³Ό μ μλ€
νλ¬κ·ΈμΈ(plugin)μ μΉν©μ κΈ°λ³Έμ μΈ λμμ μΆκ°μ μΈ κΈ°λ₯μ μ 곡νλ μμ±μ λλ€.
λ‘λλ λΉκ΅νλ©΄ λ‘λλ νμΌμ ν΄μνκ³ λ³ννλ κ³Όμ μ κ΄μ¬νλ λ°λ©΄, νλ¬κ·ΈμΈμ ν΄λΉ κ²°κ³Όλ¬Όμ ννλ₯Ό λ°κΎΈλ μν μ νλ€κ³ 보면 λ©λλ€.
νλ¬κ·ΈμΈμ μλμ κ°μ΄ μ μΈν©λλ€.
// webpack.config.js
module.exports = {
plugins: [],
};
νλ¬κ·ΈμΈμ λ°°μ΄μλ μμ±μ ν¨μλ‘ μμ±ν κ°μ²΄ μΈμ€ν΄μ€λ§ μΆκ°λ μ μμ΅λλ€.
// webpack.config.js
var webpack = require("webpack");
var HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
plugins: [new HtmlWebpackPlugin(), new webpack.ProgressPlugin()],
};
μ΄λ€ λ©΄μ μ 보λλΌλ μΉ νλ‘ νΈμλλ₯Ό 곡λΆνλ©΄μ νμ μ€ν¬λ¦½νΈ λ¬Έλ²μ μ μ© μ€μ μλ€λ©΄ μλ 3κ°μ μ§λ¬Έμ νμλ‘ μ§λ¬Έμ ν΄μ£Όμλ κ² κ°μ΅λλ€.
λͺ¨λ λΆλ€μ κ°λ €μ΄ λΆλΆμ μ νν κΈμ΄λ릴 μλ μμ§λ§, λ°λμ 곡λΆνμκ³ λ³ΈμΈλ§μ λ΅μ μ°Ύμ μΈμ°μλ©΄ λμμ΄ λ κ² κ°μ΅λλ€.
νμ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ κ°μ₯ ν° μ΄μ λ μ μ νμ΄νμ μ§μνλ€λ κ²μ΄λ€.
μλ°μ€ν¬λ¦½νΈμ νΉμ§μΈ λμ νμ΄νμ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μλμΌλ‘ ν΄μλκΈ° λλ¬Έμ μλμ λ°λΌ λ°κ³ μ λ¬νλ λ°μ΄ν°μ νμ μ΄ λΆ λΆλͺ ν΄μ§ μ μλ€.
νμ μ μ§μ νκ³ λ¨Όμ νμ μ μ μΈν¨μΌλ‘μ¨, νλ‘κ·Έλλ° λ¨κ³, HTTP ν΅μ μ ν΅ν λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ³Όμ μμ μκΈ°λ λ°μ΄ν°λ₯Ό μμ νκ² μ£Όκ³ λ°μ μ μλ€.
λν νμ μ 미리 μ μΈν΄μ£ΌκΈ° λλ¬Έμ νμ μ κ΄λ ¨λ νλ‘ν νμ λ©μλλ₯Ό μμ½κ² μ°Ύμ μΈ μ μλ€λ μ₯μ λν μ‘΄μ¬νλ€.
νμ κ³Ό μΈν°νμ΄μ€λ λͺ¨λ κ°μ²΄μ νμ μ μ΄λ¦μ μ§μ νλ λ°©λ²λ€ μ€ νλμ΄λ€
// interface
interface PeopleInterface {
name: string;
age: number;
}
const me1: PeopleInterface = {
name: "yc",
age: 34,
};
// type
type PeopleType = {
name: string;
age: number;
};
const me2: PeopleType = {
name: "yc",
age: 31,
};
νμ§λ§ μΌμ λΆλΆμ μμ΄μ νμ κ³Ό μΈν°νμ΄μ€λ μ°¨μ΄μ μ΄ μ‘΄μ¬νλ€
- νμ₯νλ λ°©λ²
μΈν°νμ΄μ€λ extends
ν€μλλ₯Ό μ¬μ©νμ¬ νμ₯μ΄ κ°λ₯νκ³ , νμ
μ &
μ°μ°μλ₯Ό ν΅ν΄ νμ₯μ΄ κ°λ₯νλ€
// interface
interface PeopleInterface {
name: string;
age: number;
}
interface StudentInterface extends PeopleInterface {
school: string;
}
// type
type PeopleType = {
name: string;
age: number;
};
type StudentType = PeopleType & {
school: string;
};
- μ μΈμ νμ₯
μΈν°νμ΄μ€λ λμΌν μ΄λ¦μ ν΅ν΄ μ¬μ μν¨μΌλ‘μ¨ μ μΈμ νμ₯μ΄ κ°λ₯νμ§λ§, νμ μ λΆκ°λ₯νλ€
// interface
interface Window {
title: string;
}
interface Window {
ts: TypeScriptAPI;
}
// κ°μ interface λͺ
μΌλ‘ Windowλ₯Ό λ€μ λ§λ λ€λ©΄, μλμΌλ‘ νμ₯μ΄ λλ€.
const src = 'const a = "Hello World"';
window.ts.transpileModule(src, {});
// type
type Window = {
title: string;
};
type Window = {
ts: TypeScriptAPI;
};
// Error: Duplicate identifier 'Window'.
// νμ
μ μλλ€.
μ¬λ¬ νμ
νΉμ μΈν°νμ΄μ€λ₯Ό λ³ν©ν λ (&
or extends
), μΈν°νμ΄μ€λ μμ±κ°μ μΆ©λμ ν΄κ²°νκΈ° μν΄ λ¨μν κ°μ²΄ νμ
μ λ§λ λ€.
μΈν°νμ΄μ€λ μ€λ‘μ§ κ°μ²΄μ νμ μ λ§λ€κΈ° μν κ²μ΄κΈ° λλ¬Έμ΄λ€.
νμ
μ μ¬κ·μ μΌλ‘ μννλ©΄μ μμ±μ λ³ν©νλλ°, μ΄ κ²½μ°μ μΌλΆ never
κ° λμ€λ©΄μ μ λλ‘ λ¨Έμ§λμ§ μμ μ μλ€. μΈν°νμ΄μ€μλ λ€λ₯΄κ² νμ
μλ μμ νμ
μ΄ μ¬ μλ μμΌλ―λ‘, μΆ©λμ΄ λμ λ³ν©μ΄ μλλ κ²½μ°κ° λ°μνλ€.
κ°μ²΄μλ§ μ°λ μ©λλΌλ©΄ interfaceλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ κ²μ΄λ€.
ν΅μ¬ ν€μλ π₯π₯π₯
μΈν°νμ΄μ€λ μμ μ μ΄λ¦μ μ€λ³΅ μ μΈνμ¬ extends
ν€μλλ₯Ό μ¬μ©νμ§ μλλΌλ νμ₯μ΄ κ°λ₯νμ§λ§,
νμ μ κ²½μ° μ€λ³΅ μ μΈμ ν΅ν΄ νμ₯ν μ μλ€. (& μ°μ°μλ₯Ό μ¬μ©νμ¬ νμ₯ν΄μΌ νλ€)
νλ‘μ νΈ μ§ν μμ μ΄λ€ μν©μμ νμ μ μ°κ³ μ΄λ€ μν©μμ μΈν°νμ΄μ€λ₯Ό μΌλμ?
μ λ€λ¦μ ν΄λμ€, ν¨μ, μΈν°νμ΄μ€ λ±μ λ€μν νμ μΌλ‘ μ¬μ¬μ©κ°λ₯νκ² ν΄μ£Όλ λ¬Έλ²μ λλ€
function getSize(arr: number[] | string[] | boolean[]): number {
return arr.length;
}
const arr = [1, 2, 3];
getSize(arr); // 3
const arr2 = ["a", "b", "c"];
getSize(arr2); // 3
const arr3 = [true, false, true];
getSize(arr3); // 3
μμ κ°μ΄ νκ°μ§ ν¨μμμ λ€μν νμ μ λ°μ΄ν°λ₯Ό λ°μμ€μΌνλ€κ³ κ°μ ν λ μ¬λ°λ₯Έ νμ μ μ§μ νκΈ° μν΄μλ νμ μ νμ₯μμΌμ€μΌ ν©λλ€.
μ΄λ° μν©μμ μ λ€λ¦μ μ¬μ©νμ¬ ν¨μμ 맀κ°λ³μμ λν νμ
<T>
λ₯Ό λͺ
μν΄μ€μΌλ‘μ¨ λ€μν νμ
μ λμνλ ν¨μλ₯Ό λ§λ€μ΄μ€ μ μμ΅λλ€.
function getSize<T>(arr: T[]): number {
return arr.length;
}
const arr = [1, 2, 3];
getSize<number>(arr); // 3
const arr2 = ["a", "b", "c"];
getSize<string>(arr2); // 3
ν μ€ μμ½
μ λ€λ¦μ ν΄λμ€, ν¨μ, μΈν°νμ΄μ€ λ±μμ ν κ°μ§ ν¨μκ° λ€μν νμ μ λ°μ΄ν°λ₯Ό λ°μμ€μΌν λ μ¬λ°λ₯Έ νμ μ μ§μ νκΈ° μν΄ μ¬μ©νλ μ¬μ¬μ© κ°λ₯ν νμ₯ λ¬Έλ²μ λλ€.