μΉ κ°λ°μ νλ€ λ³΄λ©΄ μΈμ¦/μΈκ° κ³Όμ μ μ°Έ λ§μ΄ κ²ͺμ΅λλ€. λ‘κ·ΈμΈ μΈμ¦ λΆν° νμκΆν λ± μ΄λ¬ν κ³Όμ λ€μ μ λ λλΆλΆ Sessionμ λ§μ΄ μ¬μ©νμ΅λλ€. μ¬λ¬κΈμ μ½λ€κ° JWT(Json Web Token)μ΄λΌλ κ²μ μ νκ² λμκ³ μ§κΈκ» κ°μ§κ³ μμλ μκ°λ€μ΄ λ§μ΄ λ³νμ΅λλ€.
λ¨Όμ HTTPλ 무μμΈκ° νμ€νκ² μ μ λ΄λ¦¬κ³ κ°κ² μ΅λλ€.
HTTP(Hyper Text Transfer Protocal) β
νΉμ§μΌλ‘λ μ¬λ¬κ°μ§κ° μμ§λ§ μ€λ λ€λ£° λ΄μ©μ λ°μ ν κ΄λ ¨μ΄ μλ 무μν(Stateless) λΌλ κ²μ μμΈνκ² μ€λͺ ν΄ λ³΄κ² μ΅λλ€. Statelessν νΉμ±μ ν΄λΌμ΄μΈνΈμ μ 보λ₯Ό μ μ₯νμ§ μμ΅λλ€. κ·Έλμ κ·Έλ¬ν ν΄λΌμ΄μΈνΈμ μ 보λ€μ κ³μ μμ²ν΄μΌν©λλ€. κ³μ μμ²νλ©΄ λ¨μ μ΄ λλ, λ°λ‘ λ€νΈμν¬ λ¦¬μμ€ μꡬλμ΄ λ§μμ§κ³ , λ§€λ² μλ‘μ΄ μ°κ²°μ μλ/ν΄μ κ³Όμ μ κ±°μΉλ©΄μ μ€λ²ν€λ(μ΄λ€ μ²λ¦¬λ₯Ό νκΈ° μν΄ λ€μ΄κ°λ κ°μ μ μΈ μ²λ¦¬μκ°)κ° λ°μν΄μ λ€μμ ν΄λΌμ΄μΈνΈκ° μ‘΄μ¬ν λ κ΄λ¦¬νκΈ°κ° λ¬΄μ²μ΄λ μ΄λ ΅μ΅λλ€. λ¬Όλ‘ μ§μ λ μκ°λμ ν¨ν· κ΅νμ΄ μμ κ²½μ° μ£ΌκΈ°μ μΌλ‘ ν¨ν·μ 보λ΄λ keepAlive μμ±μΌλ‘ μ΄λμ λμ μ€λ²ν€λλ₯Ό μ€μΌ μ μμ§λ§ μλ²κ° λ°μλ©΄ νλ‘μΈμ€κ° μμ²λκ² λμ΄λμ λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μ‘μλ¨Ήμ΅λλ€. κ·Έλμ μ΄λ¬ν κ²°ν¨(?)μ¬μ€ κ²°ν¨κΉμ§ μλμ§λ§..μ ν΄κ²°νκ³ μ μνμ μ§(Stateful) μ νΉμ±μ κ°μ§ μΏ ν€μ μΈμ μ΄λΌλ κ²μ μ΄μ©ν΄μ ν΄λΌμ΄μΈνΈμ μ 보μ μνλ₯Ό μ μ§νλ λ°©μμ μ΄μ©νμ΅λλ€. ν΄λΌμ΄μΈνΈ μ 보 μν μ μ§λ λ‘κ·ΈμΈ, μ₯λ°κ΅¬λλ± μ 보λ₯Ό κ°μ§κ³ μμ΄μΌ ν λμ μ μ©ν©λλ€.
Cookieβ
μΏ ν€λ μΉ μλ²κ° λΈλΌμ°μ μκ² μ§μνμ¬ μ¬μ©μμ λ‘컬 μ»΄ν¨ν°μ μλ νμΌ λλ λ©λͺ¨λ¦¬μ μ μ₯νλ μμ κΈ°λ‘ μ 보 νμΌμ
λλ€. μ΄λ κ² μ μ₯λ μ 보λ μΈν°λ· μ¬μ©μκ° κ°μ μΉμ¬μ΄νΈλ₯Ό λ°©λ¬Έν λ λ§λ€ μ½νκ³ μμλ‘ μλ‘μ΄ μ λ³΄λ‘ λ°λ μ μμ΅λλ€. μΏ ν€λ μ΄λ¬ν μ 보λ₯Ό 보κ΄νμ¬ HTTPμ μΉ μλ²κ°μ ν΅μ μμ HTTP Headerμ μΆκ°νμ¬ λ³΄λ΄μ§λ©΄μ μ 보μ μ§μ λμμ μ€λλ€. νμ§λ§ μΏ ν€μ λ΄μ©μ μ½κ² μ΄λλκ³ λΆμλμ΄μ μ¬λ¬κ°μ§ 보μμ μ·¨μ½μ μ λλ¬λ
λλ€. κ·Έλ¦¬κ³ HTTP Headerμ μΆκ°ν΄μ 보λ΄μ§κΈ° λλ¬Έμ μλΉν νΈλν½μ λ°μμν΅λλ€. μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ Sessionμ΄ λ±μ₯ν©λλ€.
Sessionβ
μΈμ
μ μΏ ν€κ° λΈλΌμ°μ μ μΏ ν€ννλ‘ μ μ₯λλ κ²κ³Ό λ¬λ¦¬ μ μν μλ²DBμ μ 보λ₯Ό μ μ₯ν©λλ€. κ·Έλ¦¬κ³ ν΄λΌμ΄μΈνΈλ μ μΌν ID(HTTP Session ID)λ₯Ό μΏ ν€λ‘ λ©λͺ¨λ¦¬μ μ μ₯λ ννλ‘ κ°μ§κ³ μμ΅λλ€. μ΄μ λ°λΌ λΈλΌμ°μ κ° μ’
λ£λλ©΄ μ¬λΌμ§λλ€. μΈμ
μ μ₯μ μ κ° ν΄λΌμ΄μΈνΈ λ§λ€ κ³ μ ν IDλ₯Ό λΆμ¬ν΄μ κ°κ°μ κΆν λΆμ¬νκΈ°κ° νΈνκ³ κ·Έμ λ°λ₯Έ μꡬμ λ§λ μλΉμ€λ₯Ό μ 곡ν μ μκ² λ©λλ€. κ·Έλ¦¬κ³ μΏ ν€κ° κ°μ§κ³ μλ 보μ λ¬Έμ λ₯Ό μ 보λ₯Ό μλ²μ μ μ₯νλ λ°©λ²μΌλ‘ 보μμ±μ λκ² νλ€λ κ² μ
λλ€. λ¨μ μΌλ‘λ μΈμ
μ μλ²μ μ μ₯λλ€κ³ νλλ° μλ²μ μ μ λλ μΈμ
λλ¬Έμ μλ²μ λ³λμ μ μ₯ 곡κ°μ΄ μꡬλλ€λ κ² μ
λλ€.
μ²μμ μΈκΈνλ HTTPμ Stateless λ°©μμ νΉμ±μ κ²°ν¨(?)μ ν΄κ²°νκ³ μ Statefulμ νΉμ±μ κ°μ§ μΏ ν€μ μΈμ μ μ΄μ©νλ€κ³ λ§μλλ Έμ΅λλ€. μ§κΈκΉμ§ μ€λͺ ν κ²μ λ¬Έμ μ μ ν΄κ²° ν κ²μ²λΌ 보μ λλ€. νμ§λ§ μΈμ μ μλ²μ μ μ₯λλ€κ³ λ§μλλ Έμ΅λλ€. μλ²μ μ μ₯λλ κ²μ 보μμ μΈ‘λ©΄μμ μ₯μ μ΄μ§λ§ νμ¬λ μλΉμ€μ νμ₯μ±μ΄ μ μ κ°μ‘°λμ΄μ§κ³ μμ΅λλ€. μΈμ λ°©μμ λͺ¨λ μΉμ νμ₯μ± λΆλΆμμλ μ μ°νμ§ λͺ»ν©λλ€.
νμ₯μ±μ΄λ, μμ€ν
μ΄ μ λλ‘ κΈ°λ₯νκΈ° μν΄ μꡬμ¬νμ λ§μΆμ΄ μ©λ λ° μ±λ₯μ μ‘°μ νλ κ²μ λ§ν©λλ€. μλ₯Ό λ€μ΄, μ€νλμ€μμ μ¬λ¬ μν¬μ€ν
μ΄μ
μ΄ νλμ 곡μ μ€ν 리μ§λ₯Ό ν΅ν΄ μμ νΈμ§μ μ§νν μ, 곡μ μ€ν 리μ§μ μ΅λ μ©λμ΄ λΆμ‘±ν΄μ§κ±°λ μν¬μ€ν
μ΄μ
μ νΈλν½μ΄ κ³ΌλΆν λλ κ²½μ°κ° μμ΅λλ€. μ΄ κ²½μ° μ©λ λ° μ±λ₯μ λ리기 μν΄ μμ€ν
μ νμ₯μ΄ νμνλ°, κ·Έ λ°©μμ μ€μΌμΌμ
(μμ§νμ₯) κ³Ό μ€μΌμΌμμ(μννμ₯) μΌλ‘ ꡬλΆν μ μμ΅λλ€. μ΄κ²μ λμ΄λλ μμ²μ λ°λ₯Έ μλ² κ³ΌλΆν(νΈλ ν½μ΄ λμμ§)μ ν΄κ²°νκΈ° μν΄μ μ
λλ€.
μ€μΌμΌμ
(μμ§νμ₯) μ κ²½μ° κΈ°μ‘΄μ νλμ¨μ΄μ μ±λ₯μ μ¬λ¦¬λ κ²μ
λλ€. μλ₯Ό λ€μ΄ CPUλ₯Ό i3 -> i7μΌλ‘ μ¬λ¦¬λ κ²μ
λλ€. νλμ¨μ΄ μ±λ₯μ΄ μ¬λΌκ°λ©΄ κ·Έλ§νΌ λ μμ²μ μ²λ¦¬ν λ μ 리ν κ²μ
λλ€. μ€μΌμΌ μ
μ μ₯μ μ μΌλ¨ νλμ¨μ΄λ§ κ΅μ²΄ν΄μ£Όλ©΄ λκΈ° λλ¬Έμ κ·Έλ§νΌ μ½λ€λ κ²μ
λλ€. νμ§λ§ μ€μΌμΌμ
μ ν μλ‘ κΈ°μ‘΄ νλμ¨μ΄μ λκ°, 곡κ°, μ λ ₯κ³΅κΈ λ±μ λ¬Έμ κ° λ°μν μ μκ³ , νλμ¨μ΄ νμ© λ²μ λ΄μμλ§ νμ₯μ΄ κ°λ₯νκΈ° λλ¬Έμ κ·Έ μ΄μμΌλ‘ μ
κ·Έλ μ΄λλ₯Ό νκ³ μ νλ€λ©΄ μλ‘μ΄ μ₯λΉλ‘ κ΅μ²΄νλ λ°©λ²λ°μ μμ΅λλ€. μ μ₯λΉλ‘ κ΅μ²΄ μμλ λ°μ΄ν° μ 체μ λ§μ΄κ·Έλ μ΄μ
μμ
μ΄ νμν΄ νμ₯μ μκ°μ΄ μ€λ걸리며, μ μ₯λ λ°μ΄ν°μμ λ°λΌ μμ
μ΄ μκ°μ 걸리λ κ²½μ°λ μμ΅λλ€.
μ€μΌμΌμμ(μννμ₯) μ κ²½μ° μ₯λΉλ₯Ό μΆκ°ν΄μ νμ₯νλ λ°©μμ λ§ν©λλ€. μλ²μ»΄ν¨ν°μ λμλ₯Ό λλ € μλ²νλμ λͺ°λ¦¬λ νΈλ ν½μ λΆμ°μν€λ κ²μ΄μ£ . κΈ°μ‘΄ μλ²λ§μΌλ‘ μ©λμ΄λ μ±λ₯μ νκ³κ° μμΌλ©΄, λΉμ·ν μ¬μμ μλ²λ₯Ό μ°κ²°ν΄ μΆκ°λ λΆλ§νΌ μ©λμ΄ μ¦κ°ν λΏλ§ μλλΌ μν¬λ‘λλ₯Ό λΆλ΄ν΄ μ±λ₯μ λμ΄λ λ³λ ¬ μ»΄ν¨ν
μ ꡬνν μ μμ΅λλ€. μ€μΌμΌμμμ κ°μ₯ ν° μ₯μ μ νμ₯μ μ μ°μ±μ
λλ€. μ€μΌμΌμ
μ νμ₯μ ν λ λ°μ΄ν° μμ λ°λΌ μμ
μ΄ μ€λκ±Έλ¦¬κ³ νΈλ ν½μ΄ λμμ§λ κ²μ λλΉν΄ νμ₯(λΉμ©ν¬μ)μ νλλ° μμλ§νΌ μꡬλμ§ μμ μν΄λ₯Ό 보λ κ²½μ°κ° λ§μ΅λλ€. λ°λ©΄ μ€μΌμΌ μμμ κ²½μ° κ·Έλκ·Έλ νμν λ§νΌ νμ₯μ ν μ μκΈ° λλ¬Έμ μ μ°νκ² λμ²ν μ μμ΅λλ€. κ·Έ μΈμλ μΈνλΌμ λ
Έννμμλ μ€μΌμΌ μ
μ λΉν΄ μ
κ·Έλ μ΄λ νκΈ°κ° νΈλ¦¬νκ³ νΉμ λ°μ΄ν°λ₯Ό μ°Ύμ λμλ λ λΉ λ¦
λλ€. νμ§λ§ μ¬λ¬ λ
Έλλ₯Ό μ°κ²°ν΄ λ³λ ¬ μ»΄ν¨ν
νκ²½μ ꡬμ±νκ³ μ μ§νλ €λ©΄ μμ€ν
μν€ν
μ²μ λν λμ μ΄ν΄λκ° μꡬλκ³ μ¬λ¬ λ
Έλμ μν¬λ‘λλ₯Ό κ· λ±νκ² λΆμ° μν€κΈ° μν΄ λ‘λλ°Έλ°μ±(μλμ μ€λͺ
λ§ν¬)μ΄ νμν©λλ€. κ·Έλ¦¬κ³ κ°λ³μ μΈ μ±λ₯μ΄λ μμ μ± λΆλΆμ νμ΄μλ νλμ¨μ΄μ λΉν΄ λΆμ‘±νλ€λ λ¨μ μ΄ μμ΅λλ€.
μμμ μ€μΌμΌμ
κ³Ό μ€μΌμΌμμμ λν΄μ μ€λͺ
μ λλ Έμ΅λλ€. λ λ°©λ² λͺ¨λ μ₯λ¨μ μ΄ μμ§λ§ λλΆλΆμ ITνμ¬μμλ μ€μΌμΌμμ μ λ΅μ μ¬μ©ν©λλ€. μν©μ λ°λΌ λ€λ₯΄κ² μ§λ§ νκ· μ μΈ λΉμ©μ μΈ λΆλ΄κ³Ό μ μ°ν λμ²κ° κ°λ₯νκΈ° λλ¬Έμ
λλ€. μ΄μ μΈμ
λ°©μμ μ¬μ©νμ λ μ νμ₯μ±λΆλΆμμ μ μ°νμ§ λͺ»νμ§ κ·Έλ¦Όμ ν΅ν΄ μ€λͺ
λλ¦¬κ² μ΅λλ€.
μ κ·Έλ¦Όμ λ¨μΌμλ²μ κ²½μ° μΈμ
μμ
μ ννν κ²μ
λλ€. ν΄λΌμ΄μΈνΈμ μλ²μ¬μ΄ λ‘λ벨λ°μλ λ‘λλ°Έλ°μ± μμ
μ ν΄μ€λλ€. λ‘λλ°Έλ°μ±μ μ¬λ¬ λμ μλ²λ₯Ό λκ³ μλΉμ€λ₯Ό μ 곡νλ λΆμ° μ²λ¦¬ μμ€ν
μμ νμν κΈ°μ μ
λλ€. μμΈν λ΄μ©μ μλμ 2.λ§ν¬ λ₯Ό νμΈν΄ 보μλ©΄ λμμ΄ λ κ² κ°μ΅λλ€. μ΄λ κ² λ¨μΌ μλ²μ κ²½μ° μΈμ
λ°©μμ μλ¬΄λ° λ¬Έμ μ μ΄ μμ΅λλ€.
λ€μ κ·Έλ¦Όμ
λλ€. μλ²κ° μλ‘ μΆκ°λ λͺ¨μ΅μ
λλ€. λ‘λλ°Έλ°μ λ€μ μΆκ°λ μλ‘μ΄ μλ²μ λ©λͺ¨λ¦¬μλ xyz μΈμ
μ΄ μμ΄μ μΈμ¦νλ‘μΈμ€κ° μ€ν¨ν©λλ€. μ¦ μΈμ
μ μ΄μ©ν μμλ μ²μ λ‘κ·ΈμΈν μλ²μμλ§ μμ²μ λ°μ μ μλ€λ κ²μ
λλ€. μ΄ μΈμλ λ°μ΄ν°λ² μ΄μ€λ λ©λͺ¨λ¦¬μ μ μ₯λλ μΈμ
μ μ¬μ©νλ μ¬μ©μκ° λ§μ μ§μλ‘ λ©λͺ¨λ¦¬μ λ°μ΄ν° λ² μ΄μ€μ μ£Όλ 무리, CORS(μΏ ν€κ΄λ¦¬)λ±μ λ¬Έμ μ μ΄ μμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν λ°©λ²μΌλ‘ 3κ°μ§ λ°©λ²μ μ μν©λλ€.
첫λ²μ§Έλ μλ² κ° μΈμ
λκΈ°νμ
λλ€. νμ§λ§ ꡬνμ΄ κΉλ€λ‘κ³ μ€λ₯κ° λ°μνκΈ° μ½μ΅λλ€.
λλ²μ§Έλ μΈλΆ μΈλ©λͺ¨λ¦¬ DBμ¬μ©μ
λλ€. μ’μ μ루μ
μ΄μ§λ§ λ€λ₯Έ μΈνλΌ κ΅¬μ±μμκ° μΆκ°λ©λλ€. μΈλ©λͺ¨λ¦¬κ° κΆκΈνμλ€λ©΄ μλμ 3.λ§ν¬ λ₯Ό μ½μ΄λ³΄μλ©΄ λμμ΄ λ κ² κ°μ΅λλ€.
μΈλ²μ§Έλ HTTPμ Stateless νΉμ±μ μμ©νκ³ λ λμ μ루μ
μ μ°Ύλ κ² μ
λλ€. λ λμ μ루μ
μΌλ‘ μκ°λλ κ²μ΄ λ°λ‘ JWTμ
λλ€. JWTλ λ€μκΈμμ μμΈνκ² μ€λͺ
λλ¦¬κ² μ΅λλ€.
μ°Έκ³ λ§ν¬
1. λͺ¨λ μΉμμ JWT
2. λ‘λλ°Έλ°μ
3. in-memory