Home > CS > 2024 > πŸ’Ύ [CS] JWT(JSON Web Token) ν† ν°μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸ’Ύ [CS] JWT(JSON Web Token) ν† ν°μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?
CS

πŸ’Ύ [CS] JWT(JSON Web Token) ν† ν°μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

  • JWT(JSON Web Token) 토큰은 μ‚¬μš©μž 인증과 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ μ „λ‹¬ν•˜κΈ° μœ„ν•œ JSON 기반의 ν† ν°μž…λ‹ˆλ‹€.
    • 주둜 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μž 인증, κΆŒν•œ λΆ€μ—¬λ₯Ό μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
    • JWT(JSON Web Token)λŠ” 디지털 μ„œλͺ…을 톡해 λ³€μ‘° 방지가 κ°€λŠ₯ν•˜λ©°, 이λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 데이터 전솑이 μ•ˆμ „ν•˜κ²Œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

1️⃣ JWT의 ꡬ쑰.

  • JWT(JSON Web Token)λŠ” μ„Έ 가지 λΆ€λΆ„μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.
      1. 헀더(Header)
      1. νŽ˜μ΄λ‘œλ“œ(Payload)
      1. μ„œλͺ…(Signature)

1️⃣ 헀더(Header)

  • ν† ν°μ˜ νƒ€μž…(JWT-JSON Web Token)κ³Ό ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜ 정보(예: HMAC, SHA256)λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: {"alg": "HS256", "typ": "JWT"}

πŸ€” JWT의 ν—€λ”μ—μ„œ ν† κ·Όμ˜ νƒ€μž…μ„ ν¬ν•¨ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

JWT(JSON Web Token)의 헀더(Header)에 ν† ν°μ˜ νƒ€μž…μ„ ν¬ν•¨ν•˜λŠ” μ΄μœ λŠ” μˆ˜μ‹ μžκ°€ 토큰을 μ˜¬λ°”λ₯΄κ²Œ μΈμ‹ν•˜κ³  μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄μ„œ μž…λ‹ˆλ‹€.

πŸ€” ν† ν°μ˜ νƒ€μž…(Token Type)μ΄λž€ λ¬΄μ—‡μΌκΉŒ?

토큰이 μ‚¬μš©λ˜λŠ” λ°©μ‹μ΄λ‚˜ ν˜•νƒœλ₯Ό κ΅¬λΆ„ν•˜λŠ” μ •λ³΄μž…λ‹ˆλ‹€.
이 μ •λ³΄λŠ” 주둜 토큰이 μ–΄λ–€ 인증 λ˜λŠ” 정솑 λ°©μ‹μœΌλ‘œ μ‚¬μš©λ˜λŠ”μ§€λ₯Ό λͺ…μ‹œν•˜λ©°, μˆ˜μ‹  μΈ‘μ—μ„œ ν•΄λ‹Ή 토큰을 μ˜¬λ°”λ₯΄κ²Œ ν•΄μ„ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.

πŸ€” JWT의 ν—€λ”μ—μ„œ ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜ 정보λ₯Ό ν¬ν•¨ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

JWT(JSON Web Token)의 헀더(Header)에 ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜ 정보λ₯Ό ν¬ν•¨ν•˜λŠ” μ΄μœ λŠ” ν† ν°μ˜ 무결성을 κ²€μ¦ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λœ μ•Œκ³ λ¦¬μ¦˜μ΄ 무엇인지 μˆ˜μ‹  μΈ‘μ—μ„œ μ •ν™•νžˆ μ•Œ 수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€.

πŸ€” ν•΄μ‹œκ°’(Hash Value), λ˜λŠ” ν•΄μ‹œ μ½”λ“œ(Hash Code)λŠ” λ¬΄μ—‡μΌκΉŒ?

ν•΄μ‹œκ°’(Hash Value), λ˜λŠ” ν•΄μ‹œ μ½”λ“œ(Hash Code)λŠ” μž„μ˜μ˜ μž…λ ₯ 데이터λ₯Ό κ³ μ •λœ 길이의 λ¬Έμžμ—΄μ΄λ‚˜ 숫자둜 λ³€ν™˜ν•œ κ°’μž…λ‹ˆλ‹€.
ν•΄μ‹œκ°’(Hash Value)은 ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜μ— μ˜ν•΄ μƒμ„±λ˜λ©°, μž…λ ₯ 데이터가 κ°™μœΌλ©΄ 항상 같은 ν•΄μ‹œκ°’(Hash Value)을 μƒμ„±ν•˜μ§€λ§Œ, μž…λ ₯ 데이터가 달라지면 μ™„μ „νžˆ λ‹€λ₯Έ ν•΄μ‹œκ°’(Hash Value)이 μƒμ„±λ©λ‹ˆλ‹€.

πŸ€” ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜(Hashing Algorithm)μ΄λž€ λ¬΄μ—‡μΌκΉŒ?

μž„μ˜μ˜ 길이λ₯Ό 가진 데이터λ₯Ό κ³ μ •λœ 길이의 ν•΄μ‹œκ°’(Hash Value), λ˜λŠ” ν•΄μ‹œ μ½”λ“œ(Hash Code)으둜 λ³€ν™˜ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜(Hashing Algorithm)은 λ°μ΄ν„°μ˜ 무결성 검증, λΉ„λ°€λ²ˆν˜Έ μ €μž₯, 데이터 검색 λ“±μ˜ μš©λ„λ‘œ 널리 μ‚¬μš©λ©λ‹ˆλ‹€.
ν•΄μ‹œ ν•¨μˆ˜λŠ” 일반적으둜 λΉ λ₯΄κ²Œ 계산할 수 있으며, μž…λ ₯ 데이터가 μ•„μ£Ό μ•½κ°„λ§Œ λ°”λ€Œμ–΄λ„ μ™„μ „νžˆ λ‹€λ₯Έ ν•΄μ‹œκ°’(Hash Value)을 μƒμ„±ν•˜λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜ μ •λ³΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜(Hashing Algorithm)의 μ’…λ₯˜μ™€ 방식을 λ‚˜νƒ€λ‚΄λŠ” μ •λ³΄λ‘œ, 주둜 λ°μ΄ν„°μ˜ 무결성을 κ²€μ¦ν•˜κ±°λ‚˜ μ•”ν˜Έν™”λœ ν˜•νƒœλ‘œ μ €μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
해싱은 데이터가 λ³€κ²½λ˜μ§€ μ•Šμ•˜μŒμ„ ν™•μΈν•˜λŠ” 데 μœ μš©ν•˜λ©°, 특히 λΉ„λ°€λ²ˆν˜Έ μ €μž₯, 디지털 μ„œλͺ…, 데이터 무결성 λ“± λ‹€μ–‘ν•œ λ³΄μ•ˆ λΆ„μ•Όμ—μ„œ ν•„μˆ˜μ μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

2️⃣ νŽ˜μ΄λ‘œλ“œ(Payload)

  • ν† ν°μ˜ μ‹€μ œ 정보가 ν¬ν•¨λœ λΆ€λΆ„μœΌλ‘œ, μ‚¬μš©μž 정보와 같은 ν΄λ ˆμž„(Claim)을 λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” ν† ν°μ˜ μ‹€μ œ μ •λ³΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

ν† ν°μ˜ μ‹€μ œ μ •λ³΄λŠ” 토큰에 ν¬ν•¨λœ λ°μ΄ν„°μ˜ 핡심적인 λ‚΄μš©μœΌλ‘œ, 주둜 μ‚¬μš©μžμ— λŒ€ν•œ μ •λ³΄λ‚˜ 인증, κΆŒν•œμ— κ΄€λ ¨λœ 정보λ₯Ό λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€.
이 μ •λ³΄λŠ” JWT(JSON Web Token) ν† ν°μ˜ νŽ˜μ΄λ‘œλ“œ(Payload) 뢀뢄에 μ €μž₯되며, ν΄λ ˆμž„(Claim)이라고도 λΆˆλ¦½λ‹ˆλ‹€.
ν† ν°μ˜ μ‹€μ œ μ •λ³΄λŠ” 인증이 ν•„μš”ν•œ μ‹œμŠ€ν…œμ—μ„œ μ„œλ²„κ°€ ν•΄λ‹Ή μ‚¬μš©μžμ˜ 신원을 ν™•μΈν•˜κ±°λ‚˜ νŠΉμ • κΆŒν•œμ„ λΆ€μ—¬ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

πŸ€” ν΄λ ˆμž„(Claim)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

JWT(JSON Web Token)의 νŽ˜μ΄λ‘œλ“œ(Payload) 뢀뢄에 λ‹΄κΈ°λŠ” μ •λ³΄λ‘œ, μ‚¬μš©μž λ˜λŠ” 토큰과 κ΄€λ ¨λœ μ†μ„±μ΄λ‚˜ 데이터λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
ν΄λ ˆμž„(Claim)은 μ„œλ²„κ°€ μ‚¬μš©μžμ— λŒ€ν•œ 신원, κΆŒν•œ, ν† ν°μ˜ 유효 κΈ°κ°„ 등을 확인 ν•  수 있게 ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
JWT(JSON Web Token)의 핡심 μš”μ†Œλ‘œ, ν΄λ ˆμž„(Claim)을 톡해 인증과 κΆŒν•œ 뢀여에 ν•„μš”ν•œ λ‹€μ–‘ν•œ 정보λ₯Ό 포함할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” νŽ˜μ΄λ‘œλ“œ(Payload)κ°€ ν† ν°μ˜ μ‹€μ œ 정보λ₯Ό ν¬ν•¨ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒμš”?

토큰을 톡해 인증과 κΆŒν•œ 뢀여에 ν•„μš”ν•œ μ‚¬μš©μž 정보와 기타 데이터λ₯Ό 효율적으둜 μ „λ‹¬ν•˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€.
JWT(JSON Web Token)λŠ” 주둜 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ 간에 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ μ „μ†‘ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©λ˜λ―€λ‘œ, ν•„μš”ν•œ 정보λ₯Ό νŽ˜μ΄λ‘œλ“œ(Payload)에 ν¬ν•¨ν•˜μ—¬ μ„œλ²„κ°€ μΆ”κ°€ μš”μ²­ 없이 μ‚¬μš©μž μƒνƒœλ₯Ό νŒŒμ•…ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

  • ν΄λ ˆμž„(Claim)은 일반적으둜 μ‚¬μš©μž μ‹λ³„μž(id), μ‚¬μš©μž κΆŒν•œ(role), ν† ν°μ˜ 유효 μ‹œκ°„(expiration) 등을 ν¬ν•¨ν•©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: {"sub": "1234567890", "name": "Kobe", "admin": true}

πŸ€” ν΄λ ˆμž„(Claim)μ—μ„œμ˜ μ‚¬μš©μž μ‹λ³„μž(id)λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ‚¬μš©μž μ‹λ³„μž(id)λŠ” JWT(JSON Web Token) 토큰 λ‚΄μ—μ„œ μ‚¬μš©μžλ₯Ό κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλŠ” 값을 μ˜λ―Έν•©λ‹ˆλ‹€.
이 μ‹λ³„μžλŠ” μ‚¬μš©μžλ₯Ό κ΅¬λ³„ν•˜λŠ” μ£Όμš” μ •λ³΄λ‘œ μ‚¬μš©λ˜λ©°, μ„œλ²„κ°€ νŠΉμ • μ‚¬μš©μžλ₯Ό μΈμ‹ν•˜κ³  인증, κΆŒν•œ λΆ€μ—¬λ₯Ό μˆ˜ν–‰ν•  λ•Œ 기쀀이 λ˜λŠ” μ •λ³΄μž…λ‹ˆλ‹€.

πŸ€” ν΄λ ˆμž„(Claim)μ—μ„œμ˜ μ‚¬μš©μž κΆŒν•œ(role)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ‚¬μš©μžκ°€ μ‹œμŠ€ν…œμ—μ„œ μ–΄λ–€ 역할을 가지고 μžˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •λ³΄μž…λ‹ˆλ‹€.
μ΄λŠ” JWT(JSON Web Token) ν† ν°μ˜ ν΄λ ˆμž„(Claim) ν•„λ“œμ— ν¬ν•¨λ˜μ–΄ μ‚¬μš©μžμ—κ²Œ λΆ€μ—¬λœ κΆŒν•œ μˆ˜μ€€μ„ λͺ…μ‹œν•˜λ©°, μ„œλ²„λŠ” 이 κΆŒν•œ 정보λ₯Ό 기반으둜 μ‚¬μš©μžμ—κ²Œ ν—ˆμš©λœ μž‘μ—…μ΄λ‚˜ μ ‘κ·Ό κΆŒν•œμ„ κ²°μ •ν•©λ‹ˆλ‹€.

πŸ€” ν΄λ ˆμž„(Claim)μ—μ„œμ˜ ν† ν°μ˜ 유효 μ‹œκ°„(expiration)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

ν† ν°μ˜ 유효 μ‹œκ°„(expiration)은 JWT(JSON Web Token) 토큰이 μœ νš¨ν•œ 기간을 μ„€μ •ν•˜λŠ” μ†μ„±μœΌλ‘œ, ν† ν°μ˜ 만료 μ‹œμ μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
이 속성은 JWT(JSON Web Token)의 exp ν΄λ ˆμž„(Claim)에 ν¬ν•¨λ˜λ©°, 이 값이 μ§€λ‚˜λ©΄ 토큰은 더 이상 μœ νš¨ν•˜μ§€ μ•Šλ‹€κ³  κ°„μ£Όλ˜μ–΄ 인증과 κΆŒν•œ λΆ€μ—¬ μš”μ²­ μ‹œ κ±°λΆ€λ©λ‹ˆλ‹€.

πŸ€” ν΄λ ˆμž„(Claim)μ—μ„œ μ‚¬μš©μž μ‹λ³„μž(id), μ‚¬μš©μž κΆŒν•œ(role), ν† ν°μ˜ 유효 μ‹œκ°„(expiration) 등을 ν¬ν•¨ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒμš”?

μ„œλ²„κ°€ μ‚¬μš©μž 인증 및 κΆŒν•œ 관리λ₯Ό 효율적이고 μ•ˆμ „ν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•„μš”ν•œ 정보λ₯Ό ν•œ 곳에 λͺ¨μ•„ 두기 μœ„ν•¨μž…λ‹ˆλ‹€.
μ΄λŸ¬ν•œ 정보λ₯Ό 톡해 μ„œλ²„λŠ” λ³„λ„μ˜ μΆ”κ°€ μž‘μ—… 없이 μ‚¬μš©μžμ˜ 신원과 κΆŒν•œ, ν† ν°μ˜ μœ νš¨μ„±μ„ 검증할 수 있으며, 이λ₯Ό 톡해 효율적이고 ν™•μž₯ κ°€λŠ₯ν•œ 인증 μ‹œμŠ€ν…œμ„ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ μ„œλͺ…(Signature)

  • ν† ν°μ˜ 무결성을 보μž₯ν•˜κΈ° μœ„ν•œ μ„œλͺ…μœΌλ‘œ, 헀더(Header)와 νŽ˜μ΄λ‘œλ“œ(Payload)λ₯Ό ν•©μΉœ ν›„ λΉ„λ°€ ν‚€λ‘œ ν•΄μ‹±(Hashing)ν•˜μ—¬ μƒμ„±λ©λ‹ˆλ‹€.

πŸ€” ν† ν°μ˜ 무결성(Token Integrity)

ν† ν°μ˜ λ‚΄μš©μ΄ λ°œκΈ‰λœ 이후 λ³€κ²½λ˜μ§€ μ•Šμ•˜μŒμ„ 보μž₯ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
무결성이 μœ μ§€λœ 토큰은 λ°œκΈ‰ μ‹œμ μ˜ 정보λ₯Ό μ‹ λ’°ν•  수 μžˆλŠ” μƒνƒœλ‘œ μœ μ§€ν•˜λ©°, κ·Έ λ‚΄μš©μ΄ 쀑간에 μ‘°μž‘λ˜μ§€ μ•Šμ•˜μŒμ„ ν™•μ‹ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
무결성은 ν† ν°μ˜ μ•ˆμ „ν•œ 인증과 κΆŒν•œ 관리λ₯Ό μœ„ν•΄ ν•„μˆ˜μ μΈ μš”μ†Œμž…λ‹ˆλ‹€.

πŸ€” λΉ„λ°€ ν‚€(Secret Key)

데이터λ₯Ό μ•”ν˜Έν™”ν•˜κ±°λ‚˜ 인증할 λ•Œ μ‚¬μš©ν•˜λŠ” κΈ°λ°€ μ •λ³΄λ‘œ, 였직 μ†‘μ‹ μžμ™€ μˆ˜μ‹ μžλ§Œ μ•Œκ³  μžˆμ–΄μ•Ό ν•˜λŠ” ν‚€μž…λ‹ˆλ‹€.
λΉ„λ°€ ν‚€λŠ” λŒ€μΉ­ μ•”ν˜Έν™”μ™€ HMAC ν•΄μ‹± μ•Œκ³ λ¦¬μ¦˜μ—μ„œ 주둜 μ‚¬μš©λ˜λ©°, 이λ₯Ό 톡해 λ°μ΄ν„°μ˜ 무결성을 보μž₯ν•˜κ³  전솑 쀑 λ°μ΄ν„°μ˜ μ•ˆμ „μ„±μ„ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ„œλͺ…은 ν΄λΌμ΄μ–ΈνŠΈκ°€ νŽ˜μ΄λ‘œλ“œ(Payload)의 λ‚΄μš©μ„ λ³€κ²½ν•˜μ§€ λͺ»ν•˜λ„둝 보μž₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
    • JWTλŠ” μœ„μ˜ μ„Έ 가지λ₯Ό ν•©μ³μ„œ ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ λ§Œλ“€κ³ , 각 뢀뢄을 .으둜 κ΅¬λΆ„ν•©λ‹ˆλ‹€.

2️⃣ JWT의 μ˜ˆμ‹œ.

  • JWT(JSON Web Token)λŠ” λ‹€μŒκ³Ό 같이 μ„Έ 뢀뢄이 합쳐진 ν˜•νƒœμ˜ λ¬Έμžμ—΄μž…λ‹ˆλ‹€.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • 이 λ¬Έμžμ—΄μ€ 헀더(header), νŽ˜μ΄λ‘œλ“œ(payload), μ„œλͺ…(signature)이 κ²°ν•©λœ 것이며, 각 뢀뢄은 Base64URL둜 μΈμ½”λ”©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” Base64URLμ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

Base64URL은 Base64 인코딩 방식을 URL 및 파일 μ‹œμŠ€ν…œμ—μ„œ μ•ˆμ „ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ³€ν˜•ν•œ 인코딩 λ°©μ‹μž…λ‹ˆλ‹€.
일반적인 Base64 인코딩은 λ¬Έμžμ—΄μ„ λ°”μ΄λ„ˆλ¦¬ λ°μ΄ν„°λ‘œλΆ€ν„° ASCII ν…μŠ€νŠΈλ‘œ λ³€ν™˜ν•˜μ§€λ§Œ, λ³€ν™˜λœ κ²°κ³Όμ—λŠ” URLμ—μ„œ νŠΉλ³„ν•œ 의미λ₯Ό κ°€μ§€λŠ” 문자(+, /, =)κ°€ 포함될 수 μžˆμ–΄ URL 인코딩을 μΆ”κ°€λ‘œ ν•΄μ•Ό ν•˜λŠ” λΆˆνŽΈν•¨μ΄ μžˆμŠ΅λ‹ˆλ‹€.
Base64URL은 이 문제λ₯Ό ν•΄κ²°ν•˜μ—¬, Base64 인코딩을 URLκ³Ό 파일 κ²½λ‘œμ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ•ˆμ „ν•˜κ²Œ λ³€κ²½ν•œ λ°©μ‹μž…λ‹ˆλ‹€.

πŸ€” λ°”μ΄λ„ˆλ¦¬ 데이터(Binary Data)

컴퓨터가 2μ§„μˆ˜(0κ³Ό 1)둜 ν‘œν˜„ν•˜λŠ” 데이터λ₯Ό μ˜λ―Έν•˜λ©°, ν…μŠ€νŠΈ 데이터와 달리 μ‚¬λžŒμ΄ 직접 μ½κ±°λ‚˜ ν•΄μ„ν•˜κΈ° μ–΄λ €μš΄ 데이터 ν˜•μ‹μž…λ‹ˆλ‹€.
컴퓨터 μ‹œμŠ€ν…œμ—μ„œ λͺ¨λ“  λ°μ΄ν„°λŠ” ꢁ극적으둜 0κ³Ό 1의 μ΄μ§„μˆ˜ ν˜•νƒœλ‘œ μ €μž₯되고 처리되기 λ•Œλ¬Έμ—, 이미지, μ˜€λ””μ˜€, λΉ„λ””μ˜€, μ‹€ν–‰ 파일 λ“± λ‹€μ–‘ν•œ 파일 ν˜•μ‹μ΄ λ°”μ΄λ„ˆλ¦¬ λ°μ΄ν„°λ‘œ ν‘œν˜„λ©λ‹ˆλ‹€.

πŸ€” Base64λž€ λ¬΄μ—‡μΈκ°€μš”?

λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό ν…μŠ€νŠΈ ν˜•μ‹μœΌλ‘œ μΈμ½”λ”©ν•˜κΈ° μœ„ν•œ λ°©μ‹μž…λ‹ˆλ‹€.
μ»΄ν“¨ν„°μ—μ„œ λ°”μ΄λ„ˆλ¦¬ 데이터(예: 이미지, μ˜€λ””μ˜€ λ“±)λ₯Ό ASCII λ¬Έμžλ§Œλ“œλ‘œ ν‘œν˜„ν•˜μ—¬ μ „μ†‘ν•˜κ±°λ‚˜ μ €μž₯ν•  수 μžˆλ„λ‘ λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.
Base64λŠ” 주둜 이메일, μ›Ή API, URLμ—μ„œ λ°”μ΄λ„ˆλ¦¬ 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ μ „λ‹¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

3️⃣ JWT의 νŠΉμ§•.

1️⃣ 자기 포함 토큰.

  • JWT(JSON Web Token)λŠ” λͺ¨λ“  ν•„μš”ν•œ 정보λ₯Ό 자체적으둜 ν¬ν•¨ν•˜λ―€λ‘œ, μ„œλ²„κ°€ ν† ν°λ§Œ 확인해도 인증 및 κΆŒν•œ 정보λ₯Ό μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 μ„Έμ…˜ μ €μž₯μ†Œ 없이도 μ‚¬μš©μž 인증을 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” μ„Έμ…˜ μ €μž₯μ†Œ(Session Store)λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ‚¬μš©μž μ„Έμ…˜ 정보λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μž₯μ†Œλ‘œ, 주둜 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μžκ°€ λ‘œκ·Έλ¦°ν•œ μƒνƒœλ₯Ό μœ μ§€ν•˜κ±°λ‚˜ μ‚¬μš©μžμ™€ κ΄€λ ¨λœ 데이터λ₯Ό μž„μ‹œλ‘œ λ³΄κ΄€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
μ„Έμ…˜ μ €μž₯μ†Œ(Session Store)λŠ” μ„œλ²„κ°€ μ‚¬μš©μžλ³„ μƒνƒœλ₯Ό 관리할 수 있게 ν•˜λ©°, νŽ˜μ΄μ§€ κ°„ μ΄λ™μ΄λ‚˜ μ„œλ²„ κ°„ μš”μ²­κ°„μ—λ„ μ‚¬μš©μž μƒνƒœλ₯Ό μ§€μ†μ μœΌλ‘œ μœ μ§€ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€.

πŸ€” μ„Έμ…˜ 정보(Session Information)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ νŠΉμ • μ‚¬μš©μžμ™€ κ΄€λ ¨λœ μƒνƒœλ‚˜ 데이터λ₯Ό λ§ν•©λ‹ˆλ‹€.
μ„Έμ…˜ 정보(Session Information)λŠ” μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈμ— 둜그인 ν–ˆμ„ λ•ŒλΆ€ν„° λ‘œκ·Έμ•„μ›ƒν•  λ•ŒκΉŒμ§€ μ‚¬μš©μžμ˜ ν™œλ™μ΄λ‚˜ μƒνƒœλ₯Ό μœ μ§€ν•˜κ³  μΆ”μ ν•˜κΈ° μœ„ν•΄ μ„œλ²„μ— μ €μž₯되며, νŽ˜μ΄μ§€ μ΄λ™μ΄λ‚˜ μƒˆλ‘œμš΄ μš”μ²­μ΄ λ°œμƒν•˜λ”λΌλ„ μ‚¬μš©μž μƒνƒœκ°€ μ§€μ†λ˜λ„λ‘ λ•μŠ΅λ‹ˆλ‹€.

πŸ€” μ„Έμ…˜(Session)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ νŠΉμ • μ‚¬μš©μžμ™€ μ„œλ²„ κ°„μ˜ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ” 기간을 μ˜λ―Έν•©λ‹ˆλ‹€.
μ„œλ²„κ°€ μ‚¬μš©μžμ˜ μš”μ²­λ“€μ„ ν•˜λ‚˜μ˜ 연속적인 νλ¦„μœΌλ‘œ μ‹λ³„ν•˜κ³  μƒνƒœλ₯Ό μ§€μ†μ μœΌλ‘œ 좔적할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.
μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈμ— μ ‘μ†ν•˜κ³  λ‘œκ·Έμ•„μ›ƒν•˜κ±°λ‚˜ 일정 μ‹œκ°„ λ™μ•ˆ ν™œλ™μ΄ μ—†μœΌλ©΄ μ„Έμ…˜(Session)이 μ’…λ£Œλ˜λŠ” λ°©μ‹μœΌλ‘œ, μ„Έμ…˜(Session)은 μ‚¬μš©μžκ°€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 접속해 μžˆλŠ” λ™μ•ˆμ˜ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

2️⃣ λ³€μ‘° 방지.

  • JWT(JSON Web Token)λŠ” μ„œλͺ…(Signature)을 ν¬ν•¨ν•˜κ³  μžˆμ–΄, 토큰이 λ³€μ‘°λ˜μ§€ μ•Šμ•˜μŒμ„ 검증할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν† ν°μ˜ 정보가 변경될 경우, μ„œλͺ… 검증이 μ‹€νŒ¨ν•˜λ―€λ‘œ μœ νš¨ν•˜μ§€ μ•Šμ€ ν† ν°μœΌλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€.

3️⃣ 짧은 수λͺ….

  • JWT(JSON Web Token)λŠ” λ³΄μ•ˆμƒμ˜ 이유둜 일반적으둜 짧은 유효 기간을 κ°–μŠ΅λ‹ˆλ‹€.
  • 만료된 토큰은 λ‹€μ‹œ 인증을 μš”μ²­ν•΄μ•Ό ν•˜λ―€λ‘œ, 주기적으둜 μž¬λ°œκΈ‰μ„ 톡해 λ³΄μ•ˆμ„ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ λΉ„μƒνƒœμ„±(Stateless)

  • JWT(JSON Web Token)λŠ” μ„œλ²„μ— μƒνƒœλ₯Ό μ €μž₯ν•˜μ§€ μ•ŠλŠ” λΉ„μƒνƒœμ„±(Stateless) ν† ν°μ΄λ―€λ‘œ, ν™•μž₯μ„±κ³Ό μ„±λŠ₯이 μš”κ΅¬λ˜λŠ” ν™˜κ²½μ—μ„œ νš¨κ³Όμ μž…λ‹ˆλ‹€.

πŸ€” λΉ„μƒνƒœμ„±(Stateless)λž€ λ¬΄μ—‡μΌκΉŒμš”?

각 μš”μ²­μ΄ 이전 μš”μ²­μ΄λ‚˜ 이후 μš”μ²­κ³Ό λ…λ¦½μ μœΌλ‘œ μ²˜λ¦¬λ˜λŠ” νŠΉμ„±μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
λΉ„μƒνƒœμ μΈ μ‹œμŠ€ν…œμ—μ„œλŠ” 각 μš”μ²­μ— ν•„μš”ν•œ λͺ¨λ“  정보가 μš”μ²­ μžμ²΄μ— 포함 λ˜μ–΄μ•Ό ν•˜λ©°, μ„œλ²„λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•  λ•Œ 이전 μƒνƒœλ‚˜ μ„Έμ…˜(Session)을 κΈ°μ–΅ν•˜μ§€ μ•Šκ³  맀번 μƒˆλ‘œμš΄ μš”μ²­μœΌλ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

  • μ„œλ²„λŠ” 토큰을 ν™•μΈν•˜κΈ°λ§Œ ν•˜λ©΄ λ˜λ―€λ‘œ, μ„Έμ…˜(Session) 관리가 ν•„μš” μ—†λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ ν•©ν•©λ‹ˆλ‹€.

4️⃣ JWT의 단점.

1️⃣ μ„œλ²„μ—μ„œ 토큰 λ¬΄νš¨ν™”κ°€ μ–΄λ ΅λ‹€.

  • JWT(JSON Web Token)λŠ” μ„œλ²„μ—μ„œ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, 토큰을 λ°œκΈ‰ν•œ ν›„ νŠΉμ • 토큰을 μ„œλ²„μ—μ„œ λ¬΄νš¨ν™”ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

πŸ€” 토큰 λ¬΄νš¨ν™”(Token Invalidation)λž€ λ¬΄μ—‡μΌκΉŒμš”?

기쑴에 λ°œκΈ‰λœ 토큰을 더 이상 μœ νš¨ν•˜μ§€ μ•Šλ„λ‘ λ§Œλ“œλŠ” 과정을 μ˜λ―Έν•©λ‹ˆλ‹€.
λ¬΄νš¨ν™”λœ 토큰은 μ‚¬μš©μžκ°€ ν•΄λ‹Ή 토큰을 톡해 μΈμ¦μ΄λ‚˜ κΆŒν•œμ„ μš”μ²­ν•  λ•Œ κ±°λΆ€λ˜λ©°, 주둜 λ‘œκ·Έμ•„μ›ƒ 처리, λ³΄μ•ˆμƒμ˜ 이유, 토큰 μž¬λ°œκΈ‰ μ‹œμ— μ‚¬μš©λ©λ‹ˆλ‹€

  • 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λΈ”λž™λ¦¬μŠ€νŠΈλ‚˜ 짧은 만료 기간을 μ‚¬μš©ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” λΈ”λž™λ¦¬μŠ€νŠΈ(Blacklist)

νŠΉμ • 쑰건을 μΆ©μ‘±ν•˜μ§€ λͺ»ν•΄ 접근이 μ œν•œλœ λͺ©λ‘μœΌλ‘œ, ν—ˆμš©λ˜μ§€ μ•ŠλŠ” ν•­λͺ©μ΄λ‚˜ μ‚¬μš©μžλ₯Ό μ°¨λ‹¨ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
IT λ³΄μ•ˆ, λ„€νŠΈμ›Œν¬, 인증 μ‹œμŠ€ν…œ λ“±μ—μ„œ 자주 ν™œμš©λ˜λ©°, λ³΄μ•ˆκ³Ό κΆŒν•œ 관리λ₯Ό μœ„ν•΄ λΆˆλ²•μ μ΄κ±°λ‚˜ μ‹ λ’°ν•  수 μ—†λŠ” λŒ€μƒμ„ μ‹λ³„ν•˜κ³  μ°¨λ‹¨ν•˜λŠ”λ° 도움이 λ©λ‹ˆλ‹€.

JWTμ—μ„œμ˜ λΈ”λž™λ¦¬μŠ€νŠΈ(Blacklist)λŠ” νŠΉμ • JWT 토큰을 λ¬΄νš¨ν™”ν•˜κΈ° μœ„ν•΄ 차단 λͺ©λ‘μ— μΆ”κ°€ν•˜λŠ” 방식을 μ˜λ―Έν•©λ‹ˆλ‹€.
λΈ”λž™λ¦¬μŠ€νŠΈμ— μΆ”κ°€λœ 토큰은 더 이상 μœ νš¨ν•˜μ§€ μ•Šμ€ κ²ƒμœΌλ‘œ κ°„μ£Όλ˜μ–΄, ν•΄λ‹Ή ν† ν°μœΌλ‘œ 인증 μš”μ²­μ„ 보내면 인증이 κ±°λΆ€λ˜κ±°λ‚˜ 접근이 μ œν•œλ©λ‹ˆλ‹€.
μ΄λŠ” λ‘œκ·Έμ•„μ›ƒ 처리, 토큰 μœ νš¨κΈ°κ°„ 이내에 κ°•μ œ λ¬΄νš¨ν™”, λ³΄μ•ˆμƒ 이유둜 νƒˆμ·¨λœ 토큰을 차단해야 ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.

2️⃣ ν† ν°μ˜ 크기가 크닀.

  • JWT(JSON Web Token)λŠ” μ„œλͺ…(Signature)κ³Ό νŽ˜μ΄λ‘œλ“œ(Payload)λ₯Ό ν¬ν•¨ν•˜λ―€λ‘œ 크기가 큰 νŽΈμž…λ‹ˆλ‹€.
    • μ΄λŠ” λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ— 영ν–₯을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½(Network Traffic)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ „μ†‘λ˜λŠ” λͺ¨λ“  λ°μ΄ν„°μ˜ 흐름을 μ˜λ―Έν•©λ‹ˆλ‹€.
μ΄λŠ” μ‚¬μš©μžκ°€ 인터넷을 톡해 μ£Όκ³ λ°›λŠ” 데이터, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°„μ˜ 톡신, μ„œλ²„ κ°„ 데이터 κ΅ν™˜ λ“± λ„€νŠΈμ›Œν¬ μƒμ˜ λͺ¨λ“  데이터λ₯Ό ν¬ν•¨ν•˜λ©°,
보톡 μ΄ˆλ‹Ή μ „μ†‘λ˜λŠ” λ°μ΄ν„°μ˜ μ–‘μœΌλ‘œ μΈ‘μ •ν•©λ‹ˆλ‹€.

πŸ€” λ°μ΄ν„°μ˜ νλ¦„μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½(Network Traffic)μ—μ„œμ˜ 데이터 흐름은 λ„€νŠΈμ›Œν¬ μƒμ—μ„œ 데이터가 μ „μ†‘λ˜λŠ” κ³Όμ •κ³Ό λ°©ν–₯을 μ˜λ―Έν•©λ‹ˆλ‹€.
λ„€νŠΈμ›Œν¬μ˜ 각 μž₯μΉ˜κ°€ μ„œλ‘œ 데이터λ₯Ό μ£Όκ³ λ°›μœΌλ©° μ΄λ™ν•˜λŠ” 경둜λ₯Ό 톡해 μ‚¬μš©μž κ°„μ˜ 톡신, 데이터 μš”μ²­, 파일 전솑 등이 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.
이 데이터 흐름은 λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ–΄λ–»κ²Œ 데이터가 μ˜€κ°€λŠ”μ§€ 보여주며, 일반적으둜 νŒ¨ν‚·(Packet)μ΄λΌλŠ” λ‹¨μœ„λ‘œ λΆ„ν• λ˜μ–΄ μ „μ†‘λ©λ‹ˆλ‹€.

πŸ€” 데이터 흐름 λ°©ν–₯μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

데이터 흐름은 상ν–₯ 흐름(upload)κ³Ό ν•˜ν–₯ 흐름(download)으둜 κ΅¬λΆ„λ˜λ©°, 일반적으둜 ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 간에 μ£Όκ³ λ°›μŠ΅λ‹ˆλ‹€.

상ν–₯ 흐름(Upload)λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„λ‘œ 데이터λ₯Ό λ³΄λ‚΄λŠ” 경우λ₯Ό λ§ν•˜λ©°, 파일의 μ—…λ‘œλ“œλ₯Ό 예둜 λ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
ν•˜ν–₯ 흐름(Download)λŠ” μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈλ‘œ 데이터λ₯Ό λ³΄λ‚΄λŠ” 경우λ₯Ό λ§ν•˜λ©°, μ›ΉνŽ˜μ΄μ§€ λ‘œλ”©, 파일 λ‹€μš΄λ‘œλ“œ 등을 예둜 λ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” λ„€νŠΈμ›Œν¬ μƒμ—μ„œ 데이터가 μ „μ†‘λ˜λŠ” κ³Όμ •μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

λ„€νŠΈμ›Œν¬ μƒμ—μ„œ 데이터가 μ „μ†‘λ˜λŠ” 과정은 λ°œμ‹ μž(μΆœλ°œμ§€)μ—μ„œ μˆ˜μ‹ μž(λͺ©μ μ§€)κΉŒμ§€ 데이터λ₯Ό νŒ¨ν‚·(Packet)으둜 λ‚˜λˆ„κ³ , 이λ₯Ό μ—¬λŸ¬ λ„€νŠΈμ›Œν¬ μž₯치λ₯Ό 거쳐 μ „λ‹¬ν•˜λŠ” 일련의 절차λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

이 과정은 μ—¬λŸ¬ λ‹¨κ³„λ‘œ λ‚˜λ‰˜λ©°, ν”„λ‘œν† μ½œ μŠ€νƒμ„ 톡해 데이터가 솑신 μž₯μΉ˜μ—μ„œ μˆ˜μ‹  μž₯치둜 μ•ˆμ „ν•˜κ³  μ •ν™•ν•˜κ²Œ μ „μ†‘λ˜λ„λ‘ κ΄€λ¦¬λ©λ‹ˆλ‹€.

πŸ€” ν”„λ‘œν† μ½œ μŠ€νƒ(Protocol Stack)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

λ„€νŠΈμ›Œν¬ ν†΅μ‹ μ—μ„œ 데이터λ₯Ό μ†‘μˆ˜μ‹ ν•˜κΈ° μœ„ν•΄ κ³„μΈ΅λ³„λ‘œ 역할을 λ‚˜λˆ  ν”„λ‘œν† μ½œμ„ κ΅¬μ„±ν•œ μ§‘ν•©μž…λ‹ˆλ‹€.
이 μŠ€νƒμ€ λ„€νŠΈμ›Œν¬ 톡신 κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” λ‹€μ–‘ν•œ μž‘μ—…μ„ λ…Όλ¦¬μ μœΌλ‘œ λ‚˜λˆ„κ³ , 각 계측에 νŠΉμ • 역할을 λΆ€μ—¬ν•˜μ—¬ 데이터λ₯Ό 전솑, 처리, μˆ˜μ‹ ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
각 계측은 독립적이며, μƒν˜Έ μž‘μš©μ„ 톡해 μ΅œμ’…μ μœΌλ‘œ 데이터가 λͺ©μ μ§€μ— λ„λ‹¬ν•©λ‹ˆλ‹€.

3️⃣ νƒˆμ·¨λœ ν† ν°μ˜ μ•…μš© κ°€λŠ₯μ„±.

  • λ§Œλ£Œλ˜μ§€ μ•Šμ€ JWT(JSON Web Token)κ°€ νƒˆμ·¨λœ 경우, κ³΅κ²©μžκ°€ 이λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œ μœ„μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ HTTPSλ₯Ό ν†΅ν•œ 전솑 및 짧은 유효 κΈ°κ°„ 섀정이 μ€‘μš”ν•©λ‹ˆλ‹€.

πŸ€” HTTPSλ₯Ό ν†΅ν•œ μ „μ†‘μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ›Ή λΈŒλΌμš°μ €μ™€ μ„œλ²„ κ°„μ˜ 톡신이 μ•”ν˜Έν™”λœ μƒνƒœλ‘œ μ΄λ£¨μ–΄μ§€λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
HTTPSλŠ” HTTP에 SSL(Secure Sockets Layer) λ˜λŠ” TLS(Transport Layer Security) μ•”ν˜Έν™” 계측을 μΆ”κ°€ν•œ ν”„λ‘œν† μ½œλ‘œ,
μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈμ™€ 주고받은 데이터λ₯Ό 제3μžκ°€ λ³Ό 수 없도둝 λ³΄ν˜Έν•©λ‹ˆλ‹€.
이λ₯Ό 톡해, μ›Ήμ‚¬μ΄νŠΈ 둜그인 정보, μ‹ μš©μΉ΄λ“œ 번호, 개인 정보 λ“± λ―Όκ°ν•œ 데이터가 μ•ˆμ „ν•˜κ²Œ 전솑될 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” HTTP(HyperText Transfer Protocol)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ›Ή λΈŒλΌμš°μ €μ™€ μ›Ή μ„œλ²„ 간에 ν•˜μ΄νΌν…μŠ€νŠΈ(HyperText)λ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•œ ν”„λ‘œν† μ½œλ‘œ, 인터넷 μƒμ—μ„œ 데이터λ₯Ό μ „μ†‘ν•˜λŠ” ν‘œμ€€ κ·œμ•½μž…λ‹ˆλ‹€.

HTTP(HyperText Transfer Protocol)λŠ” μ›Ή νŽ˜μ΄μ§€, 이미지, λΉ„λ””μ˜€μ™€ 같은 λ¦¬μ†ŒμŠ€λ₯Ό μ „μ†‘ν•˜λŠ”λ° μ‚¬μš©λ˜λ©°, ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ ꡬ쑰λ₯Ό 기반으둜 μž‘λ™ν•©λ‹ˆλ‹€.

μ›Ή λΈŒλΌμš°μ €κ°€ ν΄λΌμ΄μ–ΈνŠΈ 역할을 ν•˜κ³ , μ›Ή μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ μ²˜λ¦¬ν•˜μ—¬ ν•„μš”ν•œ 정보λ₯Ό μ œκ³΅ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

πŸ€” ν•˜μ΄νΌν…μŠ€νŠΈ(HyperText)λž€ λ¬΄μ—‡μΌκΉŒμš”?

νŠΉμ • 단어, λ¬Έμž₯, 이미지 등을 ν΄λ¦­ν•˜λ©΄ κ΄€λ ¨λœ λ‹€λ₯Έ λ¬Έμ„œλ‚˜ νŽ˜μ΄μ§€λ‘œ μ—°κ²°λ˜λŠ” λ°©μ‹μ˜ ν…μŠ€νŠΈλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
μ›Ήμ˜ 핡심적인 κ°œλ…μœΌλ‘œ, ν•˜μ΄νΌν…μŠ€νŠΈ(HyperText)λŠ” μ‚¬μš©μžκ°€ 링크λ₯Ό ν΄λ¦­ν•˜μ—¬ μ„œλ‘œ κ΄€λ ¨λœ μ •λ³΄λ‚˜ νŽ˜μ΄μ§€λ‘œ 자유둭게 이동할 수 있게 λ„μ™€μ€λ‹ˆλ‹€.
일반 ν…μŠ€νŠΈμ™€ 달리, ν•˜μ΄νΌν…μŠ€νŠΈ(HyperText)λŠ” λ¬Έμ„œ κ°„μ˜ 관계λ₯Ό μ‰½κ²Œ μ—°κ²°ν•˜κ³  μ°Έμ‘°ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ λΉ„μ„ ν˜•μ μΈ 정보 탐색을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

πŸ€” SSL(Secure Sockets Layer)λž€ λ¬΄μ—‡μΌκΉŒμš”?

λ„€νŠΈμ›Œν¬ μƒμ—μ„œ 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ μ „μ†‘ν•˜κΈ° μœ„ν•œ λ³΄μ•ˆ ν”„λ‘œν† μ½œλ‘œ, ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 데이터 톡신을 μ•”ν˜Έν™”ν•˜μ—¬ λ°μ΄ν„°μ˜ κΈ°λ°€μ„±, 무결성, 인증을 보μž₯ν•©λ‹ˆλ‹€.

SSL(Secure Sockets Layer)은 μ›Ήμ‚¬μ΄νŠΈκ°€ HTTPS ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•  수 있게 ν•˜λ©°, 주둜 인터넷 μƒμ˜ λ―Όκ°ν•œ 정보(예: 둜그인 정보, 결제 정보) λ³΄ν˜Έμ— μ‚¬μš©λ©λ‹ˆλ‹€.

πŸ€” TLS(Transport Layer Security)λž€ λ¬΄μ—‡μΌκΉŒμš”?

인터넷 μƒμ—μ„œ 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ μ „μ†‘ν•˜κΈ° μœ„ν•œ λ³΄μ•ˆ ν”„λ‘œν† μ½œλ‘œ, SSL(Secure Sockets Layer)의 후속 λ²„μ „μž…λ‹ˆλ‹€.
TLS(Transport Layer Security)λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 데이터 전솑을 μ•”ν˜Έν™”ν•˜μ—¬ κΈ°λ°€μ„±κ³Ό 무결성을 보μž₯ν•˜λ©°, ν˜„μž¬ λŒ€λΆ€λΆ„μ˜ HTTPS 연결에 μ‚¬μš©λ©λ‹ˆλ‹€.
TLS(Transport Layer Security)λŠ” 데이터가 쀑간에 νƒˆμ·¨λ˜κ±°λ‚˜ μ‘°μž‘λ˜λŠ” 것을 λ°©μ§€ν•˜μ—¬, λ―Όκ°ν•œ 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ 전솑할 수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€.

5️⃣ JWT의 μ‚¬μš© μ˜ˆμ‹œ(Java)

  • Javaμ—μ„œ JWTλ₯Ό μ‚¬μš©ν•˜λ €λ©΄, JJWT(Java JWT) 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ 토큰을 μƒμ„±ν•˜κ³  검증할 수 μžˆμŠ΅λ‹ˆλ‹€.
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.Claims;

public class JwtExample {
    private static final String SECRET_KEY = "mySecreKey";
    
    // JWT 토큰 생성
    public static String createToken(String subject) {
        return Jwts.builder()
            .setSubject(subject)            // μ‚¬μš©μž μ‹λ³„μž(id)
            .setIssuedAt(new Date())        // λ°œν–‰ μ‹œκ°„
            .setExpiration(new Date(System.currentTimeMillis() * 3600000)) // 만료 μ‹œκ°„(expiration)-1μ‹œκ°„ ν›„
            .signWith(SignatureAlgorithm.HS256, SECRET_KEY) // μ„œλͺ… μ•Œκ³ λ¦¬μ¦˜ 및 ν‚€
            .compact();
    }
    
    // JWT 토큰 검증 및 정보 μΆ”μΆœ
    public static Claims parseToken(String token) {
        return Jwts.parse()
            .setSigningKey(SECRET_KEY)
            .parseClaimsJwt(token)
            .getBody();
    }
    
    public static void main(String[] args) {
        // 토큰 생성
        String token = createToken("user123");
        System.out.println("JWT Token: " + token);
        
        // 토큰 검증 및 정보 μΆ”μΆœ
        Claims claims = parseToken(token);
        System.out.println("Subject: " + clamis.getSubject());
    }
}

πŸ‘‰ μ„€λͺ….

  • createToken λ©”μ„œλ“œλŠ” μ‚¬μš©μž 정보λ₯Ό 기반으둜 JWT 토큰을 μƒμ„±ν•©λ‹ˆλ‹€.
  • parseToken λ©”μ„œλ“œλŠ” μƒμ„±λœ 토큰을 κ²€μ¦ν•˜κ³  νŽ˜μ΄λ‘œλ“œμ˜ 정보λ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.
  • 이 μ˜ˆμ œμ—μ„œλŠ” user123μ΄λΌλŠ” μ‚¬μš©μž μ‹λ³„μžλ‘œ 토큰을 μƒμ„±ν•˜κ³ , μƒμ„±λœ ν† ν°μ—μ„œ μ‚¬μš©μž μ‹λ³„μž(subject)λ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.

6️⃣ JWT의 μ‚¬μš© 사둀.

1️⃣ μ‚¬μš©μž 인증.

  • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 둜그인 ν›„ μ‚¬μš©μž 정보λ₯Ό ν™•μΈν•˜λŠ”λ° JWTλ₯Ό μ‚¬μš©ν•˜μ—¬, 좔가적인 μ„Έμ…˜ 관리 없이 인증을 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ API 인증.

  • RESTful APIμ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ JWTλ₯Ό ν¬ν•¨ν•˜μ—¬ μš”μ²­μ„ 보내면, μ„œλ²„λŠ” 토큰을 κ²€μ¦ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ˜ κΆŒν•œμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ€” RESTful APIλž€ λ¬΄μ—‡μΌκΉŒμš”?

REST(Representational State Transfer) μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌμ„ 기반으둜 μ„€κ³„λœ API둜, μ›Ήμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 간에 λ¦¬μ†ŒμŠ€λ₯Ό 효율적으둜 μ£Όκ³ λ°›κΈ° μœ„ν•œ κ·œμΉ™κ³Ό 원칙을 λ”°λ₯΄λŠ” APIμž…λ‹ˆλ‹€.

RESTful APIλŠ” HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ μ›Ήμ˜ λ¦¬μ†ŒμŠ€(Resource)λ₯Ό URL을 톡해 μ ‘κ·Όν•˜κ³ , HTTP λ©”μ„œλ“œ(GET, POST, PUT, DELETE λ“±)λ₯Ό μ‚¬μš©ν•΄ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€λ₯Ό μ‘°μž‘ν•©λ‹ˆλ‹€.

πŸ€” REST(Representational State Transfer) μ•„ν‚€ν…μ²˜λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ›Ή 기반의 λΆ„μ‚° μ‹œμŠ€ν…œμ„ μ„€κ³„ν•˜κΈ° μœ„ν•œ μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌλ‘œ, λ¦¬μ†ŒμŠ€(Resource)λ₯Ό 기반으둜 ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ μƒνƒœ 정보λ₯Ό μ£Όκ³ λ°›λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

RESTλŠ” HTTP ν”„λ‘œν† μ½œμ„ 기반으둜 μ„€κ³„λ˜μ—ˆμœΌλ©°, μ›Ήμ—μ„œ 데이터λ₯Ό 효율적이고 ν™•μž₯ κ°€λŠ₯ν•˜κ²Œ μ£Όκ³ λ°›κΈ° μœ„ν•΄ ꢌμž₯λ˜λŠ” 원칙과 μ œμ•½ 쑰건을 μ •μ˜ν•©λ‹ˆλ‹€.

REST μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌμ€ 주둜 μ›Ή API 섀계에 적용되며, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ˜ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  λ•Œ 일관성 μžˆλŠ” 방식을 μ œκ³΅ν•©λ‹ˆλ‹€.
RESTλŠ” νŠΉμ •ν•œ ν‘œμ€€μ΄λ‚˜ ν”„λ‘œν† μ½œμ΄ μ•„λ‹ˆλ©°, 섀계 원칙에 λ”°λ₯Έ μ›Ή μ„œλΉ„μŠ€ ꡬ쑰λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

πŸ€” RESTμ—μ„œμ˜ λ¦¬μ†ŒμŠ€(Resource)λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ›Ήμ—μ„œ κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλŠ” λͺ¨λ“  λ°μ΄ν„°λ‚˜ 객체λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
REST μ•„ν‚€ν…μ²˜μ—μ„œλŠ” λ¦¬μ†ŒμŠ€(Resource)λ₯Ό 톡해 μ›Ή μ„œλΉ„μŠ€κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ œκ³΅ν•˜λŠ” λ°μ΄ν„°λ‚˜ κΈ°λŠ₯을 μΆ”μƒν™”ν•œ 개체둜, λ¦¬μ†ŒμŠ€λŠ” URI(Uniform Resource Identifier)λ₯Ό 톡해 κ³ μœ ν•˜κ²Œ μ‹λ³„λ©λ‹ˆλ‹€.
RESTful APIμ—μ„œλŠ” μ΄λŸ¬ν•œ λ¦¬μ†ŒμŠ€(Resource)에 λŒ€ν•œ 데이터λ₯Ό HTTP λ©”μ„œλ“œ(GET, POST, PUT, DELETE λ“±)λ₯Ό 톡해 μ ‘κ·Όν•˜κ³  μ‘°μž‘ν•©λ‹ˆλ‹€.

πŸ€” URI(Uniform Resource Identifier)λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ›Ήμ—μ„œ νŠΉμ • λ¦¬μ†ŒμŠ€λ₯Ό μ‹λ³„ν•˜κ³  μœ„μΉ˜λ₯Ό μ§€μ •ν•˜λŠ” κ³ μœ ν•œ λ¬Έμžμ—΄μž…λ‹ˆλ‹€.
μ›Ή λ¦¬μ†ŒμŠ€λ₯Ό μœ μΌν•˜κ²Œ μ‹λ³„ν•˜μ—¬ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ„€κ³„λœ URI(Uniform Resource Identifier)λŠ” μ›Ή μ£Όμ†Œλ₯Ό 지정할 λ•Œ μ‚¬μš©λ˜λ©°,
μš°λ¦¬κ°€ ν”νžˆ μ ‘ν•˜λŠ” URL도 URI의 ν•œ μ’…λ₯˜μž…λ‹ˆλ‹€.
URIλŠ” RESTful APIμ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό μ‹λ³„ν•˜λŠ” μ€‘μš”ν•œ μš”μ†Œλ‘œ, μ‚¬μš©μžκ°€ μ›ν•˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό μ •ν™•νžˆ 찾을 수 있게 ν•©λ‹ˆλ‹€.

πŸ€” λΆ„μ‚° μ‹œμŠ€ν…œ(Distributed System)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ—¬λŸ¬ λŒ€μ˜ μ»΄ν“¨ν„°λ‚˜ μ„œλ²„κ°€ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ—°κ²°λ˜μ–΄ ν•˜λ‚˜μ˜ μ‹œμŠ€ν…œμ²˜λŸΌ λ™μž‘ν•˜λŠ” ꡬ쑰λ₯Ό λ§ν•©λ‹ˆλ‹€.
λΆ„μ‚° μ‹œμŠ€ν…œ(Distributed System)μ—μ„œλŠ” ν•˜λ‚˜μ˜ μž‘μ—…μ„ μ—¬λŸ¬ μž₯μΉ˜μ—μ„œ λ‚˜λˆ„μ–΄ μ²˜λ¦¬ν•˜μ—¬, 데이터 처리 속도와 νš¨μœ¨μ„±μ„ 높이고, 단일 μž₯μ•  지점을 쀄여 μ‹œμŠ€ν…œμ˜ 신뒰성을 κ°•ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ κ°„μ˜ 톡신.

  • JWTλŠ” μ„œλ²„ κ°„ 인증에도 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ—μ„œ 각 μ„œλΉ„μŠ€κ°€ λ…λ¦½μ μœΌλ‘œ JWTλ₯Ό 검증할 수 μžˆμœΌλ―€λ‘œ, μ•ˆμ „ν•˜κ³  효율적인 인증 관리가 κ°€λŠ₯ν•©λ‹ˆλ‹€.

πŸ€” λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜(Microservices Architecture)λž€ λ¬΄μ—‡μΌκΉŒμš”?

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ—¬λŸ¬ 개의 μž‘μ€ 독립적인 μ„œλΉ„μŠ€λ‘œ λ‚˜λˆ μ„œ κ°œλ°œν•˜κ³  λ°°ν¬ν•˜λŠ” 방식을 μ˜λ―Έν•©λ‹ˆλ‹€.
각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€(Microservices)λŠ” νŠΉμ • κΈ°λŠ₯μ΄λ‚˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ…λ¦½μ μœΌλ‘œ μˆ˜ν–‰ν•˜λ©°, μ„œλ‘œ λ…λ¦½μ μœΌλ‘œ 개발, 배포, ν™•μž₯, μœ μ§€λ³΄μˆ˜ν•  수 μžˆλŠ” νŠΉμ„±μ΄ μžˆμŠ΅λ‹ˆλ‹€.
이 μ•„ν‚€ν…μ²˜λŠ” λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μœ μ—°μ„ κ³Ό ν™•μž₯성을 κ·ΉλŒ€ν™”ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

7️⃣ μš”μ•½.

  • JWT(JSON Web Token)은 μ•ˆμ „ν•˜κ³  κ°„νŽΈν•œ 인증과 정보 전솑을 μœ„ν•œ ν† ν°μœΌλ‘œ, 디지털 μ„œλͺ…을 톡해 토큰이 λ³€μ‘°λ˜μ§€ μ•Šμ•˜μŒμ„ 검증할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • JWTλŠ” 주둜 μ‚¬μš©μž 인증과 API μ ‘κ·Ό μ œμ–΄ 등에 μ‚¬μš©λ˜λ©°, 자기 포함 ν† ν°μ΄λ―€λ‘œ λ³„λ„μ˜ μ„Έμ…˜ μ €μž₯μ†Œκ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • Javaμ—μ„œ JWTλ₯Ό μƒμ„±ν•˜κ³  κ²€μ¦ν•˜λ €λ©΄ JJWT λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 같은 도ꡬλ₯Ό μ‚¬μš©ν•  수 있으며, 이λ₯Ό 톡해 κ°„νŽΈν•˜κ²Œ 토큰을 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.