[인증/ 보안] 쿠키와 세션

Jiwon Yoo·2023년 5월 4일
0

🍪 쿠키(Cookie)란?

쿠키는 클라이언트(로컬)에 저장되는 키와 값이 들어있는 작은 데이터 파일로 서버에서 클라이언트에 영속성 있는 데이터를 저장하는 방법이다. 서버는 클라이언트의 쿠키를 이용하여 데이터를 가져올 수 있, 반대로 클라이언트에서 서버로 쿠키를 다시 전송하는 것도 가능하다. 보통 웹 환경에서는 클라이언트와 서버가 HTTP 프로토콜을 이용해 통신한다.

서버는 데이터를 어떻게 저장하나?

서버는 쿠키를 이용하여 데이터를 저장하고 이 데이터를 다시 불러와 사용할 수 있다. 하지만 데이터를 저장한 이후 아무 때나 데이터를 가져올 수 있는 것은 아니다. 데이터를 저장한 이후 특정 조건들이 만족되어야 다시 가져올 수 있기 때문이다.

이런 조건들은 아래 코드처럼 http 헤더를 사용해 쿠키 옵션으로 표현할 수 있다.

'Set-Cookie':[
            'cookie=yummy', 
            'Secure=Secure; Secure',
            'HttpOnly=HttpOnly; HttpOnly',
            'Path=Path; Path=/cookie',
            'Doamin=Domain; Domain=codestates.com'
        ]

쿠키를 이용한 상태 유지

쿠키의 특성을 이용하여 서버는 클라이언트에 인증정보를 담은 쿠키를 전송하고, 클라이언트는 전달받은 쿠키를 서버에 요청과 함께 전송하여 Stateless한 인터넷 연결을 Stateful하게 유지할 수 있다.

하지만 기본적으로 쿠키는 오랜 시간 동안 유지될 수 있고, HttpOnly 옵션을 사용하지 않았다면 자바스크립트를 이용해서 쿠키에 접근할 수 있기 때문에 쿠키에 민감한 정보를 담는 것은 위험하다.

세션(Session)이란?

세션은 일정 기간 동안 같은 사용자(클라이언트)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다.

세션은 쿠키와 다르게 이런 상태를 서버 측에서 저장하고 관리한다. 서버는 암호화한 세션 ID를 쿠키에 저장해 클라이언트에 전달하고, 이를 통해 클라이언트를 구분한다. 세션은 웹 브라우저가 서버에 접속해 브라우저를 종료할 때까지 세션을 유지한다.

쿠키 vs 세션

설명접속 상태 정장 경로장점단점
쿠키쿠키는 그저 http의 stateless한 것을 보완해주는 도구클라이언트서버의 부담을 덜어줌쿠키 그 자체는 인증이 아님
세션접속상태를 서버가 가짐(stateful). 접속 상태와 권한 부여를 위해 세션 아이디를 쿠키로 전송서버신뢰할 수 있는 유저인지 서버에서 추가로 확인 가능하나의 서버에서만 접속 상태를 가지므로 분산에 불리
profile
새싹 개발자 🌱

0개의 댓글