🧾 인증(Authentication)과 인가(Authorization)

용어 설명
인증 "당신이 누구인가?"를 확인하는 과정 (ex. 로그인)
인가 "당신이 이 리소스를 사용할 권한이 있는가?"를 확인하는 과정 (ex. 관리자 권한 확인)

👉 인증 후에 인가가 이뤄집니다.


🧺 세션(Session)이란?

세션은 서버가 사용자의 정보를 저장하고 기억하기 위한 수단입니다.

❗ 왜 필요한가요?

⚙️ 세션 기반 로그인 흐름

[1] 사용자가 로그인 요청
[2] 서버가 사용자 인증 성공
[3] 서버가 세션ID 생성 및 사용자 정보와 매핑하여 저장
[4] 세션ID를 클라이언트에게 Cookie로 전달
[5] 클라이언트는 이후 요청 시 세션ID를 포함시킴
[6] 서버는 세션ID를 통해 사용자 정보를 확인
sequenceDiagram
  participant Client
  participant Server

  Client->>Server: 로그인 요청
  Server->>Server: 사용자 인증 처리
  Server->>Server: 세션 ID 생성 및 사용자 정보 저장
  Server-->>Client: Set-Cookie: 세션 ID
  Client->>Server: 요청 (세션 ID 포함 쿠키)
  Server->>Server: 세션 ID로 사용자 정보 조회
  Server-->>Client: 응답 처리

🔑 서버가 사용자 상태를 기억합니다.


🪪 JWT(Json Web Token)란?

JWT는 클라이언트가 인증 정보를 직접 보관하는 Stateless(무상태) 방식입니다.

📦 구조: Header.Payload.Signature

부분 설명
Header 토큰 타입, 해시 알고리즘
Payload 사용자 정보(Claims)
Signature 위조 방지를 위한 서명

⚙️ JWT 로그인 흐름

[1] 사용자가 로그인 요청
[2] 서버가 인증 성공 → JWT 생성
[3] 클라이언트가 JWT를 받아 저장 (보통 LocalStorage나 Cookie)
[4] 요청 시 Authorization 헤더에 JWT 포함
[5] 서버는 토큰을 검증하여 사용자 식별