세션, 토큰, 쿠키 비교! 어떤 인증 방식이 좋을까? 🤔

나나's Brain·2024년 12월 17일
0

개념Study

목록 보기
9/21
post-thumbnail

📁 로그인 인증 방식: 세션(Session) VS 토큰(Token)

웹 애플리케이션에서 사용자의 인증을 처리하는 방식은 크게 세션 방식토큰 방식으로 나뉜다. 두 방식의 차이점과 각각의 장단점을 글로 정리해볼겸 알아보자. 알거같으면서도 말로 내뱉지 못하는.. 제대로 설명해보자구 @!!@!@


✅ 인증과 인가의 차이 (Authentication vs Authorization)

구분인증 (Authentication)인가 (Authorization)
목적사용자의 신원 확인사용자의 권한 부여
주요 개념"너 누구야?" → 사용자가 누구인지 확인"너 할 수 있어?" → 사용자가 무엇을 할 수 있는지 확인
예시로그인 (ID와 비밀번호 확인)관리자 권한 확인, 특정 페이지 접근 권한

인증과 인가에 대한 개념 차이는 무조건 자동으로 나와야겠지??????? 음음 그럼 .


✅ Stateless vs Stateful

세션토큰의 차이는 상태 관리 방식에서도 나타난다.

구분Stateless (토큰)Stateful (세션)
서버 상태서버는 상태를 저장하지 않음서버가 사용자의 상태(Session)를 저장
확장성확장성 뛰어남 (여러 서버 간 공유 필요 없음)서버 간 세션 공유가 필요하므로 확장성 낮음
사용 사례REST API, 마이크로서비스 구조단일 서버 기반의 시스템

여기서 HttpOnly에 토큰을 담는 것과 서버 상태 저장은 별개의 개념이라는것을 알아두자 잠깐 헷갈렸어요 .. 나만 그랬을 수도 ;; 열심히 공부하겠습니다...
Stateless는 서버가 클라이언트의 상태를 저장하지 않는다는 의미이다.
HttpOnly 쿠키에 토큰을 저장하는 것은 토큰 저장 방식 중 하나일 뿐 !!


자자 이제 다시 정리하려는걸로 넘어와서 !!!!!!!!!!!!!!!!!!!!

➡️ 로그인 인증 개념

로그인을 하면 서버가 유저에게 입장권을 하나 발급해주는데,
입장권은 서버가 유저를 식별하는 수단이라고 생각하면 된다.

  • 세션 방식: 입장권에 발급 번호만 존재
  • 토큰 방식: 입장권에 사용자 관련 정보가 포함됨

🔖 세션 방식이란?

세션 방식은 서버가 세션 저장소(Session Store) 에 로그인한 사용자의 정보를 저장하고 관리하는 방식이다.

🔧 작동 원리

  1. 사용자가 로그인하면 서버가 세션 ID를 발급
  2. 서버는 세션 ID를 세션 저장소에 저장하고, 사용자는 이 ID를 쿠키로 저장
  3. 사용자가 서버에 요청할 때마다 이 세션 ID를 서버에 보내고,
  4. 서버는 세션 저장소에서 이 ID를 찾아 유효한지 확인한 후 인증

⚠️ 특징

  • 토큰 정보: 세션 ID만 존재 → 사용자 정보는 서버 세션 저장소에 별도로 저장
  • 서버 부담: 사용자가 많아질수록 서버에 저장된 세션을 일일이 확인해야 하므로 서버 부하가 커질 수 있음
  • 보안: 세션은 서버에 저장되므로 유출될 가능성이 낮음
  • 확장성: 서버가 늘어날 때 세션 데이터를 공유해야 하므로 확장성이 떨어질 수 있음

🔖 토큰 방식이란?

토큰 방식은 로그인 후 서버가 발급하는 토큰(Token)에 사용자의 정보를 담아서 인증하는 방식이다.

🔧 작동 원리

  1. 사용자가 로그인하면 서버가 JWT 토큰을 발급
  2. 이 토큰에는 사용자의 정보(이름, 이메일, 유효기간 등)가 포함
  3. 사용자는 이 토큰을 클라이언트 측에 저장하고, 요청 시마다 서버에 전송
  4. 서버는 토큰이 유효한지만 확인하고 요청을 처리

⚠️ 특징

  • 토큰 정보: 사용자 정보(이름, 이메일, 유효기간 등)가 토큰에 포함됨
  • 서버 부담: 세션 저장소가 필요하지 않으므로 서버의 부담이 줄어듦
  • 확장성: 서버 간 상태를 공유하지 않아도 되므로 확장성이 뛰어남
  • 보안: 토큰이 유출되면 사용자 정보를 확인할 수 있으므로 주의가 필요함

💡 세션 방식 VS 토큰 방식 비교

구분세션 방식토큰 방식
저장 위치서버 세션 저장소클라이언트 (로컬 스토리지, 쿠키 등)
정보 포함세션 ID만 포함 (사용자 정보는 서버에 저장)사용자 정보와 만료 기간 등이 포함된 토큰
서버 부하세션 저장소에 접근해야 하므로 부하가 클 수 있음.토큰만 검증하면 되므로 서버 부하가 적음
확장성서버 간 세션 공유 필요 → 확장성 낮음서버 상태를 공유할 필요 없음 → 확장성 뛰어남
보안세션은 서버에 저장되므로 상대적으로 안전함.토큰 유출 시 사용자 정보 노출 가능 → 주의 필요
유효기간 관리세션 저장소에서 만료 시간 관리토큰 자체에 유효 기간이 포함됨

💥 세션과 토큰: 어떤 방식을 선택할까?

  • 세션 방식: 서버가 중앙에서 인증을 관리해야 하고 보안이 중요한 경우에 적합하다.
    (예: 보안이 중요한 사내 시스템, 인트라넷 등)

  • 토큰 방식: 확장성이 중요하고 분산된 서버 환경에서 빠르게 인증을 처리해야 하는 경우에 적합하다.
    (예: 모바일 앱, REST API 기반 서비스 등)

💡 정리

  • 세션 방식서버가 사용자 정보를 직접 관리하며 안정적이지만, 서버 부하가 발생할 수 있다.
  • 토큰 방식JWT 토큰에 사용자 정보를 담아 서버 부담을 줄이고 확장성을 높일 수 있다.

여기서???????????? 로그인 인증에 관련된 개념을 보완하고 더 확장하기 위해 몇 가지 추가 개념과 키워드를 정리해보자.

🍪 쿠키(Cookie)란?

쿠키는 웹 브라우저에 저장되는 작은 데이터 조각이다.
웹 서버가 사용자의 브라우저에 데이터를 저장하면, 이후 요청 시 그 데이터를 서버로 다시 보내어 사용자의 상태를 유지하거나 특정 정보를 기억하는 데 사용된다.

📁 쿠키(Cookie)와 세션(Session)의 차이

구분쿠키세션
저장 위치클라이언트 (브라우저의 쿠키 저장소)서버 세션 저장소 (세션 ID만 클라이언트로 전송)
데이터키-값 형태의 데이터를 저장서버에 저장하고 클라이언트에 세션 ID만 전달
유효 기간브라우저 종료 시 삭제 or 만료 기간 설정 가능설정한 시간 또는 브라우저 종료 시까지 유지
보안클라이언트에 저장되므로 보안이 상대적으로 약함서버에 저장되므로 비교적 안전하지만 세션 ID 노출 시 위험
용도로그인 상태 유지, 사용자 설정 값 유지 등사용자 인증 및 상태 관리

💡 쿠키를 기반으로 세션 ID를 저장하면 세션이 작동하며, 세션과 쿠키는 함께 사용되기도 한다.

📁 토큰 보안 강화 (Token Security)

토큰 방식에서 보안을 강화하기 위한 몇 가지 개념:

  1. Refresh Token

    • Access Token의 유효 기간이 짧기 때문에 새로운 Access Token을 발급하는 데 사용
    • Refresh Token은 더 긴 유효 기간을 가짐
  2. 토큰 저장소

    • 로컬 스토리지: XSS 공격에 취약할 수 있음
    • 쿠키(HttpOnly): 서버만 접근 가능하도록 쿠키에 저장하여 보안 강화

    다음 벨로그는 HttpOnly 활용하는걸 정리해볼건데 뭣도모르고 하면 망할수도있다. 조심하자..

  3. 토큰 서명

    • 토큰이 변조되지 않았는지 검증하기 위해 비밀키로 서명
    • HMAC, RSA 등의 알고리즘 사용

✅ OAuth와 OpenID Connect (OIDC)

외부 서비스의 계정을 사용하여 로그인을 처리하는 소셜 로그인에 주로 사용된다.
(예: 구글, 페이스북, 카카오 로그인)

1. OAuth 2.0

  • 목적: 인증(Authorization) → 권한 부여
  • 동작 원리:
    1. 유저가 외부 서비스(구글, 카카오)에 로그인
    2. 서비스가 액세스 토큰(Access Token)을 발급
    3. 유저는 해당 토큰을 통해 다른 API를 사용

2. OpenID Connect (OIDC)

  • 목적: 인증(Authentication) → 사용자 정보 확인
  • OAuth 2.0을 기반으로 사용자 정보를 제공
  • ID 토큰(ID Token)을 통해 사용자의 로그인 상태 및 정보 제공

✅ Multi-Factor Authentication (MFA)

보안을 강화하기 위해 2단계 인증 또는 다중 인증 방식을 도입하는 경우가 많다.

  • 1단계: 비밀번호
  • 2단계: 이메일 코드, SMS 인증, OTP(One-Time Password), 생체 인식

예시: 구글 OTP, 카카오페이 인증


💡 마무리

로그인 인증 방식에는 세션 방식토큰 방식이 있으며, 각각의 특징과 보안 요구사항에 맞게 선택해야 한다. 또한, OAuth, JWT, Refresh Token 등 다양한 개념을 함께 적용하면 확장성과 보안을 모두 만족할 수 있다.

추가로 MFA를 통해 보안을 강화하고, Stateless 구조로 인증 서버를 설계하면 확장성 있는 시스템 구축이 가능하다.

🚩 세션 vs 토큰 핵심 요약

  • 세션: 서버가 상태 관리 → Stateful, 서버 부담 높음, 보안 강점
  • 토큰: 클라이언트에 상태 저장 → Stateless, 확장성 뛰어남, 유출 위험 주의
profile
"로컬에선 문제없었는데…?"

0개의 댓글