본문 바로가기

Web/Frontend 기본 CS 정리

로그인 처리를 할 때 쿠키와 세션을 어떻게 사용하시나요?

728x90

답변

사용자가 로그인을 성공하면 서버는 세션을 생성하고 세션 ID를 브라우저에게 쿠키로 전달합니다.

이때 클라이언트는 서버에 요청을 보낼 때마다 세션 ID가 담긴 쿠키를 서버에 전송하여 사용자 인증을 진행합니다.

서버는 클라이언트에서 보낸 세션 ID를 확인하여 사용자의 로그인 상태를 유지하거나 필요한 데이터를 제공합니다.

 

쿠키와 세션의 기본 개념

  • 쿠키주로 서버와 클라이언트 간 상태를 유지하거나 인증 정보를 저장할 때 사용됩니다.
  • 클라이언트(브라우저)에 저장되는 데이터
  • 세션세션 ID가 쿠키에 저장되며, 서버가 클라이언트의 인증 상태를 추적함
  • 서버에서 관리하는 사용자 상태 정보

로그인 처리에 쿠키와 세션 활용

  • 사용자가 로그인하면 서버는 세션을 생성하고, 세션 ID를 브라우저에 쿠키로 저장
  • 이후 클라이언트는 요청마다 이 세션 ID가 담긴 쿠키를 서버에 전송해 사용자를 인증
  • 서버는 세션 ID를 확인해 사용자의 로그인 상태를 유지하거나 필요한 데이터를 제공

보안 사항

  • HTTPS: 쿠키와 세션 데이터 전송 시 암호화를 위해 HTTPS를 사용합니다.
  • HttpOnly 쿠키: JavaScript로 쿠키를 접근하지 못하게 설정해 XSS 공격을 방어합니다.
  • Secure 쿠키: HTTPS를 통해서만 쿠키를 전달합니다.
  • 세션 만료 시간: 일정 시간이 지나면 세션을 만료시켜 보안을 강화합니다.

하지만 이 방식은 세션 데이터를 서버 메모리나 DB에 저장하므로, 대규모 서비스에서는 서버 간 세션 동기화가 필요하고 관리 부담이 생김

JWT (JSON Web Token)를 활용한 로그인 처리

  • JWT는 서버가 세션을 유지하지 않고도 인증 상태를 관리할 수 있는 방식
  • 사용자가 로그인하면, 서버는 사용자 정보와 만료 시간을 포함한 JWT를 생성하고, 이를 클라이언트에 전달
  • 클라이언트는 JWT를 쿠키 또는 로컬 스토리지에 저장
  • 이후 요청마다 클라이언트는 JWT를 Authorization 헤더에 첨부해 서버에 전송
  • 서버는 JWT를 검증해 사용자 정보를 확인하고 인증 상태를 유지

장점

  • 세션을 서버에서 관리하지 않으므로 무상태(stateless) 환경에서 적합
  • 클라이언트에서 정보를 디코딩할 수 있어 사용자 상태를 빠르게 확인 가능
  • 확장성과 성능이 우수

단점

  • 만료되기 전까지 토큰이 유효하므로, 토큰 탈취 시 피해가 클 수 있음
  • (대처: 짧은 만료 시간 설정 + Refresh Token 활용)

OAuth 2.0과 로그인 처리

OAuth 2.0타사 인증 서비스를 통해 사용자를 인증하는 방식

  • 사용자는 Facebook, Google, GitHub 등의 인증을 거쳐 애플리케이션에 로그인
  • Access TokenRefresh Token을 발급받아 애플리케이션이 사용자를 대신해 API에 접근할 수 있음

OAuth 2.0과 쿠키/세션

  • Access Token은 JWT 형식으로 전달되는 경우가 많으며, 이를 쿠키로컬 스토리지에 저장해 API 요청 시 사용
  • 세션 대신 Access Token을 활용해 사용자 상태를 유지하고, 토큰 만료 시 Refresh Token으로 갱신

OAuth 2.0 사용 흐름:

  1. 사용자가 애플리케이션에 로그인 요청
  2. 사용자는 OAuth 제공자의 로그인 화면에서 인증
  3. 제공자는 Access Token 및 Refresh Token을 애플리케이션에 전달
  4. 애플리케이션은 Access Token을 사용해 요청마다 사용자 인증 및 리소스 접근