📢 공지합니다
이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.
https://balhae.tistory.com/274
쿠키 VS 세션
오늘은 기술면접 단골 질문인 쿠키vs 세션에 관해서 정확한 포스팅을 하겠습니다.https://balhae.tistory.com/65 HTTP(CH7)최코딩의 개발 HTTP(CH7) 본문 스프링/HTTP HTTP(CH7) seung_ho_choi.s 2023. 5. 28. 19:39balhae.tistor
balhae.tistory.com
지난 시간에 쿠키와 세션에 대해 알아봤으면 이번에는 JWT 와 세션 그리고 웹 서비스 유형을 알아보겠다.
인증(Authentication)은 사용자의 신원을 확인하는 과정입니다. 즉, "당신이 누구인지" 확인하는 절차로, 로그인을 통해 사용자 ID와 비밀번호를 검증하는 작업이 대표적인 예입니다.
인가(Authorization)는 인증된 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지 확인하는 과정입니다. 사용자가 누구인지 확인한 후, "무엇을 할 수 있는지" 결정하는 단계입니다.
서버가 클라이언트의 상태 정보를 서버 측에 저장하고 관리하는 방식입니다.
사용자(고객)가 로그인(영화 무제한권 구매)하면 서버(키오스크)는 세션 ID를 생성합니다.
이 세션 ID는 마치 영화 티켓을 반으로 나눠 한 쪽은 고객에게 주고(쿠키에 저장), 다른 한 쪽은 서버(영화관 직원의 책상)에 보관하는 것과 같습니다.
사용자가 요청할 때마다 쿠키에 저장된 세션 ID를 서버에 전달하고, 서버는 저장된 세션 정보와 비교하여 인증을 수행합니다.
서버는 모든 클라이언트의 세션 상태를 메모리에 저장해야 하므로 stateful(상태 유지)한 특성을 가집니다.
서버 장애 발생 시 메모리에 저장된 세션 정보가 모두 소실될 수 있습니다.
확장성 측면에서 서버가 늘어날 경우 세션 정보를 동기화하는 추가 작업이 필요합니다.
디스크나 데이터베이스에 세션을 저장할 수 있지만, 이는 매 요청마다 I/O 작업이 발생하여 성능에 영향을 줄 수 있습니다.
필요한, 정보를 토큰 자체에 포함시켜 클라이언트에 전달하는 인증 방식입니다.
사용자가 로그인하면 서버는 JWT 토큰을 발급합니다.
이 토큰은 반으로 나누지 않고, 바코드(서명)가 포함된 완전한 티켓으로 사용자에게 전달됩니다.
사용자가 서비스에 접근할 때마다 이 토큰을 제시하고, 서버는 바코드 스캐너(토큰 검증 로직)를 사용해 티켓의 유효성을 검증합니다.
서버는 별도의 세션 저장소 없이 토큰 자체의 유효성만 검증합니다.
헤더(Header): 토큰 유형과 사용된 암호화 알고리즘 정보를 포함합니다.
페이로드(Payload): 사용자 정보와 권한 등 클레임(claim) 정보를 포함합니다.
서명(Signature): 헤더와 페이로드, 그리고 서버의 비밀 키를 함께 암호화하여 생성된 값으로, 토큰의 무결성을 검증합니다.
지난 블로그 참고!
AccessToken과 RefreshToken 인증 방식
안녕하세요! 오늘은 웹 서비스의 인증 보안에 필수적인 JWT, AccessToken, RefreshToken에 대해 자세히 알아보겠습니다. 스프링 환경에서 Redis를 활용한 구현 방법도 함께 살펴볼게요. 1. JWT vs 세션: 인증
balhae.tistory.com
두 인증 방식 모두 각자의 장단점이 있으므로, 서비스의 특성과 요구사항에 맞게 선택해야 합니다.
보안이 중요하고 사용자 세션 관리가 필요한 서비스는 세션 기반 인증이 적합할 수 있습니다.
확장성과 분산 시스템을 고려한다면 JWT 기반 인증이 더 적합할 수 있습니다.
때로는 두 방식을 혼합하여 사용하는 하이브리드 방식도 고려할 수 있습니다.
결국 중요한 것은 개발하는 서비스의 특성과 요구사항을 정확히 파악하고, 그에 맞는 인증 방식을 선택하는 것입니다!
| [리메이크] DB의 기술 (1) | 2025.05.30 |
|---|---|
| SSR, CSR, SSG 등 (0) | 2025.05.17 |
| 운영체제의 핵심 개념: 프로그램, 프로세스, 스레드 (0) | 2025.05.13 |
| Docker에 관해 (0) | 2025.05.09 |
| Spring vs Spring Boot (0) | 2025.05.07 |