Web
λΈλΌμ°μ λμ λ°©λ²
"λΈλΌμ°μ κ° μ΄λ»κ² λμνλμ§ μμΈμ?"
μΉ μννλ€λ³΄λ©΄ μ°λ¦¬λ μ¬λ¬ urlμ ν΅ν΄ μ¬μ΄νΈλ₯Ό λμλ€λλ€. μ΄ urlμ΄ μ λ ₯λμμ λ μ΄λ€ κ³Όμ μ κ±°μ³μ μΆλ ₯λλκ±ΈκΉ?
webμ κΈ°λ³Έμ μΈ κ°λ μ΄μ§λ§ μ€λͺ νκΈ° λ¬΄μ§ μ΄λ ΅λ€.. λ λλ§..? νμ±..?
λΈλΌμ°μ μ£Όμ μ°½μhttp://naver.comμ μ λ ₯νμ λ μ΄λ€ κ³Όμ μ κ±°μ³μ λ€μ΄λ² νμ΄μ§κ° νλ©΄μ 보μ΄λ μ§ μμ보μ
μ€ν μμ€ λΈλΌμ°μ (ν¬λ‘¬, νμ΄μ΄νμ€, μ¬ν리 λ±)λ‘ μ μνμ λλ‘ μ 리
β¨ λΈλΌμ°μ μ£Όμ κΈ°λ₯
μ¬μ©μκ° μ νν μμμ μλ²μ μμ², λΈλΌμ°μ μ νμ
μμμ html λ¬Έμ, pdf, image λ± λ€μν νν
μμμ μ£Όμλ URIμ μν΄ μ ν΄μ§
λΈλΌμ°μ λ htmlκ³Ό css λͺ μΈμ λ°λΌ html νμΌμ ν΄μν΄μ νμν¨
μ΄ 'λͺ
μΈ'λ μΉ νμ€ν κΈ°κ΅¬μΈ W3C(World wide web Consortium)
μμ μ ν΄μ§
μμ λΈλΌμ°μ λ€μ μΌλΆλ§ λͺ μΈμ λ°λΌ ꡬννκ³ λ μμ λ°©λ²μΌλ‘ νμ₯νμ
(κ²°κ΅ μ¬κ°ν νΈνμ± λ¬Έμ λ°μ... κ·Έλμ μμ¦μ λλΆλΆ λͺ¨λ νμ€ λͺ μΈλ₯Ό λ°λ¦)
λΈλΌμ°μ κ° κ°μ§ μΈν°νμ΄μ€λ λ³΄ν΅ λΉμ·λΉμ·ν μμλ€μ΄ μ‘΄μ¬
μκ°μ΄ μ§λλ©΄μ, μ¬μ©μμκ² νμν μλΉμ€λ€λ‘ μλ‘ λͺ¨λ°©νλ©° κ°μΆ°μ§κ² λ κ²
URI μ λ ₯νλ μ£Όμ νμ μ€
μ΄μ λ²νΌ, λ€μ λ²νΌ
λΆλ§ν¬(μ¦κ²¨μ°ΎκΈ°)
μλ‘ κ³ μΉ¨ λ²νΌ
ν λ²νΌ
β¨ λΈλΌμ°μ κΈ°λ³Έ ꡬ쑰
β¨ μ¬μ©μ μΈν°νμ΄μ€
μ£Όμ νμμ€, μ΄μ /λ€μ λ²νΌ, λΆλ§ν¬ λ± μ¬μ©μκ° νμ©νλ μλΉμ€λ€ (μμ²ν νμ΄μ§λ₯Ό 보μ¬μ£Όλ μ°½μ μ μΈν λλ¨Έμ§ λΆλΆ)
β¨ λΈλΌμ°μ μμ§
μ¬μ©μ μΈν°νμ΄μ€μ λ λλ§ μμ§ μ¬μ΄μ λμ μ μ΄
β¨ λ λλ§ μμ§
μμ²ν μ½ν μΈ νμ (html μμ²μ΄ λ€μ΄μ€λ©΄? β html, css νμ±ν΄μ νλ©΄μ νμ)
β¨ ν΅μ
http μμ²κ³Ό κ°μ λ€νΈμν¬ νΈμΆμ μ¬μ© (νλ«νΌμ λ 립μ μΈ μΈν°νμ΄μ€λ‘ ꡬμ±λμ΄μμ)
β¨ UI λ°±μλ
νλ«νΌμμ λͺ μνμ§ μμ μΌλ°μ μΈν°νμ΄μ€. 콀보 λ°μ€ μ°½κ°μ κΈ°λ³Έμ μ₯μΉλ₯Ό κ·Έλ¦Ό
β¨ μλ°μ€ν¬λ¦½νΈ ν΄μκΈ°
μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό ν΄μνκ³ μ€ν
β¨ μλ£ μ μ₯μ
μΏ ν€ λ± λͺ¨λ μ’ λ₯μ μμμ νλ λμ€ν¬μ μ μ₯νλ κ³μΈ΅
β¨ λ λλ§μ΄λ?
μΉ λΆμΌλ₯Ό 곡λΆνλ€λ³΄λ©΄ λ λλ§μ΄λΌλ λ§μ λ§μ΄ λ³Έλ€. λμ κ³Όμ μ λν΄ μ’ λ μμΈν μμ보μ
λ λλ§ μμ§μ μμ² λ°μ λ΄μ©μ λΈλΌμ°μ νλ©΄μ νμν΄μ€λ€.
κΈ°λ³Έμ μΌλ‘ html, xml λ¬Έμμ μ΄λ―Έμ§λ₯Ό νμν μ μμ
μΆκ°λ‘ νλ¬κ·ΈμΈμ΄λ λΈλΌμ°μ νμ₯ κΈ°λ₯μΌλ‘ pdf λ± λ€λ₯Έ μ νλ νμκ° κ°λ₯ν¨
(μΆκ°λ‘ νμ₯μ΄ νμν μ νμ λ°λ‘ λ¨μ§ μκ³ νμ μΌλ‘ νμ₯ μ¬λΆλ₯Ό 묻λ κ²μ λ³Ό μ μμ κ²μ)
β¨ λ λλ§ μμ§ μ’
λ₯
ν¬λ‘¬, μ¬ν리 : μΉν·(Webkit) μμ§ μ¬μ©
νμ΄μ΄νμ€ : κ²μ½(Gecko) μμ§ μ¬μ©
μΉν·(Webkit) : μ΅μ΄ 리λ μ€ νλ«νΌμ λμνκΈ° μν μ€νμμ€ μμ§ (μ νμ΄ λ§₯κ³Ό μλμ°μμ μ¬ν리 λΈλΌμ°μ λ₯Ό μ§μνκΈ° μν΄ μμ μ λνμ)
β¨ λ λλ§ λμ κ³Όμ
`λ¨Όμ html λ¬Έμλ₯Ό νμ±νλ€.
κ·Έλ¦¬κ³ μ½ν μΈ νΈλ¦¬ λ΄λΆμμ νκ·Έλ₯Ό λͺ¨λ DOM λ Έλλ‘ λ³ννλ€.
κ·Έ λ€μ μΈλΆ css νμΌκ³Ό ν¨κ» ν¬ν¨λ μ€νμΌ μμλ₯Ό νμ±νλ€.
μ΄ μ€νμΌ μ 보μ html νμ κ·μΉμ λ λ νΈλ¦¬λΌκ³ λΆλ₯΄λ λ λ€λ₯Έ νΈλ¦¬λ₯Ό μμ±νλ€.
μ΄λ κ² μμ±λ λ λ νΈλ¦¬λ μ ν΄μ§ μμλλ‘ νλ©΄μ νμλλλ°, μμ± κ³Όμ μ΄ λλ¬μ λ λ°°μΉκ° μ§νλλ©΄μ λ Έλκ° νλ©΄μ μ νν μμΉμ νμλλ κ²μ μλ―Ένλ€.
μ΄νμ UI λ°±μλμμ λ λ νΈλ¦¬μ κ° λ Έλλ₯Ό κ°λ‘μ§μΌλ©° νμμ λ§λλ 그리기 κ³Όμ μ΄ μ§νλλ€.
μ΄λ¬ν κ³Όμ μ΄ μ μ§μ μΌλ‘ μ§νλλ©°, λ λλ§ μμ§μ μ’λ λΉ λ₯΄κ² μ¬μ©μμκ² μ 곡νκΈ° μν΄ λͺ¨λ htmlμ νμ±ν λκΉμ§ κΈ°λ€λ¦¬μ§ μκ³ λ°°μΉμ 그리기 κ³Όμ μ μμνλ€. (λ§μΉ λΉλκΈ°μ²λΌ..?)
μ μ‘μ λ°κ³ κΈ°λ€λ¦¬λ λμμ λ°μ λ΄μ©μ λ¨Όμ νλ©΄μ 보μ¬μ€λ€ (μ°λ¦¬κ° μΉνμ΄μ§μ μ μν λ νκΊΌλ²μ λ¨μ§ μκ³ μ μ νλ©΄μ λμ€λ κ²μ΄ μ΄ λλ¬Έ!!!)`
DOMμ΄λ?
Document Object Model(λ¬Έμ κ°μ²΄ λͺ¨λΈ)
μΉνμ΄μ§ μμ€λ₯Ό κΉλ³΄λ©΄ <html>, <body>
μ κ°μ νκ·Έλ€μ΄ μ‘΄μ¬νλ€. μ΄λ₯Ό Javascriptκ° νμ©ν μ μλ κ°μ²΄λ‘ λ§λ€λ©΄ λ¬Έμ κ°μ²΄
κ° λλ€.
λͺ¨λΈμ λ§ κ·Έλλ‘, λͺ¨λνλ‘ λ§λ€μλ€κ±°λ κ°μ²΄λ₯Ό μΈμνλ€λΌκ³ ν΄μνλ©΄ λλ€.
μ¦, DOMμ μΉ λΈλΌμ°μ κ° html νμ΄μ§λ₯Ό μΈμνλ λ°©μμ λ§νλ€. (νΈλ¦¬κ΅¬μ‘°)
β¨ μΉν· λμ ꡬ쑰
μ΄νμΉλ¨ΌνΈ : μΉν·μ΄ λ λ νΈλ¦¬λ₯Ό μμ±νκΈ° μν΄ DOM λ Έλμ μ€νμΌ μ 보λ₯Ό μ°κ²°νλ κ³Όμ
μ΄μ μ‘°κΈ νΈλ¦¬ ꡬ쑰μ μ§ν λ°©μμ΄ μ΄ν΄λκΈ° μμνλ€..γ γ
β¨ νμ±κ³Ό DOM νΈλ¦¬ ꡬμΆ
νμ±μ΄λΌλ λ§λ λ§μ΄ λ€μ΄λ΄€μ κ²μ΄λ€.
νμ±μ λ λλ§ μμ§μμ λ§€μ° μ€μν κ³Όμ μ΄λ€.
β¨ νμ±(parsing)
λ¬Έμ νμ±μ, λΈλΌμ°μ κ° μ½λλ₯Ό μ΄ν΄νκ³ μ¬μ©ν μ μλ κ΅¬μ‘°λ‘ λ³ννλ κ²
λ¬Έμλ₯Ό κ°μ§κ³ , μ΄ν λΆμκ³Ό ꡬ문 λΆμ κ³Όμ μ κ±°μ³ νμ± νΈλ¦¬λ₯Ό ꡬμΆνλ€.
μ‘°κΈ λ³΅μ‘νλ°, μ΄ν λΆμκΈ°λ₯Ό ν΅ν΄ μΈμ΄μ ꡬ문 κ·μΉμ λ°λΌ λ¬Έμ ꡬ쑰λ₯Ό λΆμνλ€. μ΄ κ³Όμ μμ ꡬ문 κ·μΉκ³Ό μΌμΉνλ μ§ λΉκ΅νκ³ , μΌμΉνλ λ Έλλ§ νμ± νΈλ¦¬μ μΆκ°μν¨λ€. (λκΉμ§ κ·μΉμ΄ λ§μ§ μλ λΆλΆμ λ¬Έμκ° μ ν¨νμ§ μκ³ κ΅¬λ¬Έ μ€λ₯κ° ν¬ν¨λμ΄ μλ€λ κ²)
νμ νΈλ¦¬κ° λμλ€κ³ ν΄μ λμ΄ μλλ€.
μ»΄νμΌμ κ³Όμ μΌ λΏ, λ€μ κΈ°κ³μ½λ λ¬Έμλ‘ λ³νμν€λ κ³Όμ κΉμ§ μλ£λλ©΄ μ΅μ’ κ²°κ³Όλ¬Όμ΄ λμ€κ² λλ€.
λ³΄ν΅ μ΄λ° νμλ₯Ό μμ±νλ κ²μ λ¬Έλ²μ λν κ·μΉ λΆμ¬ λ± λ³΅μ‘νκ³ μ΅μ ννκΈ° νλλ―λ‘, μλμΌλ‘ μμ±ν΄μ£Όλ νμ μμ±κΈ°
λ₯Ό λ§μ΄ νμ©νλ€.
μΉν·μ νλ μ€(flex)λ λ°μ΄μ¨(bison)μ μ΄μ©νμ¬ μ μ©νκ² νμ±μ΄ κ°λ₯
μ°λ¦¬κ° head νκ·Έλ₯Ό μ€μλ‘ λΉ λ¨λ €λ, νμκ° λλ©΄μ μ€λ₯λ₯Ό μμ ν΄μ€ ( head μλ¦¬λ¨ΌνΈ κ°μ²΄λ₯Ό μ묡μ μΌλ‘ λ§λ€μ΄μ€λ€)
κ²°κ΅ μ΄ νμ± κ³Όμ μ κ±°μΉλ©΄μ μλ²λ‘λΆν° λ°μ λ¬Έμλ₯Ό λΈλΌμ°μ κ° μ΄ν΄νκ³ μ½κ² μ¬μ©ν μ μλ DOM νΈλ¦¬κ΅¬μ‘°λ‘ λ³νμμΌμ£Όλ κ²μ΄λ€!
β¨ μμ½
μ£Όμμ°½μ urlμ μ λ ₯νκ³ Enterλ₯Ό λλ₯΄λ©΄, μλ²μ μμ²μ΄ μ μ‘λ¨
ν΄λΉ νμ΄μ§μ μ‘΄μ¬νλ μ¬λ¬ μμλ€(text, image λ±λ±)μ΄ λ³΄λ΄μ§
μ΄μ λΈλΌμ°μ λ ν΄λΉ μμμ΄ λ΄κΈ΄ htmlκ³Ό μ€νμΌμ΄ λ΄κΈ΄ cssλ₯Ό W3C λͺ μΈμ λ°λΌ ν΄μν κ²μ
μ΄ μν μ νλ κ²μ΄ 'λ λλ§ μμ§'
λ λλ§ μμ§μ μ°μ html νμ± κ³Όμ μ μμν¨. html νμκ° λ¬Έμμ μ‘΄μ¬νλ μ΄νμ ꡬ문μ λΆμνλ©΄μ DOM νΈλ¦¬λ₯Ό ꡬμΆ
λ€μμ css νμ± κ³Όμ μμ. css νμκ° λͺ¨λ css μ 보λ₯Ό μ€νμΌ κ΅¬μ‘°μ²΄λ‘ μμ±
μ΄ 2κ°μ§λ₯Ό μ°κ²°μμΌ λ λ νΈλ¦¬λ₯Ό λ§λ¬. λ λ νΈλ¦¬λ₯Ό ν΅ν΄ λ¬Έμκ° μκ°μ μμλ₯Ό ν¬ν¨ν ννλ‘ κ΅¬μ±λ μν
νλ©΄μ λ°°μΉλ₯Ό μμνκ³ , UI λ°±μλκ° λ Έλλ₯Ό λλ©° νμμ κ·Έλ¦Ό
μ΄λ λΉ λ₯Έ λΈλΌμ°μ νλ©΄ νμλ₯Ό μν΄ 'λ°°μΉμ 그리λ κ³Όμ 'μ νμ΄μ§ μ 보λ₯Ό λͺ¨λ λ°κ³ νκΊΌλ²μ μ§νλμ§ μμ. μμμ μ μ‘λ°μΌλ©΄, κΈ°λ€λ¦¬λ λμμ μΌλΆλΆ λ¨Όμ μ§ννκ³ νλ©΄μ νμν¨
μΏ ν€ vs μΈμ
β¨ μ μ₯ μμΉ
μΏ ν€ : ν΄λΌμ΄μΈνΈμ μΉ λΈλΌμ°μ κ° μ§μ νλ λ©λͺ¨λ¦¬ or νλλμ€ν¬
μΈμ : μλ²μ λ©λͺ¨λ¦¬μ μ μ₯
β¨ λ§λ£ μμ
μΏ ν€ : μ μ₯ν λ expires μμ±μ μ μν΄ λ¬΄ν¨νμν€λ©΄ μμ λ λ μ§ μ ν μ μμ
μΈμ : ν΄λΌμ΄μΈνΈκ° λ‘κ·Έμμνκ±°λ, μ€μ μκ°λμ λ°μμ΄ μμΌλ©΄ 무ν¨ν λκΈ° λλ¬Έμ μ νν μμ μ μ μμ
⨠리μμ€
μΏ ν€ : ν΄λΌμ΄μΈνΈμ μ μ₯λκ³ ν΄λΌμ΄μΈνΈμ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νκΈ° λλ¬Έμ μλ² μμ μ¬μ©νμ§ μμ
μΈμ : μΈμ μ μλ²μ μ μ₯λκ³ , μλ² λ©λͺ¨λ¦¬λ‘ λ‘λ© λκΈ° λλ¬Έμ μΈμ μ΄ μκΈΈ λλ§λ€ 리μμ€λ₯Ό μ°¨μ§ν¨
β¨ μ©λ μ ν
μΏ ν€ : ν΄λΌμ΄μΈνΈλ λͺ¨λ₯΄κ² μ μλλ μ¬μ΄νΈμ μνμ¬ μ€μ λ μ μκΈ° λλ¬Έμ μΏ ν€λ‘ μΈν΄ λ¬Έμ κ° λ°μνλ κ±Έ λ§κ³ μ ν λλ©μΈλΉ 20κ°, νλμ μΏ ν€ λΉ 4KBλ‘ μ νν΄ λ
μΈμ : ν΄λΌμ΄μΈνΈκ° μ μνλ©΄ μλ²μ μν΄ μμ±λλ―λ‘ κ°μλ μ©λ μ ν μμ
HTTP status code
ν΄λΌμ°λ νκ²½μμ HTTP APIλ₯Ό ν΅ν΄ ν΅μ νλ κ²μ΄ λλΆλΆμ
μ΄λ, μλ΅ μν μ½λλ₯Ό ν΅ν΄ μ±κ³΅/μ€ν¨ μ¬λΆλ₯Ό νμΈν μ μμΌλ―λ‘ API λ¬Έμλ₯Ό μμ±ν λ κΌ μμμΌ ν κ²μ΄ HTTP status codeλ€
10x : μ 보 νμΈ
20x : ν΅μ μ±κ³΅
30x : 리λ€μ΄λ νΈ
40x : ν΄λΌμ΄μΈνΈ μ€λ₯
50x : μλ² μ€λ₯
200λ²λ : ν΅μ μ±κ³΅
300λ²λ : 리λ€μ΄λ νΈ
400λ²λ : ν΄λΌμ΄μΈνΈ μ€λ₯
500λ²λ : μλ² μ€λ₯
μΉ μλ²μ WASμ μ°¨μ΄μ
μΉ μλ²μ wasμ μ°¨μ΄μ μ 무μμΌκΉ? μλ² κ°λ°μ μμ΄μ κΈ°μ΄μ μΈ κ°λ μ΄λ€.
λ¨Όμ , μ μ νμ΄μ§μ λμ νμ΄μ§λ₯Ό μμ보μ
β¨ Static Pages
λ°λμ§ μλ νμ΄μ§
μΉ μλ²λ νμΌ κ²½λ‘ μ΄λ¦μ λ°κ³ , κ²½λ‘μ μΌμΉνλ file contentsλ₯Ό λ°νν¨
νμ λμΌν νμ΄μ§λ₯Ό λ°νν¨
image, html, css, javascript νμΌκ³Ό κ°μ΄ μ»΄ν¨ν°μ μ μ₯λ νμΌλ€
β¨ Dynamic Pages
μΈμμ λ°λΌ λ°λλ νμ΄μ§
μΈμμ λ΄μ©μ λ§κ² λμ μΈ contentsλ₯Ό λ°νν¨
μΉ μλ²μ μν΄ μ€νλλ νλ‘κ·Έλ¨μ ν΅ν΄ λ§λ€μ΄μ§ κ²°κ³Όλ¬Όμ (Servlet : was μμμ λμκ°λ μλ° νλ‘κ·Έλ¨)
κ°λ°μλ Servletμ doGet() λ©μλλ₯Ό ꡬνν¨
β¨ μΉ μλ²μ WASμ μ°¨μ΄
β¨ μΉ μλ²
κ°λ μ μμ΄μ νλμ¨μ΄μ μννΈμ¨μ΄λ‘ ꡬλΆλλ€.
νλμ¨μ΄ : Web μλ²κ° μ€μΉλμ΄ μλ μ»΄ν¨ν°
μννΈμ¨μ΄ : μΉ λΈλΌμ°μ ν΄λΌμ΄μΈνΈλ‘λΆν° HTTP μμ²μ λ°κ³ , μ μ μΈ μ»¨ν μΈ (html, css λ±)λ₯Ό μ 곡νλ μ»΄ν¨ν° νλ‘κ·Έλ¨
β¨ μΉ μλ² κΈ°λ₯
Http νλ‘ν μ½μ κΈ°λ°μΌλ‘, ν΄λΌμ΄μΈνΈμ μμ²μ μλΉμ€νλ κΈ°λ₯μ λ΄λΉ
μμ²μ λ§κ² λκ°μ§ κΈ°λ₯ μ€ μ νν΄μ μ 곡ν΄μΌ νλ€.
μ μ 컨ν μΈ μ 곡
WASλ₯Ό κ±°μΉμ§ μκ³ λ°λ‘ μμ μ 곡
λμ 컨ν μΈ μ 곡μ μν μμ² μ λ¬
ν΄λΌμ΄μΈνΈ μμ²μ WASμ 보λ΄κ³ , WASμμ μ²λ¦¬ν κ²°κ³Όλ₯Ό ν΄λΌμ΄μΈνΈμκ² μ λ¬
μΉ μλ² μ’ λ₯ : Apache, Nginx, IIS λ±
β¨ WAS
Web Application Serverμ μ½μ
DB μ‘°ν λ° λ€μν λ‘μ§ μ²λ¦¬ μꡬμ λμ μΈ μ»¨ν μΈ λ₯Ό μ 곡νκΈ° μν΄ λ§λ€μ΄μ§ μ ν리μΌμ΄μ μλ²
HTTPλ₯Ό ν΅ν΄ μ ν리μΌμ΄μ μ μνν΄μ£Όλ λ―Έλ€μ¨μ΄λ€.
WASλ μΉ μ»¨ν μ΄λ νΉμ μλΈλ¦Ώ 컨ν μ΄λλΌκ³ λ λΆλ¦Ό
(컨ν μ΄λλ JSP, Servletμ μ€νμν¬ μ μλ μννΈμ¨μ΄. μ¦, WASλ JSP, Servlet ꡬλ νκ²½μ μ 곡ν΄μ€)
β¨ μν
WAS = μΉ μλ² + μΉ μ»¨ν μ΄λ
μΉ μλ²μ κΈ°λ₯λ€μ ꡬ쑰μ μΌλ‘ λΆλ¦¬νμ¬ μ²λ¦¬νλ μν
보μ, μ€λ λ μ²λ¦¬, λΆμ° νΈλμμ λ± λΆμ° νκ²½μμ μ¬μ©λ¨ ( μ£Όλ‘ DB μλ²μ ν¨κ» μ¬μ© )
β¨ WAS μ£Όμ κΈ°λ₯
1.νλ‘κ·Έλ¨ μ€ν νκ²½ λ° DB μ μ κΈ°λ₯ μ 곡
2.μ¬λ¬ νΈλμμ κ΄λ¦¬ κΈ°λ₯
3.μ 무 μ²λ¦¬νλ λΉμ¦λμ€ λ‘μ§ μν
WAS μ’ λ₯ : Tomcat, JBoss λ±
κ·ΈλΌ, λμ ꡬλΆνλ μ΄μ λ?
β¨ μΉ μλ²κ° νμν μ΄μ
μΉ μλ²μμλ μ μ 컨ν μΈ λ§ μ²λ¦¬νλλ‘ κΈ°λ₯ λΆλ°°λ₯Ό ν΄μ μλ² λΆλ΄μ μ€μ΄λ κ²
`ν΄λΌμ΄μΈνΈκ° μ΄λ―Έμ§ νμΌ(μ μ 컨ν μΈ )λ₯Ό λ³΄λΌ λ..
μΉ λ¬Έμ(html λ¬Έμ)κ° ν΄λΌμ΄μΈνΈλ‘ 보λ΄μ§ λ μ΄λ―Έμ§ νμΌκ³Ό κ°μ μ μ νμΌμ ν¨κ» 보λ΄μ§μ§ μμ λ¨Όμ html λ¬Έμλ₯Ό λ°κ³ , μ΄μ νμν μ΄λ―Έμ§ νμΌλ€μ λ€μ μλ²λ‘ μμ²ν΄μ λ°μμ€λ κ²
λ°λΌμ μΉ μλ²λ₯Ό ν΅ν΄μ μ μ μΈ νμΌμ μ ν리μΌμ΄μ μλ²κΉμ§ κ°μ§ μκ³ μλ¨μ λΉ λ₯΄κ² λ³΄λΌ μ μμ!`
β¨ WASκ° νμν μ΄μ
WASλ₯Ό ν΅ν΄ μμ²μ λ§λ λ°μ΄ν°λ₯Ό DBμμ κ°μ Έμ λΉμ¦λμ€ λ‘μ§μ λ§κ² κ·Έλλ§λ€ κ²°κ³Όλ₯Ό λ§λ€κ³ μ 곡νλ©΄μ μμμ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μμ
`λμ μΈ μ»¨ν μΈ λ₯Ό μ 곡ν΄μΌ ν λ..
μΉ μλ²λ§μΌλ‘λ μ¬μ©μκ° μνλ μμ²μ λν κ²°κ³Όκ°μ λͺ¨λ 미리 λ§λ€μ΄λκ³ μλΉμ€νκΈ°μλ μμμ΄ μ λμ μΌλ‘ λΆμ‘±ν¨
λ°λΌμ WASλ₯Ό ν΅ν΄ μμ²μ΄ λ€μ΄μ¬ λλ§λ€ DBμ λΉμ¦λμ€ λ‘μ§μ ν΅ν΄ κ²°κ³Όλ¬Όμ λ§λ€μ΄ μ 곡!`
β¨ κ·Έλ¬λ©΄ WASλ‘ μΉ μλ² μν κΉμ§ λ€ μ²λ¦¬ν μ μλκ±° μλκ°μ?
`WASλ DB μ‘°ν, λ€μν λ‘μ§μ μ²λ¦¬νλ λ° μ§μ€ν΄μΌ ν¨. λ°λΌμ λ¨μν μ μ 컨ν μΈ λ μΉ μλ²μκ² λ§‘κΈ°λ©° κΈ°λ₯μ λΆλ¦¬μμΌ μλ² λΆνλ₯Ό λ°©μ§νλ κ²
λ§μ½ WASκ° μ μ 컨ν μΈ μμ²κΉμ§ μ²λ¦¬νλ©΄, λΆνκ° μ»€μ§κ³ λμ 컨ν μΈ μ²λ¦¬κ° μ§μ°λλ©΄μ μν μλκ° λλ €μ§ β νμ΄μ§ λ ΈμΆ μκ° λμ΄λλ λ¬Έμ λ°μ`
λν, μ¬λ¬ λμ WASλ₯Ό μ°κ²°μ§μ΄ μ¬μ©μ΄ κ°λ₯νλ€.
μΉ μλ²λ₯Ό μ λ¨μ λκ³ , WASμ μ€λ₯κ° λ°μνλ©΄ μ¬μ©μκ° μ΄μ©νμ§ λͺ»νκ² λ§μλ λ€ μ¬μμνμ¬ ν΄κ²°ν μ μμ (μ¬μ©μλ μ€λ₯λ₯Ό λλΌμ§ λͺ»νκ³ μ΄μ© κ°λ₯)
μμ μ΄μ©μ ν¨μ¨μ± λ° μ₯μ 극볡, λ°°ν¬ λ° μ μ§ λ³΄μμ νΈμμ± λλ¬Έμ μΉ μλ²μ WASλ₯Ό λΆλ¦¬ν΄μ μ¬μ©νλ κ²μ΄λ€.
β¨ κ°μ₯ ν¨μ¨μ μΈ λ°©λ²
μΉ μλ²λ₯Ό WAS μμ λκ³ , νμν WASλ€μ μΉ μλ²μ νλ¬κ·ΈμΈ ννλ‘ μ€μ νλ©΄ ν¨μ¨μ μΈ λΆμ° μ²λ¦¬κ° κ°λ₯ν¨
ν΄λΌμ΄μΈνΈμ μμ²μ λ¨Όμ μΉ μλ²κ° λ°μ λ€μ, WASμκ² λ³΄λ΄ κ΄λ ¨λ Servletμ λ©λͺ¨λ¦¬μ μ¬λ¦Ό
WASλ web.xmlμ μ°Έμ‘°ν΄ ν΄λΉ Servletμ λν μ€λ λλ₯Ό μμ± (μ€λ λ ν μ΄μ©)
μ΄λ HttpServletRequestμ HttpServletResponse κ°μ²΄λ₯Ό μμ±ν΄ Servletμκ² μ λ¬
μ€λ λλ Servletμ service() λ©μλλ₯Ό νΈμΆ
service() λ©μλλ μμ²μ λ§κ² doGet()μ΄λ doPost() λ©μλλ₯Ό νΈμΆ
doGet()μ΄λ doPost() λ©μλλ μΈμμ λ§κ² μμ±λ μ μ ν λμ νμ΄μ§λ₯Ό Response κ°μ²΄μ λ΄μ WASμ μ λ¬
WASλ Response κ°μ²΄λ₯Ό HttpResponse ννλ‘ λ°κΏ μΉ μλ²λ‘ μ λ¬
μμ±λ μ€λ λ μ’ λ£νκ³ , HttpServletRequestμ HttpServletResponse κ°μ²΄ μ κ±°
OAuth
Open Authentification
μΈν°λ· μ¬μ©μλ€μ΄ λΉλ°λ²νΈλ₯Ό μ 곡νμ§ μκ³ , λ€λ₯Έ μΉμ¬μ΄νΈ μμ μμ λ€μ μ 보μ λν΄ μΉμ¬μ΄νΈλ μ ν리μΌμ΄μ μ μ κ·Ό κΆνμ λΆμ¬ν μμλ κ°λ°©ν νμ€ λ°©λ²
μ΄λ¬ν 맀컀λμ¦μ ꡬκΈ, νμ΄μ€λΆ, νΈμν° λ±μ΄ μ¬μ©νκ³ μμΌλ©° νμ¬ μ ν리μΌμ΄μ λ° μΉμ¬μ΄νΈμ κ³μ μ λν μ 보λ₯Ό 곡μ ν μ μλλ‘ νμ©ν΄μ€λ€.
β¨ μ¬μ© μ©μ΄
μ¬μ©μ : κ³μ μ κ°μ§κ³ μλ κ°μΈ
μλΉμ : OAuthλ₯Ό μ¬μ©ν΄ μλΉμ€ μ 곡μμκ² μ κ·Όνλ μΉμ¬μ΄νΈ or μ ν리μΌμ΄μ
μλΉμ€ μ 곡μ : OAuthλ₯Ό ν΅ν΄ μ κ·Όμ μ§μνλ μΉ μ ν리μΌμ΄μ
μλΉμ λΉλ°λ²νΈ : μλΉμ€ μ 곡μμμ μλΉμκ° μμ μμ μΈμ¦νκΈ° μν ν€
μμ² ν ν° : μλΉμκ° μ¬μ©μμκ² μ κ·ΌκΆνμ μΈμ¦λ°κΈ° μν΄ νμν μ λ³΄κ° λ΄κ²¨μμ
μ κ·Ό ν ν° : μΈμ¦ νμ μ¬μ©μκ° μλΉμ€ μ 곡μκ° μλ μλΉμλ₯Ό ν΅ν΄ λ³΄νΈ μμμ μ κ·ΌνκΈ° μν ν€ κ°
ν ν° μ’ λ₯λ‘λ Access Tokenκ³Ό Refresh Tokenμ΄ μλ€.
Access Tokenμ λ§λ£μκ°μ΄ μκ³ λλλ©΄ λ€μ μμ²ν΄μΌ νλ€. Refresh Tokenμ λ§λ£λλ©΄ μμ μ²μλΆν° μ§νν΄μΌ νλ€.
β¨ μΈμ¦ κ³Όμ
μλΉμ <-> μλΉμ€ μ 곡μ
μλΉμκ° μλΉμ€ μ 곡μμκ² μμ²ν ν°μ μμ²νλ€.
μλΉμ€ μ 곡μκ° μλΉμμκ² μμ²ν ν°μ λ°κΈν΄μ€λ€.
μλΉμκ° μ¬μ©μλ₯Ό μλΉμ€μ 곡μλ‘ μ΄λμν¨λ€. μ¬κΈ°μ μ¬μ©μ μΈμ¦μ΄ μνλλ€.
μλΉμ€ μ 곡μκ° μ¬μ©μλ₯Ό μλΉμλ‘ μ΄λμν¨λ€.
μλΉμκ° μ κ·Όν ν°μ μμ²νλ€.
μλΉμ€μ 곡μκ° μ κ·Όν ν°μ λ°κΈνλ€.
λ°κΈλ μ κ·Όν ν°μ μ΄μ©ν΄μ μλΉμμμ μ¬μ©μ μ 보μ μ κ·Όνλ€.
JWT
JSON Web Tokens are an open, industry standard [RFC 7519] method for representing claims securely between two parties. μΆμ² : <https://jwt.io
>
JWTλ μΉνμ€(RFC 7519)μΌλ‘μ λ κ°μ²΄μμ JSON κ°μ²΄λ₯Ό μ¬μ©νμ¬ κ°λ³κ³ μκ°μμ©μ μΈ λ°©μμΌλ‘ μ 보λ₯Ό μμ μ± μκ² μ λ¬ν΄μ€λλ€.
⨠ꡬμ±μμ
JWTλ .
μ ꡬλΆμλ‘ 3κ°μ§μ λ¬Έμμ΄λ‘ ꡬμ±λμ΄ μμ΅λλ€.
aaaa.bbbbb.ccccc μ κ΅¬μ‘°λ‘ μλΆν° ν€λ(header), λ΄μ©(payload), μλͺ (signature)λ‘ κ΅¬μ±λ©λλ€.
1. **ν€λ (Header)**
ν€λλ typμ alg λκ°μ§μ μ 보λ₯Ό μ§λκ³ μμ΅λλ€. typλ ν ν°μ νμ μ μ§μ ν©λλ€. JWTμ΄κΈ°μ "JWT"λΌλ κ°μ΄ λ€μ΄κ°λλ€. alg : ν΄μ± μκ³ λ¦¬μ¦μ μ§μ ν©λλ€. κΈ°λ³Έμ μΌλ‘ HMAC, SHA256, RSAκ° μ¬μ©λλ©΄ ν ν°μ κ²μ¦ ν λ μ¬μ©λλ signatureλΆλΆμμ μ¬μ©λ©λλ€.
{ "typ" : "JWT", "alg" : "HS256" }
2. **μ 보(payload)**
Payload λΆλΆμλ ν ν°μ λ΄μ μ λ³΄κ° λ€μ΄μμ΅λλ€. μ 보μ ν μ‘°κ°μ ν΄λ μ(claim)μ΄λΌκ³ λΆλ₯΄κ³ , μ΄λ name / valueμ ν μμΌλ‘ μ΄λ€μ Έμμ΅λλ€. ν ν°μλ μ¬λ¬κ°μ ν΄λ μλ€μ λ£μ μ μμ§λ§ λ무 λ§μμ§κ²½μ° ν ν°μ κΈΈμ΄κ° κΈΈμ΄μ§ μ μμ΅λλ€.
ν΄λ μμ μ’ λ₯λ ν¬κ² μΈλΆλ₯λ‘ λλμ΄μ§λλ€.
λ±λ‘λ(registered) ν΄λ μ λ±λ‘λ ν΄λ μλ€μ μλΉμ€μμ νμν μ 보λ€μ΄ μλ, ν ν°μ λν μ 보λ€μ λ΄κΈ°μνμ¬ μ΄λ¦μ΄ μ΄λ―Έ μ ν΄μ§ ν΄λ μλ€μ λλ€. λ±λ‘λ ν΄λ μμ μ¬μ©μ λͺ¨λ μ νμ (optional)μ΄λ©°, μ΄μ ν¬ν¨λ ν¬λ μ μ΄λ¦λ€μ λ€μκ³Ό κ°μ΅λλ€.
iss
: ν ν° λ°κΈμ (issuer)sub
: ν ν° μ λͺ© (subject)aud
: ν ν° λμμ (audience)exp
: ν ν°μ λ§λ£μκ°(expiration), μκ°μ NumericDate νμμΌλ‘ λμ΄μμ΄μΌ νλ©° μΈμ λ νμ¬ μκ°λ³΄λ€ μ΄νλ‘ μ€μ λμ΄ μμ΄μΌ ν©λλ€.nbf
: Not beforeμ μλ―Ένλ©°, ν ν°μ νμ± λ μ§μ λΉμ·ν κ°λ μ λλ€. μ¬κΈ°μλ NumericDateνμμΌλ‘ λ μ§λ₯Ό μ§μ νλ©°, μ΄ λ μ§κ° μ§μ νλ©°, μ΄ λ μ§κ° μ§λκΈ° μ κΉμ§λ ν ν°μ΄ μ²λ¦¬λμ§ μμ΅λλ€.iat
: ν ν°μ΄ λ°κΈλ μκ°(issued at), μ΄ κ°μ μ¬μ©νμ¬ ν ν°μ ageκ° μΌλ§λ λμλμ§ νλ¨ ν μ μμ΅λλ€.jti
: JWTμ κ³ μ μλ³μλ‘μ, μ£Όλ‘ μ€λ³΅μ μΈ μ²λ¦¬λ₯Ό λ°©μ§νκΈ° μνμ¬ μ¬μ©λ©λλ€. μΌνμ© ν ν°μ μ¬μ©νλ©΄ μ μ©ν©λλ€.
곡κ°(public) ν΄λ μ κ³΅κ° ν΄λ μλ€μ μΆ©λμ΄ λ°©μ§λ(collision-resistant)μ΄λ¦μ κ°μ§κ³ μμ΄μΌ ν©λλ€. μΆ©λμ λ°©μ§νκΈ° μν΄μλ, ν΄λ μ μ΄λ¦μ URIνμμΌλ‘ μ§μ΅λλ€.
{ "<https://chup.tistory.com/jwt_claims/is_admin>" : true }
λΉκ³΅κ°(private) ν΄λ μ λ±λ‘λ ν΄λ μλ μλκ³ , 곡κ°λ ν΄λ μλ€λ μλλλ€. μ μΈ‘κ°μ(λ³΄ν΅ ν΄λΌμ΄μΈνΈ <-> μλ²) ν©μνμ μ¬μ©λλ ν΄λ μ μ΄λ¦λ€μ λλ€. κ³΅κ° ν΄λ μκ³Όλ λ¬λ¦¬ μ΄λ¦μ΄ μ€λ³΅λμ΄ μΆ©λμ΄ λ μ μμΌλ μ¬μ©ν λμ μ μν΄μΌν©λλ€.
3. μλͺ
(signature)
μλͺ
μ ν€λμ μΈμ½λ©κ°κ³Ό μ 보μ μΈμ½λ©κ°μ ν©μΉν μ£Όμ΄μ§ λΉλ°ν€λ‘ ν΄μ¬λ₯Ό νμ¬ μμ±ν©λλ€. μ΄λ κ² λ§λ ν΄μ¬λ₯Ό base64
ννλ‘ λνλ΄κ² λ©λλ€.
β¨ λ‘κ·ΈμΈ μΈμ¦μ JWT μ¬μ©
λ§μ½ μ ν¨κΈ°κ°μ΄ 짧μ Tokenμ λ°κΈνκ²λλ©΄ μ¬μ©μ μ μ₯μμ μμ£Ό λ‘κ·ΈμΈμ ν΄μΌνκΈ° λλ¬Έμ λ²κ±°λ‘κ³ λ°λλ‘ μ ν¨κΈ°κ°μ΄ κΈ΄ Tokenμ λ°κΈνκ²λλ©΄ μ 3μμκ² ν ν°μ νμ·¨λΉν κ²½μ° λ³΄μμ μ·¨μ½νλ€λ μ½μ μ΄ μμ΅λλ€. κ·Έ μ λ€μ 보μνκΈ° μν΄ Refresh Token μ μ¬μ©νκ² λμμ΅λλ€. Refresh Tokenμ Access Tokenκ³Ό λκ°μ JWTμ λλ€. Access Tokenμ μ ν¨κΈ°κ°μ΄ λ§λ£λμμ λ, Refresh Tokenμ΄ μλ‘ λ°κΈν΄μ£Όλ μ΄μ κ° λ©λλ€. μλ₯Ό λ€μ΄, Refresh Tokenμ μ ν¨κΈ°κ°μ 1μ£Ό, Access Tokenμ μ ν¨κΈ°κ°μ 1μκ°μ΄λΌκ³ νλ€λ©΄, μ¬μ©μλ Access TokenμΌλ‘ 1μκ°λμ APIμμ²μ νλ€κ° μκ°μ΄ λ§λ£λλ©΄ Refresh Tokenμ μ΄μ©νμ¬ μλ‘κ² λ°κΈν΄μ€λλ€. μ΄ λ°©λ²λν Access Tokenμ΄ νμ·¨λΉνλ€ν΄λ μ λ³΄κ° μ μΆμ΄ λλκ±Έ λ§μ μ μμ§λ§, λ 짧μ μ ν¨κΈ°κ°λλ¬Έμ νμ·¨λλ κ°λ₯μ±μ΄ μ λ€λ μ μ μ΄μ©ν κ²μ λλ€. Refresh Tokenλν μ ν¨κΈ°κ°μ΄ λ§λ£λλ€λ©΄, μ¬μ©μλ μλ‘ λ‘κ·ΈμΈν΄μΌ ν©λλ€. Refresh Tokenλ νμ·¨ λ κ°λ₯μ±μ΄ μκΈ° λλ¬Έμ μ μ ν μ ν¨κΈ°κ° μ€μ μ΄ νμν©λλ€.
β¨ Access Token + Refresh Token μΈμ¦ κ³Όμ
Authentication and Authorization
β¨ API Key
μλΉμ€λ€μ΄ κ±°λν΄μ§μ λ°λΌ κΈ°λ₯λ€μ λΆλ¦¬νκΈ° μμνμλλ° μ΄λ₯Όμν΄ Moduleμ΄λ Applicationλ€κ°μ 곡μ μ λ 립μ±μ 보μ₯νκΈ° μν κΈ°λ₯λ€μ΄ λ±μ₯νκΈ° μμνλ€. κ·Έ μ€ μ μΌ λ¨Όμ λ±μ₯νκ³ κ°μ₯ λ리 보νΈμ μΌλ‘ μ°μ΄λ κΈ°μ μ΄ API Keyμ΄λ€.
β¨ λμλ°©μ
μ¬μ©μλ API Keyλ₯Ό λ°κΈλ°λλ€. (λ°κΈ λ°λ κ³Όμ μ μλΉμ€λ€λ§λ€ λ€λ₯΄λ€. μλ₯Όλ€μ΄ κ³΅κ³΅κΈ°κ΄ APIκ°μ κ²½μ°μλ μ μ²μ νμν μμμ μ μΆνλ©΄ κ΄λ¦¬μκ° νμΈ ν Keyλ₯Ό λ°κΈν΄μ€λ€.
ν΄λΉ APIλ₯Ό μ¬μ©νκΈ° μν΄ Keyμ ν¨κ» μμ²μ 보λΈλ€.
Applicationμ μμ²μ΄ μ€λ©΄ Keyλ₯Ό ν΅ν΄ Userμ 보λ₯Ό νμΈνμ¬ λꡬμ KeyμΈμ§ κΆνμ΄ λ¬΄μμΈμ§λ₯Ό νμΈνλ€.
ν΄λΉ Keyμ μΈμ¦κ³Ό μΈκ°μ λ°λΌ λ°μ΄ν°λ₯Ό μ¬μ©μμκ² λ°ννλ€.
β¨ λ¬Έμ μ
API Keyλ₯Ό μ¬μ©μμκ² μ§μ λ°κΈνκ³ ν΄λΉ Keyλ₯Ό ν΅ν΄ ν΅μ μ νκΈ° λλ¬Έμ ν΅μ ꡬκ°μ΄ μνΈνκ° μ λμ΄ μλλΌλ Keyκ° μ μΆλ κ²½μ°μ λλΉνκΈ° νλ€λ€. κ·Έλ κΈ°λλ¬Έμ μ£ΌκΈ°μ μΌλ‘ Keyλ₯Ό μ λ°μ΄νΈλ₯Ό ν΄μΌνκΈ° λλ¬Έμ λ²κ±°λ‘κ³ μκΈ°μΉ λͺ»ν μν©(νμͺ½λ§ μ λ°μ΄νΈκ° μ€νλμ΄ μλ‘ λ§€μΉκ° μλλ€λ λ±)μ΄ λ°μν μ μλ€. λν, Keyνκ°μ§λ‘ μ 보λ₯Ό μ μ΄νκΈ° λλ¬Έμ 보μλ¬Έμ κ° λ°μνκΈ° μ¬μ΄νΈμ΄λ€.
β¨ OAuth2
API Keyμ λ¨μ μ λ©κΎΈκΈ° μν΄ λ±μν λ°©μμ΄λ€. λνμ μΌλ‘ νμ΄μ€λΆ, νΈμν° λ± SNS λ‘κ·ΈμΈκΈ°λ₯μμ μ½κ² λ³Ό μ μλ€. μμ²νκ³ μμ²λ°λ λ¨μν λ°©μμ΄ μλλΌ μΈμ¦νλ λΆλΆμ΄ μΆκ°λμ΄ λ 립μ μΌλ‘ μΈλΆνκ° μ΄λ£¨μ΄μ‘λ€.
β¨ λμλ°©μ
μ¬μ©μκ° Applicationμ κΈ°λ₯μ μ¬μ©νκΈ° μν μμ²μ 보λΈλ€. (λ‘κ·ΈμΈ κΈ°λ₯, νΉμ μ 보 μ΄λ λ± λ€μν κ³³μμ μ°μΌ μ μλ€. μ¬κΈ°μμλ λ‘κ·ΈμΈμΌλ‘ ν΅μΌνμ¬ μ€λͺ νκ² λ€.)
Applicationμ ν΄λΉ μ¬μ©μκ° λ‘κ·ΈμΈμ΄ λμ΄ μλμ§λ₯Ό νμΈνλ€. λ‘κ·ΈμΈμ΄ λμ΄ μμ§ μλ€λ©΄ λ€μ λ¨κ³λ‘ λμ΄κ°λ€.
Applicationμ μ¬μ©μκ° λ‘κ·ΈμΈλμ΄ μμ§ μμΌλ©΄ μ¬μ©μλ₯Ό μΈμ¦μλ²λ‘ Redirectionνλ€.
κ°μ μ μΌλ‘ Authorize μμ²μ λ°μ μΈμ¦μλ²λ ν΄λΉ μ¬μ©μκ° νμμΈμ§ κ·Έλ¦¬κ³ μΈμ¦μλ²μ λ‘κ·ΈμΈ λμ΄μλμ§λ₯Ό νμΈνλ€.
μΈμ¦μ κ±°μ³€μΌλ©΄ μ¬μ©μκ° μ΅μ΄μ μμ²μ λν κΆνμ΄ μλμ§λ₯Ό νμΈνλ€. μ΄λ¬ν κ³Όμ μ GrantλΌκ³ νλλ° λ체μ μΌλ‘ μΈμ¦μλ²λ μ¬μ©μμ μμ§λ₯Ό νμΈνλ Grantμ²λ¦¬λ₯Ό νκ² λκ³ , κ° Applicationμ λ€μ κΆνμ κ΄λ¦¬ ν μλ μλ€. μ΄ κ³Όμ μμ μ¬μ©μμ Grantκ° νμΈμ΄ λμ§μμΌλ©΄ λ€μ μ¬μ©μμκ² Grantμμ²μ 보λΈλ€.
Grantλ? Grantλ μΈκ°μλ λ€λ₯Έ κ°λ μ΄λ€. μΈκ°λ μλΉμ€ μ 곡μ μ μ₯μμ μ¬μ©μμ κΆνμ 보λ κ²μ΄μ§λ§, Grantλ μ¬μ©μκ° μμ μ μΈμ¦μ 보(λ³΄ν΅ κ°μΈμ 보μ ν΄λΉνλ μ΄λ¦, μ΄λ©μΌ λ±)λ₯Ό Applicationμ λκΈΈμ§ λ§μ§ κ²°μ νλ κ³Όμ μ΄λ€.
μ¬μ©μκ° Grantμμ²μ λ°κ²λλ©΄ μ¬μ©μλ ν΄λΉ μΈμ¦μ 보μ λν νκ°λ₯Ό λ΄λ €μ€λ€. ν΄λΉ μμ²μ ν΅ν΄ λ€μ μΈμ¦μλ²μ μΈκ° μ²λ¦¬λ₯Ό μν΄ μμ²μ 보λ΄κ² λλ€.
μΈμ¦μλ²μμ μΈμ¦κ³Ό μΈκ°μ λν κ³Όμ μ΄ λͺ¨λ μλ£λλ©΄ Applicationμκ² μΈκ°μ½λλ₯Ό μ λ¬ν΄μ€λ€. μΈμ¦μλ²λ ν΄λΉ μΈκ°μ½λλ₯Ό μμ μ μ μ₯μμ μ μ₯μ ν΄λλ€. ν΄λΉ μ½λλ 보μμ μν΄ λ§€μ° μ§§μ κΈ°κ°λμλ§ μ ν¨νλ€.
μΈκ° μ½λλ 짧μ μκ° μ μ§λκΈ° λλ¬Έμ μ΄μ Applicationμ ν΄λΉ μ½λλ₯Ό Request TokenμΌλ‘ μ¬μ©νμ¬ μΈμ¦μλ²μ μμ²μ 보λ΄κ²λλ€.
ν΄λΉ Request Tokenμ λ°μ μΈμ¦μλ²λ μμ μ μ μ₯μμ μ μ₯ν μ½λ(7λ² κ³Όμ )κ³Ό μΌμΉνμ§λ₯Ό νμΈνκ³ κΈ΄ μ ν¨κΈ°κ°μ κ°μ§κ³ μ€μ 리μμ€ μ κ·Όμ μ¬μ©νκ² λ Access Tokenμ Applicationμκ² μ λ¬νλ€.
μ΄μ Applicationμ Access Tokenμ ν΅ν΄ μ 무λ₯Ό μ²λ¦¬ν μ μλ€. ν΄λΉ Access Tokenμ ν΅ν΄ 리μμ€ μλ²(μΈμ¦μλ²μλ λ€λ¦)μ μμ²μ νκ²λλ€. νμ§λ§ μ΄ κ³Όμ μμλ 리μμ€ μλ²λ λ°λ‘ λ°μ΄ν°λ₯Ό μ λ¬νλ κ²μ΄ μλ μΈμ¦μλ²μ μ°κ²°νμ¬ ν΄λΉ ν ν°μ΄ μ ν¨νμ§ νμΈμ κ±°μΉκ²λλ€. ν΄λΉ ν ν°μ΄ μ ν¨νλ€λ©΄ μ¬μ©μλ λλμ΄ μμ²ν μ 보λ₯Ό λ°μ μ μλ€.
β¨ λ¬Έμ μ
κΈ°μ‘΄ API Keyλ°©μμ λΉν΄ μ’ λ 볡μ‘ν ꡬ쑰λ₯Ό κ°μ§λ€. λ¬Όλ‘ λ§μ λΆλΆμ΄ κ°μ λμλ€. νμ§λ§ ν΅μ μ μ¬μ©νλ Tokenμ 무μλ―Έν λ¬Έμμ΄μ κ°μ§κ³ κΈ°λ³Έμ μΌλ‘ μ ν΄μ§ κ·μΉμμ΄ λ°νλκΈ° λλ¬Έμ μ¦λͺ νμΈ νμνλ€. κ·Έλ κΈ°μ μΈμ¦μλ²μ μ΄λ€ μμ΄λ DBMS μ κ·Όμ΄λ λ€λ₯Έ APIλ₯Ό νμ©νμ¬ μ κ·Όνλ λ±μ μ ν¨μ± νμΈ μμ μ΄ νμνλ€λ κ³΅μ¦ μ¬λΆ λ¬Έμ κ° μλ€. μ΄λ¬ν 곡μ¦μ¬λΆ λ¬Έμ λΏλ§ μλλΌ μ ν¨κΈ°κ° λ¬Έμ λ μλ€.
β¨ JWT
JWTλ JSON Web Tokenμ μ€μλ§λ‘ μΈμ¦ νλ¦μ κ·μ½μ΄ μλ Token μμ±μ λν κ·μ½μ΄λ€. κΈ°λ³Έμ μΈ Access Tokenμ μλ―Έκ° μλ λ¬Έμμ΄λ‘ μ΄λ£¨μ΄μ Έ μμ΄ Tokenμ μ§μλ μ ν¨μ±μ λ§€λ² νμΈν΄μΌ νλ κ²μμ λ°νμ¬, JWTλ μΈμ¦μ¬λΆ νμΈμ μν κ°, μ ν¨μ± κ²μ¦μ μν κ° κ·Έλ¦¬κ³ μΈμ¦ μ 보 μ체λ₯Ό λ΄κ³ μκΈ° λλ¬Έμ μΈμ¦μλ²μ λ¬»μ§ μκ³ λ μ¬μ©ν μ μλ€. ν ν°μ λν μμΈν λ΄μ©κ³Ό μΈμ¦λ°©μμ JWTλ¬Έμλ₯Ό μ°Έμ‘°νμ.
λ¬Έμ μ
μλ²μ μ§μ μ°κ²°νμ¬ μΈμ¦μ νμΈνμ§ μμλ λκΈ° λλ¬Έμ μκΈ°λ μ₯μ λ€μ΄ λ§λ€. νμ§λ§ ν ν° μμ²΄κ° μΈμ¦ μ 보λ₯Ό κ°μ§κ³ μκΈ°λλ¬Έμ λ―Όκ°ν μ 보λ μΈμ¦μλ²μ λ€μ μ μνλ κ³Όμ μ΄ νμνλ€.
λ‘κ·Έ λ 벨
β¨ Logging Level
λ³΄ν΅ log4j λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νλ€.
ν¬κ² ERROR, WARN, INFO, DEBUGλ‘ λ‘κ·Έ λ 벨μ λλμ΄ μμ±νλ€.
ERROR
μλ¬ λ‘κ·Έλ, νλ‘κ·Έλ¨ λμμ ν° λ¬Έμ κ° λ°μνλ€λ κ²μΌλ‘ μ¦μ λ¬Έμ λ₯Ό μ‘°μ¬ν΄μΌ νλ κ²
DBλ₯Ό μ¬μ©ν μ μλ μν, μ€μ μλ¬κ° λμ€λ μν©
WARN
μ£Όμν΄μΌ νμ§λ§, νλ‘μΈμ€λ κ³μ μ§νλλ μν. νμ§λ§ WARNμμλ 2κ°μ§μ λΆλΆμμ μ’ λ£κ° μΌμ΄λ¨
λͺ νν λ¬Έμ : νμ¬ λ°μ΄ν°λ₯Ό μ¬μ© λΆκ°, μΊμκ° μ¬μ© λ±
μ μ¬μ λ¬Έμ : κ°λ° λͺ¨λλ‘ νλ‘κ·Έλ¨ μμ, κ΄λ¦¬μ μ½μ λΉλ°λ²νΈκ° 보νΈλμ§ μκ³ μ μ λ±
INFO
μ€μν λΉμ¦λμ€ νλ‘μΈμ€κ° μμλ λμ μ’ λ£λ λλ₯Ό μλ €μ£Όλ λ‘κ·Έ
~κ° ~λ₯Ό μ€ννμ
DEBUG
κ°λ°μκ° κΈ°λ‘ν κ°μΉκ° μλ μ 보λ₯Ό λ¨κΈ°κΈ° μν΄ μ¬μ©νλ λ 벨
UI μ UX
λ§μ΄ λ€μ΄λ΄€μ§λ§, μ°¨μ΄λ₯Ό λ§νλΌκ³ νλ©΄ λ©μΉ«νλ€. λ©΄μ μμλ μΉμ νλ€κ³ νλ©΄ λμ¬ μ μλ μ§λ¬Έ.
β¨ UI
User Interface
μ¬μ©μκ° μ±μ μ¬μ©ν λ λ§μ£Όνλ λμμΈ, λ μ΄μμ, κΈ°μ μ μΈ λΆλΆμ΄λ€.
λμμΈμ κ΅¬μ± μμμΈ ν°νΈ, μκΉ, μ€κ°κ²© λ± μμΈν μμκ° ν¬ν¨λκ³ , κΈ°μ μ λΆλΆμ λ°μνμ΄λ μ λλ©μ΄μ ν¨κ³Ό λ±μ΄ ν¬ν¨λλ€.
λ°λΌμ UIλ μ¬μ©μκ° μ¬μ©ν λ ν° λΆνΈν¨μ΄ μμ΄μΌνλ©°, λ§μ‘±λλ₯Ό λμ¬μΌ νλ€.
β¨ UX
User eXperience
μ±μ μ£Όλ‘ μ¬μ©νλ μ¬μ©μλ€μ κ²½νμ λΆμνμ¬ λ νΈνκ³ ν¨μ¨μ μΈ λ°©ν₯μΌλ‘ νλ‘μΈμ€κ° μ§νλ μ μλλ‘ λ§λλ κ²μ΄λ€.
(ν°μΉ νλ©΄, μ¬μ©μμ μ ν flow λ±)
UXλ ν΅κ³μλ£, λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μ±μ μ¬μ©νλ μ μ λ€μ νΉμ±μ λΆμνμ¬ μν©κ³Ό μμ μ λ§λλ‘ λ³νμν¬ μ μμ΄μΌ νλ€.
UIλ₯Ό ν¬μ₯λ¬Όμ λΉμ νλ€λ©΄, UXλ κ·Έ μμ λ΄μ©λ¬Όμ΄λΌκ³ λ³Ό μ μλ€.
ν¬μ₯(UI)μ μ κ²½μ μ°λ κ²λ μ€μνκ³ , μ΄λ₯Ό μ¬μ©ν μ¬λμ λΆμν΄ μλ§μ λ΄μ©λ¬Ό(UX)λ‘ μ±μμ μ 곡ν΄μΌνλ€.
CSR & SSR
CSR : Client Side Rendering
SSR : Server Side Rendering
CSRμλ λͺ¨λ°μΌ μλμ λ€μ΄μ SPAκ° λ±μ₯νλ€.
β¨ SPA(Single Page Applictaion)
μ΅μ΄ ν λ² νμ΄μ§ μ 체λ₯Ό λ‘λ©ν λ€, λ°μ΄ν°λ§ λ³κ²½νμ¬ μ¬μ©ν μ μλ μ ν리μΌμ΄μ
SPAλ κΈ°λ³Έμ μΌλ‘ νμ΄μ§ λ‘λκ° μκ³ , λͺ¨λ νμ΄μ§κ° λ¨μν Html5 Historyμ μν΄ λ λλ§λλ€.
κΈ°μ‘΄μ μ ν΅μ λ°©λ²μΈ SSR λ°©μμλ μ±λ₯ λ¬Έμ κ° μμλ€.
μμ¦ μΉμμ μ 곡λλ μ λ³΄κ° μλ λ§λ€. μμ²ν λλ§λ€ μλ‘κ³ μΉ¨μ΄ μΌμ΄λλ©΄μ νμ΄μ§λ₯Ό λ‘λ©ν λλ§λ€ μλ²λ‘λΆν° 리μμ€λ₯Ό μ λ¬λ°μ ν΄μνκ³ , νλ©΄μ λ λλ§νλ λ°©μμΈ SSRμ λ°μ΄ν°κ° λ§μ μλ‘ μ±λ₯λ¬Έμ κ° λ°μνλ€.
νμ¬ μ£Όμμμ λμΌν μ£Όμλ₯Ό κ°λ¦¬ν€λ λ²νΌμ λλ μ λ, μ€μ νμ΄μ§μμ νμν λ°μ΄ν°λ₯Ό λ€μ κ°μ Έμ¬ μ μλ€.
μ΄λ, μΈν°λμ μ΄ λ§μ νκ²½μμ λΉν¨μ¨μ μ΄λ€. λ λλ§μ μλ²μͺ½μμ μ§ννλ©΄ κ·Έλ§νΌ μλ² μμμ΄ λ§μ΄ μ¬μ©λκΈ° λλ¬Έμ λΆνμν νΈλν½μ΄ λλΉλλ€.
CSR λ°©μμ μ¬μ©μμ νλμ λ°λΌ νμν λΆλΆλ§ λ€μ μ½μ΄μ¨λ€. λ°λΌμ μλ² μΈ‘μμ λ λλ§νμ¬ μ 체 νμ΄μ§λ₯Ό λ€μ μ½μ΄λ€μ΄λ κ²λ³΄λ€ λΉ λ₯Έ μΈν°λ μ μ κΈ°λν μ μλ€. μλ²λ λ¨μ§ JSONνμΌλ§ 보λ΄μ£Όκ³ , HTMLμ 그리λ μν μ μλ°μ€ν¬λ¦½νΈλ₯Ό ν΅ν΄ ν΄λΌμ΄μΈνΈ μΈ‘μμ μννλ λ°©μμ΄λ€.
λ·° λ λλ§μ μ μ μ λΈλΌμ°μ κ° λ΄λΉνκ³ , λ¨Όμ μΉμ±μ λΈλΌμ°μ μκ² λ‘λν λ€μ νμν λ°μ΄ν°λ§ μ λ¬λ°μ 보μ¬μ£Όλ CSRμ νΈλν½μ κ°μμν€κ³ , μ¬μ©μμκ² λ λμ κ²½νμ μ 곡ν μ μλλ‘ λμμ€λ€.
β¨ CSR μ₯λ¨μ
μ₯μ
νΈλν½ κ°μ
νμν λ°μ΄ν°λ§ λ°λλ€
μ¬μ©μ κ²½ν
μλ‘κ³ μΉ¨μ΄ λ°μνμ§ μμ. μ¬μ©μκ° λ€μ΄ν°λΈ μ±κ³Ό κ°μ κ²½νμ ν μ μμ
λ¨μ
κ²μ μμ§
ν¬λ‘¬μμ 리μ‘νΈλ‘ λ§λ μΉμ± μμ€λ₯Ό νμΈνλ©΄ λ΄μ©μ΄ λΉμ΄μμ. μ΄μ²λΌ κ²μμμ§ ν¬λ‘€λ¬κ° λ°μ΄ν° μμ§μ μ΄λ €μμ΄ μμ κ°λ₯μ± μ‘΄μ¬
κ΅¬κΈ κ²μμμ§μ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ λ΄μ₯λμ΄μμ§λ§, λ€μ΄λ²λ λ€μ λ± κ²μμμ§μ ν¬λ‘€λ§μ μ΄λ €μμ΄ μμ΄ SSRμ λ°λ‘ ꡬνν΄μΌνλ λ²κ±°λ‘μ μ‘΄μ¬
β¨ SSR μ₯λ¨μ
μ₯μ
κ²μμμ§ μ΅μ ν
μ΄κΈ°λ‘λ© μ±λ₯κ°μ
첫 λ λλ§λ HTMLμ ν΄λΌμ΄μΈνΈμμ μ λ¬ν΄μ£ΌκΈ° λλ¬Έμ μ΄κΈ°λ‘λ©μλλ₯Ό λ§μ΄ μ€μ¬μ€
λ¨μ
νλ‘μ νΈ λ³΅μ‘λ
λΌμ°ν° μ¬μ©νλ€λ³΄λ©΄ 볡μ‘λκ° λμμ§ μ μμ
μ±λ₯ μ ν κ°λ₯μ±
λ€μ΄ν°λΈ μ± & μΉ μ± & νμ΄λΈλ¦¬λ μ±
β¨ λ€μ΄ν°λΈ μ± (Native App)
νν μ°λ¦¬κ° μμ£Ό μ¬μ©νλ μ΄ν리μΌμ΄μ μ μλ―Ένλ€.
λͺ¨λ°μΌ κΈ°κΈ°μ μ΅μ νλ μΈμ΄λ‘ κ°λ°λ μ±μΌλ‘ μλλ‘μ΄λ SDKλ₯Ό μ΄μ©ν Java μΈμ΄λ iOS κΈ°λ° SDKλ₯Ό μ΄μ©ν Swift μΈμ΄λ‘ λ§λλ μ±μ΄ λ€μ΄ν°λΈ μ±μ μνλ€.
β¨ μ₯μ
μ±λ₯μ΄ μΉμ±, νμ΄λΈλ¦¬λ μ±μ λΉν΄ κ°μ₯ λμ
λ€μ΄ν°λΈ APIλ₯Ό νΈμΆνμ¬ μ¬μ©ν¨μΌλ‘ νλ«νΌκ³Ό λ°μ°©λμ΄μμ
Javaλ Swiftμ μ΅μν μ¬μ©μλ©΄ μ½κ² μ κ·Ό κ°λ₯ν¨
β¨ λ¨μ
νλ«νΌμ νμ μ
μΈμ΄μ μ μ½μ
β¨ λͺ¨λ°μΌ μΉ μ± (Mobile Wep App)
λͺ¨λ°μΌμΉ + λ€μ΄ν°λΈ μ±μ κ²°ν©ν νν
λͺ¨λ°μΌ μΉμ νΉμ§μ κ°μ§λ©΄μλ, λ€μ΄ν°λΈ μ±μ μ₯μ μ μ§λ λ€. λ°λΌμ κΈ°μ‘΄μ λͺ¨λ°μΌ μΉλ³΄λ€λ λͺ¨λ°μΌμ μ΅μ ν λ μ±μ΄λΌκ³ λ§ν μ μλ€.
μΉμ±μ SPAλ₯Ό νμ©ν΄ μλκ° λΉ λ₯΄λ€λ μ₯μ μ΄ μλ€.
μ½κ² λ§ν΄, PCμ© ννμ΄μ§λ₯Ό λͺ¨λ°μΌ μ€ν¬λ¦° ν¬κΈ°μ λ§μΆ° μ€μ¬ λμ κ²μ΄λΌκ³ μκ°νλ©΄ νΈν¨
β¨ μ₯μ
μΉ μ¬μ΄νΈλ₯Ό 보λ κ²μ΄λ―λ‘ λ°λ‘ μ€μΉν νμX
λͺ¨λ κΈ°κΈ°μ λΈλΌμ°μ μμ μ κ·Ό κ°λ₯
λ³λ μ€μΉ λ° μΉμΈ κ³Όμ μ΄ νμμΉ μμ μ μ§λ³΄μμ μ©μ΄
β¨ λ¨μ
νλ«νΌ API μ¬μ© λΆκ°λ₯. μ€λ‘μ§ λΈλΌμ°μ APIλ§ μ¬μ©κ°λ₯
μΉνμ ν°μΉ μ±μ κ°λ°νκΈ° μ½κ° λ²κ±°λ‘μ
λ€μ΄ν°λΈ, νμ΄λΈλ¦¬λ μ±λ³΄λ€ μ€ν κΉλ€λ‘μ (λΈλΌμ°μ μ΄κ±° κ²μν΄μ λ€μ΄κ°μΌν¨)
β¨ νμ΄λΈλ¦¬λ μ± (Hybrid App)
λ€μ΄ν°λΈ + μΉμ±
λ€μ΄ν°λΈ μΉμ, μΉ viewλ₯Ό λμ μΉμ±μ μ€νμν¨λ€. μμͺ½μ APIλ₯Ό λͺ¨λ μ¬μ©ν μ μλ κ²μ΄ κ°μ₯ ν° μ₯μ
β¨ μ₯μ
λ€μ΄ν°λΈ API, λΈλΌμ°μ APIλ₯Ό λͺ¨λ νμ©ν λ€μν κ°λ° κ°λ₯
μΉ κ°λ° κΈ°μ λ‘ μ± κ°λ° κ°λ₯
νλ²μ κ°λ°λ‘ λ€μ νλ«νΌμμ μ¬μ© κ°λ₯
β¨ λ¨μ
λ€μ΄ν°λΈ κΈ°λ₯ μ κ·Ό μν΄ κ°λ° μ§μ νμ
UI νλ μλꡬ μ¬μ©μνλ©΄ κ°λ°μκ° μ§μ UI μ μ
PWA (Progressive Web App)
μΉμ μ₯μ κ³Ό μ±μ μ₯μ μ κ²°ν©ν νκ²½
μ± μμ€κ³Ό κ°μ μ¬μ©μ κ²½νμ μΉμμ μ 곡νλ κ²μ΄ λͺ©μ !
β¨ νΉμ§
νμ₯μ±μ΄ μ’κ³ , κΉμ΄ μλ μ±κ°μ μΉμ λ§λλ κ²μ μ§ν₯νλ€.
μΉ μ£Όμλ§ μλ€λ©΄, λꡬλ μ κ·Όνμ¬ μ¬μ©μ΄ κ°λ₯νκ³ μ€λ§νΈν°μ μ μ₯곡κ°μ μ‘μ λ¨Ήμ§ μμ
μλΉμ€ μμ μ(Service Worker) API : μΉμ±μ μ€μν λΆλΆμ μΊμ±νμ¬ μ¬μ©μκ° λ€μμ μ΄ λ λΉ λ₯΄κ² λ‘λ©ν μ μλλ‘ λμμ€
β λ€νΈμν¬ νκ²½μ΄ μ’μ§ μμλ λΉ λ₯΄κ² ꡬλλλ©°, μ¬μ©μμκ² νΈμ μλ¦Όμ λ³΄λΌ μλ μμ
β¨ PWA μ 곡 κΈ°λ₯
νλ‘κ·ΈλμλΈ : μ μ§μ κ°μ μ ν΅ν΄ μμ±λμ μ΄λ€ λΈλΌμ°μ λ μκ΄μμ΄ λͺ¨λ μ¬μ©μμκ² μ ν©
λ°μν : λ°μ€ν¬ν±, λͺ¨λ°μΌ, ν λΈλ¦Ώ λ± λͺ¨λ νΌ factorμ λ§μ
μ°κ²° λ 립μ : μλΉμ€ μ컀λ₯Ό μ¬μ©ν΄ μ€νλΌμΈμμλ μλμ΄ κ°λ₯ν¨
μμ : HTTPSλ₯Ό ν΅ν΄ μ κ³΅μ΄ λλ―λ‘ μ€λνμ΄ μ°¨λ¨λμ΄ μ½ν μΈ κ° λ³μ‘°λμ§ μμ
κ²μ κ°λ₯ : W3C 맀λνμ€νΈ λ° μλΉμ€ μ컀 λ±λ‘ λ²μ λλΆμ 'μ±'μΌλ‘ μλ³λμ΄ κ²μμ΄ κ°λ₯ν¨
μ¬μ°Έμ¬ κ°λ₯ : νΈμ μλ¦Όκ³Ό κ°μ κΈ°λ₯μ ν΅ν΄ μ½κ² μ¬μ°Έμ¬κ° κ°λ₯ν¨
CSRF & XSS
β¨CSRF
Cross Site Request Forgery
μΉ μ΄ν리μΌμ΄μ μ·¨μ½μ μ€ νλλ‘, μΈν°λ· μ¬μ©μκ° μμ μ μμ§μλ 무κ΄νκ² κ³΅κ²©μκ° μλν νμ (modify, delete, register λ±)λ₯Ό νΉμ ν μΉμ¬μ΄νΈμ requestνλλ‘ λ§λλ 곡격μ λ§νλ€.
μ£Όλ‘ ν΄μ»€λ€μ΄ λ§μ΄ μ΄μ©νλ κ²μΌλ‘, μ μ μ κΆνμ λμ©ν΄ μ€μν κΈ°λ₯μ μ€ννλλ‘ νλ€.
μ°λ¦¬κ° μ€μνμμ CSRF 곡격μ λ³Ό μ μλ 건, ν΄μ»€κ° μ¬μ©μμ SNS κ³μ μΌλ‘ κ΄κ³ μ± κΈμ μ¬λ¦¬λ κ²μ΄λ€.
μ νν λ§νλ©΄, CSRFλ ν΄μ»€κ° μ¬μ©μ μ»΄ν¨ν°λ₯Ό κ°μΌμκ±°λ μλ²λ₯Ό ν΄νΉν΄μ 곡격νλ κ²μ΄ μλλ€. CSRF 곡격μ μλμ κ°μ μ‘°κ±΄μ΄ λ§μ‘±ν λ μ€νλλ€.
μ¬μ©μκ° ν΄μ»€κ° λ§λ νΌμ± μ¬μ΄νΈμ μ μν κ²½μ°
μμ‘° μμ²μ μ μ‘νλ μλΉμ€μ μ¬μ©μκ° λ‘κ·ΈμΈμ ν μν©
λ³΄ν΅ μλ λ‘κ·ΈμΈμ ν΄λ κ²½μ°μ μ΄λ° νΌμ± μ¬μ΄νΈμ μ μνκ² λλ©΄μ νΌν΄λ₯Ό μ λ κ²½μ°κ° λ§λ€. λν, ν΄μ»€κ° XSS 곡격μ μ±κ³΅μν¨ μ¬μ΄νΈλΌλ©΄, νΌμ± μ¬μ΄νΈκ° μλλλΌλ CSRF κ³΅κ²©μ΄ μ΄λ£¨μ΄μ§ μ μλ€.
β¨ λμ κΈ°λ²
리νΌλ¬(Refferer) κ²μ¦
λ°±μλ λ¨μμ Refferer κ²μ¦μ ν΅ν΄ μΉμΈλ λλ©μΈμΌλ‘ μμ²μμλ§ μ²λ¦¬νλλ‘ νλ€.
Security Token μ¬μ©
μ¬μ©μμ μΈμ μ μμμ λμ κ°μ μ μ₯νκ³ , μ¬μ©μμ μμ²μ ν΄λΉ κ°μ ν¬ν¨νμ¬ μ μ‘μν¨λ€. λ°±μλ λ¨μμλ μμ²μ λ°μ λ μΈμ μ μ μ₯λ ν ν°κ°κ³Ό μμ² νλΌλ―Έν°λ‘ μ λ¬λ°λ ν ν° κ°μ΄ μΌμΉνλ μ§ κ²μ¦ κ³Όμ μ κ±°μΉλ λ°©λ²μ΄λ€.
νμ§λ§, XSSμ μ·¨μ½μ μ΄ μλ€λ©΄ 곡격μ λ°μ μλ μλ€.
β¨ XSS
Cross Site Scription
CSRFμ κ°μ΄ μΉ μ΄ν리μΌμ΄μ μ·¨μ½μ μ€ νλλ‘, κ΄λ¦¬μκ° μλ κΆνμ΄ μλ μ¬μ©μκ° μΉ μ¬μ΄νΈμ μ€ν¬λ¦½νΈλ₯Ό μ½μ νλ 곡격 κΈ°λ²μ λ§νλ€.
μ μμ μΌλ‘ μ€ν¬λ¦½νΈλ₯Ό μ½μ νμ¬ μ΄λ₯Ό μ΄λν μ¬μ©μμ μΏ ν€κ° ν΄μ»€μκ² μ μ‘μν€λ©°, μ΄ νμ·¨ν μΏ ν€λ₯Ό ν΅ν΄ μΈμ νμ΄μ¬νΉ 곡격μ νλ€. ν΄μ»€λ μΈμ IDλ₯Ό κ°μ§ μΏ ν€λ‘ μ¬μ©μμ κ³μ μ λ‘κ·ΈμΈμ΄ κ°λ₯ν΄μ§λ κ²μ΄λ€.
곡격 μ’ λ₯λ‘λ μ§μμ±, λ°μ¬ν, DOM κΈ°λ° XSS λ±μ΄ μλ€.
μ§μμ± : λ§ κ·Έλλ‘ μ§μμ μΌλ‘ νΌν΄λ₯Ό μ νλ μ νμΌλ‘, XSS μ·¨μ½μ μ΄ μ‘΄μ¬νλ μΉ μ΄ν리μΌμ΄μ μ μ μ± μ€ν¬λ¦½νΈλ₯Ό μ½μ νμ¬ μ΄λν μ¬μ©μμ μΏ ν€λ₯Ό νμ·¨νκ±°λ 리λ€μ΄λ μ μν€λ 곡격μ νλ€. μ΄λ μ½μ λ μ€ν¬λ¦½νΈλ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ μ₯μμΌ μ§μμ μΌλ‘ 곡격μ νκΈ° λλ¬Έμ Persistent XSSλΌκ³ λΆλ¦°λ€.
λ°μ¬ν : μ¬μ©μμκ² μ λ ₯ λ°μ κ°μ μλ²μμ λλλ € μ£Όλ κ³³μμ λ°μνλ€. 곡격μλ μ μ μ€ν¬λ¦½νΈμ ν¨κ» URLμ μ¬μ©μμκ² λλ₯΄λλ‘ μ λνκ³ , λλ₯Έ μ¬μ©μλ μ΄ μ€ν¬λ¦½νΈκ° μ€νλμ΄ κ³΅κ²©μ λΉνκ² λλ μ νμ΄λ€.
DOM κΈ°λ° : μ μ± μ€ν¬λ¦½νΈκ° ν¬ν¨λ URLμ μ¬μ©μκ° μμ²νκ² λλ©΄μ λΈλΌμ°μ λ₯Ό ν΄μνλ λ¨κ³μμ λ°μνλ 곡격μ΄λ€. μ΄ μ€ν¬λ¦½νΈλ‘ μΈν΄ ν΄λΌμ΄μΈνΈ μΈ‘ μ½λκ° μλ μλμ λ€λ₯΄κ² μ€νλλ€. μ΄λ λ€λ₯Έ XSS 곡격과λ λ¬λ¦¬ μλ² μΈ‘μμ νμ§κ° μ΄λ ΅λ€.
β¨ λμ κΈ°λ²
μ μΆλ ₯ κ° κ²μ¦
XSS Cheat Sheetμ λν νν° λͺ©λ‘μ λ§λ€μ΄ λͺ¨λ Cheat Sheetμ λν λμμ κ°λ₯νλλ‘ μ¬μ μ λλΉνλ€. XSS νν°λ§μ μ μ© ν μ€ν¬λ¦½νΈκ° μ€νλλμ§ μ§μ ν μ€νΈ κ³Όμ μ κ±°μ³λ³Ό μλ μλ€,
XSS λ°©μ΄ λΌμ΄λΈλ¬λ¦¬, νμ₯μ±
Anti XSS λΌμ΄λΈλ¬λ¦¬λ₯Ό μ 곡ν΄μ£Όλ νμ¬λ€μ΄ λ§λ€. μ΄ λΌμ΄λΈλ¬λ¦¬λ μλ²λ¨μμ μΆκ°νλ©°, μ¬μ©μλ€μ κ°μ λΈλΌμ°μ μμ μ μ± μ€ν¬λ¦½νΈκ° μ€νλμ§ μλλ‘ νμ₯μ±μ μ€μΉνμ¬ λ°©μ΄ν μ μλ€.
μΉ λ°©νλ²½
μΉ λ°©νλ²½μ μΉ κ³΅κ²©μ νΉνλ κ²μΌλ‘, λ€μν Injectionμ νκΊΌλ²μ λ°©μ΄ν μ μλ μ₯μ μ΄ μλ€.
CORS, SOP μ€μ
CORS(Cross-Origin Resource Sharing), SOP(Same-Origin-Policy)λ₯Ό ν΅ν΄ 리μμ€μ Sourceλ₯Ό μ ν νλκ²μ΄ ν¨κ³Όμ μΈ λ°©μ΄ λ°©λ²μ΄ λ μ μλ€. μΉ μλΉμ€μ μ·¨μ½ν 벑ν°μ 곡격 μ€ν¬λ¦½νΈλ₯Ό μ½μ ν κ²½μ°, μΉλͺ μ μΈ κ³΅κ²©μ νκΈ° μν΄ μ€ν¬λ¦½νΈλ₯Ό μμ±νλ©΄ μ λ ₯κ° μ νμ΄λ κΈ°ν μμΈ λλ¬Έμ 곡격 μ±κ³΅μ΄ μ΄λ ΅λ€. κ·Έλ¬λ 곡격μμ μλ²μ μμΉν μ€ν¬λ¦½νΈλ₯Ό λΆλ¬ μ¬ μ μλ€λ©΄ μ΄λ μλμ μΌλ‘ μ¬μμ§λ€. κ·Έλ κΈ° λλ¬Έμ CORS, SOPλ₯Ό νμ© νμ¬ μ¬μ μ μ§μ λ λλ©μΈμ΄λ λ²μκ° μλλΌλ©΄ 리μμ€λ₯Ό κ°μ Έμ¬ μ μκ² μ νν΄μΌ νλ€.
Last updated