[Server] 토큰 기반 인증 VS 세션 기반 인증

2025. 12. 7. 23:45·Knowledge/개발지식

로그인/인증을 구현하다 보면

“JWT 쓸까? 세션으로 쓸까?”

이 고민을 한 번쯤은 하게 된다.

어떤 방법이 더 효율적이고 좋은 방법일지 항상 고민하다

막상 구현하고 비교해보니 철학 자체가 다르다는 걸 깨달았다.

그래서 이번 2편에서는

토큰 기반 인증과 세션 기반 인증을 비교해볼까 한다.

 


 

1. 둘의 차이점..?

딱 한 문장으로 말하면 자면 음..

서버가 인증 상태를 기억하는가 안하는가.

세션 기반 인증

→ 서버가 나의 로그인 상태를 기억하고 있음 (Stateful)

토큰 기반(JWT) 인증

→ 서버는 아무것도 기억하지 않음. 클라이언트가 인증 정보 들고 다님 (Stateless)

철학부터 달라서, 구조, 운영방식부터 서로 다르다.


 

2. 세션 기반 인증 흐름

세션 기반 인증은 밑과 같이 흘러간다

로그인 성공
  ↓
서버: "해당 유저 로그인했음" 하고 세션에 저장
  ↓
클라이언트에 세션 ID 쿠키 발급 (JSESSIONID)
  ↓
이후 요청마다 세션 ID 자동 전송
  ↓
서버는 세션 저장소에서 유저 정보 꺼내서 인증

서버가 로그인 상태를 들고 있는 형태다.

그래서…

  • 보안 제어가 쉽고
  • 세션 삭제하면 바로 로그아웃 처리됨

대신 서버를 여러 대 띄우면 문제가 생긴다.

“어..? 얘는 서버1에선 로그인인데 서버2에선 로그인이 아니네?”

그래서 Redis 같은 곳에 세션을 공유할 필요성이 있다.

 


 

3. 토큰 기반(JWT) 인증 흐름

JWT는 이렇게 다르게 한다:

로그인 성공
  ↓
서버가 JWT 생성해서 클라이언트에게 줌
  ↓
서버는 아무것도 기억하지 않음
  ↓
클라이언트가 JWT를 들고 다님
  ↓
요청마다 JWT 검증해서 인증 처리

서버가 인증 상태를 저장하지 않기 때문에

확장성, 성능, 서버 증설이 훨씬 편해진다.

하지만 문제는

토큰이 탈취되면?

→ 서버는 알아낼 방법이 없다…

그래서 실제로는 Refresh Token 정책, 만료 전략 등을 꼭 신경 써야 한다.

⇒ 전략이 다양하다

 


 

4. 장단점

세션 기반 인증

세션 기반 인증 장점

  • 서버가 인증 상태를 들고 있으니 보안 제어가 직관적
  • 세션 탈취? → 서버에서 세션 삭제하면 끝
  • Spring Security 기본 기능과 호환이 잘된다
  • CSRF 같은 공격은 기본 설계에서 커버하기 쉽다

세션 기반 인증 단점

  • 서버 확장 시 세션 공유 필요
  • 모바일/SPA와 연동할 때 구조가 조금 답답함
  • API 서버 다중화하려면 고려할 게 많음
  • 확장에선 닫혀있다

토큰 기반 인증(JWT)

토큰 기반 인증 장점

  • 완전 Stateless → 서버 여러 개 띄우기 최고
  • 인증 속도 매우 빠름
  • 프론트/앱/게이트웨이 등 어디서든 쓰기 좋음
  • 마이크로서비스 환경에 특히 잘 맞음

토큰 기반 인증 단점

  • Refresh Token 탈취는 정말 크리티컬
    • 전략이 매우 중요한거같따
  • 만료/재발급/블랙리스트 정책을 설계해야 한다
  • 보관 위치(LocalStorage vs Cookie) 논쟁이 끝이 없음

 


 

5. 결국 뭐가 더 좋을까..?

가끔 보면 이런 질문을 한다.

“요즘은 JWT 쓰는 게 맞죠?”

“세션 기반 인증은 구식 아닌가요?”

위 질문 자체가 잘못된 질문인거같다.

나도 처음에 앱 개발로 개발로 접하며 JWT로 자연스럽게 빠져들었었는데,

무조건 JWT가 옳다. 세션이 옳다. 가 아니라 상황에 따라 다른 방식을 사용할 수도 있다..!

세션 기반 인증이 더 괜찮은 선택인 경우

  • 내부 어드민, 관리자 페이지
  • 사용자 수가 적고 안정성이 중요한 서비스
  • 서버 확장은 크게 고려하지 않을 때
  • Spring Security 기본 기능을 그대로 쓰고 싶을 때

JWT 기반 인증이 더 좋은 상황

  • 모바일 앱 + API 서버 조합
  • React/Vue SPA + 백엔드 분리 구조
  • 서버를 자주 확장하는 서비스
  • 마이크로서비스(MSA) 환경

즉, 정리하자면

세션 = 안정적이고 직관적

JWT = 확장성·유연성이 매우 뛰어남

 


 

마무리

토큰 기반 인증과 세션 기반 인증은 우열의 문제가 아니라 특성의 차이다

  • 서버가 인증 상태를 들고 있으면 → 세션
  • 클라이언트가 인증 정보를 들고 다니면 → JWT

이 차이 하나로

확장성, 보안 전략, API 설계 방식까지 전부 달라진다.

다음 편에서는 인증의 핵심 논쟁인…

“JWT는 어디에 저장하는 게 안전할까?” LocalStorage? Cookie? Refresh Token 탈취 위험은?”

이 주제를 정리해볼까 한다

다음 주제는 아직도 많이 헷갈린다 ㅠ

'Knowledge > 개발지식' 카테고리의 다른 글

[CS] 동시성과 병렬성  (0) 2025.11.01
[단기 공기업 필기 준비] 데이터베이스  (1) 2025.10.26
'Knowledge/개발지식' 카테고리의 다른 글
  • [CS] 동시성과 병렬성
  • [단기 공기업 필기 준비] 데이터베이스
ryuwon
ryuwon
여러 개발 정보 끄적이고 있습니닷..
  • ryuwon
    이름 없는 블로그
    ryuwon
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (34)
      • Series (0)
      • Programming (1)
        • Java (1)
        • C (0)
        • Swift (0)
      • Framework & Library (8)
        • Spring (6)
        • Spring Boot (2)
      • Data & ORM (0)
        • RDBMS (0)
        • NoSQL (0)
        • ORM (0)
      • Infra & DevOps (1)
        • Cloud (0)
        • DevOps (1)
        • Infra (0)
      • Knowledge (4)
        • 자료구조 (1)
        • 알고리즘 (3)
        • 운영체제 (2)
        • 네트워크 (1)
        • 아키텍쳐 및 디자인 패턴 (0)
        • 개발지식 (3)
      • Testing (0)
      • Security & System (0)
      • Project (5)
      • Writing (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OCI
    Spring Profile
    K3S
    찐빵
    네트워크
    프로젝트
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.5
ryuwon
[Server] 토큰 기반 인증 VS 세션 기반 인증
상단으로

티스토리툴바