개요
회사 프로젝트에서 모노레포 구조로 프론트엔드를 관리하며, 여러 서버를 분리해 운영하다 보니 세션 관리에 어려움이 생겼다. 이에 따라 쿠키를 이용한 세션 관리를 선택했지만, 관련 지식이 부족해 도입 과정에서 어려움을 겪었다. 이를 해결하고 좀 더 깊이 있게 이해하기 위해 이번 글을 작성하게 되었다.
쿠키(Cookie)와 세션(Session)을 사용하는 이유
- HTTP 프로토콜의 특성이자 약점 보완(coonectionless, stateless)
- Connectionless(비연결 지향)
- 클라이언트가 서버에 요청(Request)을 했을 때, 그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊는 처리 방식
- Stateless(상태정보유지안함)
- 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식
이러한 특성으로 서버와 클라이언트가 통신을 할 때 통신이 연속적으로 이어지지 않고 한 번 통신이 되면 끊어진다.
따라서 서버는 클라이언트가 누구인지 매번 새로 인증을 해줘야 한다.
이를 보완하기 위해 클라이언트의 정보를 유지하고 추적하기 위해 사용하는 것이 쿠키(Cookie)와 세션(Session)이다.
쿠키(Cookie)
클라이언트(주로 웹 브라우저)에 저장되는 작은 데이터 조각으로, 서버가 클라이언트를 식별하거나 사용자의 상태를 기억하는 데 사용
특징
- 이름, 값, 만료일(저장 기간 설정), 경로 정보로 구성
- 쿠키의 크기는 대략 4KB로 제한
- 쿠키는 유효 기간을 설정 가능(유효 기간이 지나면 쿠키는 자동 삭제)
- 클라이언트 측에 저장되기 때문에 보안에 취약
장점
- 클라이언트 측에 저장되므로 서버에 추가적인 저장 공간을 요구하지 않는다(서버 부하가 적다)
단점
- 쿠키를 조작하거나 탈취당할 위험이 있다.(보안 취약성)
- 쿠키에 저장할 수 있는 데이터가 제한적(대략 4KB로 제한)
사용 사례
사용자 설정 기억, 장바구니 정보 유지
세션(Session)
서버 측에서 클라이언트의 상태나 데이터를 관리하는 방식
세션을 통해 서버는 클라이언트와의 상호작용 상태를 기억하고 사용자가 서버를 다시 방문했을 때 이전 상태를 유지할 수 있다.
특징
- 세션 데이터는 서버에 저장되며, 클라이언트는 session ID만 가지고 있다.
- 클라이언트는 서버로부터 세션 ID를 부여받으며, 이 세션 ID를 통해 서버는 클라이언트를 식별하고 상태 유지
- 중요한 데이터는 서버 측에서 관리되기 때문에 보안 면에서 안전
장점
- 데이터가 서버에 저장되므로 보안에 유리하며 민감한 정보를 안전하게 처리
- 쿠키보다 큰 데이터를 저장
단점
- 모든 사용자 세션 정보를 서버가 관리하기 때문에, 많은 사용자가 접속할 경우 서버 속도 저하
- 클라이언트와 서버 간의 세션을 유지하기 위해 추가적인 설정 필요
사용 사례
로그인 상태 유지
쿠키와 세션의 비교
항목 | 쿠키(Cookie) | 세션(Session) |
저장 위치 | 클라이언트(브라우저) | 서버 |
보안 | 비교적 취약 (데이터 조작 가능성) | 보안에 유리 (서버에서 관리) |
저장 용량 | 약 4KB 제한 | 상대적으로 큰 데이터 관리 가능 |
만료 시점 | 설정된 만료 시간 또는 브라우저 종료 시 | 설정된 시간 또는 사용자 비활동 시 만료 |
서버 자원 | 사용하지 않음 | 서버 자원을 소모함 |
사용 목적 | 간단한 정보 저장 (로그인 유지, 설정 저장 등) | 중요한 정보나 상태 유지 (로그인 정보, 장바구니) |
'개발 지식 > CS' 카테고리의 다른 글
[개발지식] MVC1 VS MVC2 (특징, 장/단점) (0) | 2023.09.04 |
---|---|
[개발지식] MVC 패턴이 뭐길래 (Model-View-Controller) (0) | 2023.08.31 |