본문 바로가기
개념/Study

세션 (Session) & 쿠키 (Cookie)

by Hwanii_ 2023. 11. 15.
728x90

1. 세션 이란 ?

 

세션은 네트워크 통신에서 특정 사용자 또는 클라이언트가 시스템에 접속 하여,

특정 작업을 수행 하는 동안 유지 되는 상태를 의미 한다.

 

세션은 사용자가 로그인 하고 로그아웃을 할 때 까지의 일련의 상호 작용을 포함 한다.

 

이렇게 상태가 유지 되기 때문에, 사용자 경험 및 정보를 유지 하게 된다.

 

세션은 다양한 시스템 에서 활용 되고, 아래는 세션의 주요 특징 및 동작 원리 이다.

 

1) 시작 / 종료

 

세션은 사용자가 시스템에 로그인 할 때 시작 된다.

로그아웃을 하거나 또는 일정 시간 동안 활동이 없으면 세션은 종료 된다.

 

2) 식별자 & 상태 정보

 

각 세션은 고유한 식별자 (session ID) 를 갖는다.

이 session ID 를 통해 시스템은 특정 사용자의 세션을 식별 하고 관리 할 수 있다.

 

세션에는 사용자 상태 및 활동과 관련된 정보가 포함 될 수 있다.

예)

세션 변수 / 사용자 권한 / 장바구니 내용 

 

3) 쿠키와 세션 식별자

 

웹 환경 에서는 주로 쿠키를 같이 사용 해서 세션을 관리 한다.

사용자가 웹에 접속 하면, 서버는 고유한 session ID 를 생성 한다.

이 session ID를 쿠키에 저장 하고, 클라이언트에게 전송 한다.

 

클라이언트는 이 session ID 를 가지고 있는 쿠키를 계속 서버에 전송 해서 세션을 유지 하는 구조 이다.

 

 

 

4) 세션 유지 / 만료

 

사용자의 활동이 있다면 (클릭 / 요청 / 등등) 세션은 계속 유지 된다.

하지만, 일정 시간 동안 활동이 없다면 자동으로 만료 될 수 있다.

 

일반적으로 세션 만료 기간은 서버 설정 마다 상이 하고, 또는 로그인 시 지정된 정책에 따라 결정 된다.

 

5) 보안

 

세션은 보안을 유지 하기 위해 중요하다.

session ID 는 고유 해야 하고, 무작위로 생성 되어야 한다.

중요한 정보는 당연히 안전한 방법으로 전송 되어야 하고, 저장 되어야 한다.

 

6) 로그인 상태 관리

 

세션은 사용자가 로그인한 상태를 관리 하는데 사용 된다.

로그인을 하면 새로운 세션이 시작 되고, 로그아웃을 하거나 세션이 만료 되면 로그인 상태가 종료 된다.

 

 

 

[ 정리 ]

 

정리하자면, 세션은 사용자의 경험을 향상 시키고, 사용자의 상태를 서버 측에서 유지 하게 한다.

 

 

 

2. 쿠키 란 ?

 

쿠키는 웹 브라우저와 웹 서버 간에 사용자 정보를 저장 하고 교환 하기 위한 작은 데이터 조각 이다.

주로 웹에서 세션 관리 / 사용자 추적 / 로그인 정보 저장 / 등등 다양한 용도로 활용 된다.

 

아래는 쿠키의 주요 특징 및 동작 원리 이다.

 

1) 쿠키의 생성 및 저장

 

서버에서 웹 브라우저에게 특정 정보를 쿠키로 전달 한다.

이 정보는 사용자의 브라우저에 저장 된다.

 

브라우저는 쿠키를 내부 쿠키 저장소에 저장 하고, 해당 하는 도메인에 대한 모든 요청 에서 해당 쿠키를 함께 전송 한다.

 

2) 쿠키의 구성 요소

 

쿠키는 이름 / 값 / 만료 날짜 / 경로 / 도메인 / 등등 의 속성으로 구성 된다.

 

이름과 값 : 쿠키의 식별자 및 해당 값.

 

만료 날짜 : 쿠키의 유효 기간. 만료되면 브라우저에서 자동으로 쿠키를 삭제.

 

경로 : 쿠키가 사용 되는 URL 경로.

 

도메인 : 쿠키가 적용 되는 도메인.  

 

3) 쿠키의 사용 목적

 

세션 관리 : 사용자의 상태를 유지. 세션을 관리 하기 위해 세션과 쿠키를 함께 사용 한다.

 

사용자 추적 : 사용자의 행동을 기록 하고 추적 하기 위해 쿠키가 사용 된다.

 

사용자 인증 : 로그인 정보를 저장 하고 사용자를 인증 하기 위해 쿠키를 사용 할 수 있다.

 

맞춤화 : 사용자에게 맞춤성 컨텐츠 및 서비스를 제공 하기 위해 사용자의 선호도를 기록 할 수 있다.

 

[ 추가 ]

 

보통 웹 환경에서 클라이언트와 서버가 HTTP 프로토콜을 이용 해서 통신 한다.

하지만 HTTP 프로토콜은 아래와 같은 특징을 가지기 때문에 쿠키를 사용 하게 된다.

 

1) Connectionless (비연결성)

 

HTTP 는 TCP 연결을 맺고 요청 (Request) 를 보내면, 서버는 응답 (Response) 를 보내주고 연결이 끊어 진다.

 

HTTP 1.1 버전은 컨넥션을 계속 유지 하는 keep-alive 옵션이 디폴트 이긴 하지만,

HTTP 1.0 버전은 기본적으로 Connectionless 특징을 지닌다.

 

HTTP / TCP 란 ?

 

더보기

 

HTTP (Hyper Text Transfer Protocol) == 하이퍼 텍스트 전송 프로토콜

 

인터넷에서 주로 사용하는 데이터를 주고 받기 위한 프로토콜 이다.

 

HTTP는 기본적으로 TCP를 사용 하여 통신 한다.

즉, 웹 브라우저와 웹 서버 간의 데이터 전송에 대한 규약을 의미 한다.

 

요약하면, 클라이언트 == 웹 브라우저 가 서버로부터 웹 페이지 또는 데이터를 요청 할 때,

사용자의 요청 및 서버의 응답은 HTTP 프로토콜을 사용 하여 이루어진다.

이때, HTTP는 일반적으로 TCP를 기반으로 작동 한다는 것이다.

TCP 프로토콜을 사용 했기 때문에, 이 요청과 응답은 TCP 를 통해 안정적으로 전달 되고,

데이터 전송의 신뢰성을 유지 할 수 있게 된다.

 

TCP (Transmission Control Protocol) == 전송 제어 프로토콜

 

인터넷에서 데이터를 안정적으로 전송 하기 위한 여러가지 프로토콜 종류 중에 하나 이다.

 

TCP 는 OSI (Open Systems Interconnection) 모델에서 전송 계층에 해당 한다.

네트워크 상에서 데이터를 패킷 단위로 안정적으로, 순서대로, 에러 없이 전달 하는 역할을 한다.

 

TCP는 연결 지향적인 프로토콜 이다.

데이터를 먼저 전송 하기 전에 연결 설정이 선행 되어야 한다.

그리고, 전송이 끝나면 연결을 해제 한다.

이런 방식으로 데이터 전송을 하기 때문에, 신뢰성이 높다고 할수 있고,

순서가 중요한 프로그램에서 유용 하게 사용 된다.

 

TCP는 데이터의 송수신 과정에서 발생 할 수 있는 여러 문제들을 다루기 위한 다양한 기능을 제공 한다.

Flow Control (흐름 제어) / Congestion Control (혼잡 제어) / 에러 검출 및 재전송 / 등등 이 포함 된다.

TCP 프로토콜은 웹 브라우징 / 이메일 / 파일 전송 / 등등 과 같은 다양한 상황 에서 사용 된다.

 

TCP 프로토콜은 IP (Internet Protocol) 와 함께 사용 되어, TCP / IP 스택을 형성 한다.

따라서, 인터넷을 포함한 여러 네트워크 에서 표준으로 사용 되고 있다.

 

2) Stateless (무상태)

 

HTTP 는 상태 정보를 따로 저장 하지 않는다.

즉, 연결이 끊어지면 바로 모든 상태 정보가 사라 지게 된다.

그래서 서버와 클라이언트가 통신 할 때, 첫 번째 통신 이후에 두 번째, 세 번째 , .. 통신 때는,

이전의 통신때 보낸 정보를 전혀 알 수가 없다.

 

이렇게 HTTP는 Conectionless 의 특징과 Stateless 의 특징을 가지므로, 쿠키를 사용 하는 것이다.

 

4) 보안 고려 사항

 

쿠키는 클라이언트 측에 저장되므로 보안에 취약 하다.

 

중요한 정보 (비밀번호) 를 저장 할 때는 주의가 필요 하다.

쿠키에는 민감한 정보를 보통 저장 하지 않는다.

 

5) 쿠키의 동작 원리

 

클라이언트가 서버에 HTTP 요청을 보낼 때, 서버는 Set-Cookie 옵션으로 헤더를 통해 쿠키를 설정 한다.

 

브라우저는 쿠키를 저장 하고, 이후 동일한 도메인에 대한 HTTP 요청에는 해당 쿠키를 함께 전달 한다.

 

동일한 도메인 이란 무엇일까 ? 

 

https://hwanii96.tistory.com/page1

 

하고,

 

https://hwanii96.tistory.com/page2

 

라는 두 URL 이 있다고 가정 하면,

 

이 두 URL의 호스트 부분이 hwanii96.tistory.com 으로 동일 하기 때문에 이는 동일한 도메인 이라고 간주 한다.

 

도메인이 동일 하지 않으면, 쿠키는 다른 도메인으로 절대로 전달 되지 않는다.

 

보안 문제와 다른 도메인 에게 정보 전달을 방지 하기 위한 정책이 있기 때문 이다.

 

 

 

위의 이미지를 보면, 클라이언트가 로그인을 완료 하고 welcome 이라는 첫 페이지로 가는 상황 이다.

 

이때, 클라이언트는 쿠키 저장소 에서 저장했던 쿠키를 조회 해서 꺼낸 다음에 HTTP 요청에 쿠키를 함께 전송 한다.

 

그러면 서버는 HTTP 요청에 담긴 쿠키의 사용자 로그인 정보를 읽어서 클라이언트를 식별 할 수 있게 된다.

 

만약 쿠키가 없었으면, 다시 로그인을 해야 하는 번거로움이 생겼을 것이다.

 

 

 

3. 세션 사용의 장단점

 

장점 :

 

1) 사용자 상태 관리

 

사용자가 로그인한 상태를 유지 하고, 로그인한 사용자에 대한 정보를 저장 한다.

이를 통해, 사용자는 세션 기간 동안 계속 해서 인증된 상태로 웹 어플리케이션을 사용 할 수 있다.

 

2) 세션 변수 활용

 

세션에는 사용자의 세션 동안 유지 해야 하는 변수들을 저장 할 수 있다.

그런 상태 정보 변수들은, 로그인 정보 / 사용자 권한 / 장바구니 / 등등 과 같은 정보들 이다.

 

3) 보안 향상

 

세션은 사용자에 대한 중요한 정보를 담는다. 왜냐하면 세션은 서버 측에 저장 되기 때문 이다.

클라이언트 측에 저장 되지 않으므로, 노출 되지 않아 보안에 유리 하다.

즉, 쿠키를 단독적으로 사용 하는 것보다 무조건 보안에 유리 하다.

 

4) 상태 유지

 

사용자의 상태를 유지하는 것으로, 웹 애플리케이션에서 일관된 경험을 제공 한다.

사용자가 페이지를 이동하더라도 어떤 특정한 상태를 유지 할 수 있으므로, 사용자 편의성이 향상 된다.

 

 

 

단점 : 

 

1) 서버 부하

 

세션은 서버에 저장 된다. 따라서, 서버 메모리에 부담이 가해질 수 있다.

사용자 수가 많으면 많을 수록 서버 부하가 증가 하게 된다.

 

2) 확장성 제약

 

서버에 세션을 관리하므로, 서버의 확장성에 영향을 미칠 수 있게 된다.

 

3) 세션 유지 비용

 

사용자의 상태를 유지 하기 위해서 쿠키 또는 URL 매개변수 등을 통해 session ID 를 전송 해야 하므로,

전송 비용이 소비 된다. (대역폭이 소비 된다)

 

 

 

4. 쿠키 사용의 장단점

 

장점 :

 

1) 상태 유지

 

세션의 장점과 같이 상태를 유지 할 수 있는 장점을 가진다.

쿠키의 가장 중요한 장점 중에 하나가 바로 상태를 유지 한다는 부분 이다.

사용자의 로그인 상태를 유지 하거나, 사용자의 활동을 추적하는데 사용 된다.

 

2) 서버 부담 감소

 

쿠키는 클라이언트 측에서 저장 되기 때문에 서버에 대한 부담이 감소 된다.

서버는 필요한 정보를 쿠키에 담아 클라이언트에게 주고,

이후 클라이언트는 어떤 정보가 담긴 쿠키를 서버에게 다시 전송 하는 식으로 필요한 정보를 얻게 된다.

 

3) 맞춤성

 

쿠키를 사용 하면 사용자에 대한 정보를 추적 할 수 있다.

이를 활용 하여 사용자에게 맞춤화된 경험 및 서비스를 제공 할 수 있게 된다.

 

 

 

단점 :

 

1) 보안 취약성

 

쿠키는 클라이언트 측에 저장 된다. 그렇기에 보안에 취약 하다.

 

2) 용량 제한

 

각 도메인당 브라우저는 일정 크기 만큼의 쿠키만 쿠키 저장소에 저장 할 수 있다.

따라서, 쿠키 저장에 한계가 존재 한다.

 

3) 개인 정보 노출

 

보안이 취약 하므로, 개인 정보가 노출 될 위험이 존재 한다.

 

 

 

5. 세션의 종류

 

세션은 여러 가지 종류와 유형이 존재 한다.

웹 개발시 주로 세션의 개념이 잘 활용 된다.

일반적으로 세션은 클라이언트와 서버 간의 특정 기간 동안 지속되는 상태 그 자체를 의미 한다.

 

웹 세션 (Web Sessions) 에는 위에서 정리 했던 것처럼,

서버 기반의 세션 (Server-Side Sessions) 가 존재 하고,

쿠키 기반의 세션 (Cookie-Based Sessions) 가 존재 한다.

 

프론트엔드 세션 (Frontend Sessions) 도 존재 한다.

로컬 스토리지 (Local Storage) 및 세션 스토리지 (Session Storage) 가 이에 해당 된다.

프론트엔드 세션은 클라이언트 측에서 데이터를 저장 하는 브라우저 스토리지 이다.

따라서 데이터는 사용자의 브라우저에 저장 되고, 세션 스토리지는 세션 동안에만 유지 된다.

 

그외 다양한 세션이 존재 하지만, SSO / LDAP / RBAC & ABAC / IAM 관련 세션을 아래에 정리 한다.

 

1) SSO (Single Sign-On) 세션

 

SSO는 사용자가 한 번 로그인 하면, 여러 서비스에 자동으로 접근 할 수 있도록 해주는 인증 메커니즘 이다.

 

SSO 세션은 일반적으로 웹 브라우저 쿠키를 사용 하여 구현 된다.

사용자가 첫 번째 서비스 (애플리케이션) 에 로그인 하면, 이 때 생성된 토큰이 다른 연결된 서비스에 자동으로 전달된다.

이렇게 자동으로 전달된 토큰을 통해 그 연결된 서비스에서의 세션을 설정 하게 된다. 

 

좀 더 자세히 정리 하면 아래와 같다.

 

사용자가 처음 서비스에 로그인 하면, 해당 서버에서 사용자 인증을 끝내고,

클라이언트에게 토큰 또는 session ID 를 제공 한다.

 

그러면 클라이언트 (웹 브라우저) 는 받은 토큰 또는 session ID 를 쿠키에 저장 한다.

이 쿠키는 일정 기간 (몇시간 / 몇 일 / ..) 동안 유효 하다.

 

사용자가 다른 서비스로 이동 하거나 또는 그 이후 이전에 사용 했던 같은 서비스를 이용 하려고 하면,

브라우저는 저장된 쿠키를 함께 전송 한다.

 

서비스는 클라이언트가 전송한 쿠키를 확인 하고, 특정 사용자의 정보를 기반으로 자동 로그인을 처리 한다.

 

그러고 사용자의 정보 및 상태를 세션에 저장 한다.

 

세션에 저장 하는 이유는 쿠키의 낮은 보안성 때문 이다. (브라우저에 저장 하므로)

 

 

 

2) LDAP (Lightweight Directory Access Protocol) 세션

 

LDAP 는 디렉터리 서비스에 접근 하기 위한 프로토콜 이다.

디렉터리 서비스는 주로 사용자 정보 및 권한을 저장 하고 검색 하기 위해 사용 된다.

 

LDAP 세션은 일반적으로 TCP 기반의 연결을 통해 이루어진다.

사용자가 디렉터리 서비스에 액세스 할 때, 세션을 설정 한다.

 

LDAP는 클라이언트 - 서버 모델 이다.

클라이언트가 디렉터리 서버에 연결 하여 정보를 읽고 쓰고 할 수 있다.

 

LDAP 세션 설정은 일반적으로 클라이언트와 서버 간의 통신에 대한 상태를 의미 한다.

연결된 상태로 디렉터리 정보를 요청 하거나 업데이트 할 수 있도록 한다.

 

세션 설정은 일정 시간 동안 유지되거나, 클라이언트가 명시적으로 서버와의 연결을 끊을 때 까지 유지 된다.

이를 통해, 클라이언트는 하나의 세션으로 여러 요청을 처리 할 수 있고,

서버는 클라이언트 간의 상태를 효율적으로 관리 할 수 있게 된다.

 

 

 

3) RBAC (Role-Based Access Control) & ABAC (Attribute-Based Access Control) 세션

 

RBAC는 사용자에게 역할을 할당 하고 역할에 따라 권한을 부여 하는 제어 방식 이다.

ABAC는 사용자의 속성 (특성) 을 기반으로 권한을 부여 하는 방식 이다.

 

RBAC 및 ABAC 세션은 주로 서버 기반의 세션 관리를 사용 한다.

사용자가 로그인 하면, 해당 사용자의 역할 또는 속성 (특성) 에 따라 세션의 정보가 설정 된다.

 

 

 

4) IAM (Identity and Access Management) 세션

 

IAM 은 사용자와 관련된 신원 관련 정보를 관리 한다.

이를 기반으로 권한 및 액세스를 효과적으로 관리하는 시스템 이다.

 

IAM 세션은 주로 웹 기반의 인증 및 권한 부여를 수행 한다.

일반적으로는 SSO 또는 토큰 기반의 인증 메커니즘을 사용 해서 세션을 설정 한다.

 

 

 

6. 쿠키의 종류

쿠키도 여러 종류가 존재 한다.

기본적으로 세션 쿠키와 지속 쿠키로 구분 할 수 있다.

 

1) 세션 쿠키 (Session Cookies)

 

세션 쿠키는 일반적으로 세션이 유효한 동안만 유지 된다.

그래서 브라우저를 닫으면 자동으로 이 세션 쿠키는 삭제 된다.

사용자가 웹 사이트를 떠나거나, 브라우저를 종료 하면 해당 쿠키가 사라진다.

그래서 보통 세션 쿠키는 로그인 상태 등의 정보를 유지 하기 위해 사용 된다.

 

 

 

2) 지속 쿠키 (Persistent Cookies)

 

지속 쿠키는 설정된 기간 동안 유지 된다.

그래서 브라우저를 닫아도 삭제 되지 않는다.

사용자는 설정된 기간 안으로는 특정 웹 사이트를 다시 방문 하더라도 유지 된다.

그래서 보통 사용자의 선호 하는 설정 또는 로그인 정보 같은 것을 유지 하기 위해 사용 된다.

 

 

 

3) 보안 쿠키 (Secure Cookies)

 

보안 쿠키는 보안 연결 (HTTPS) 을 통해서만 전송 되는 쿠키 이다.

이 보안 쿠키 덕분에 공격 및 보안 위협 으로 부터 보호 할 수 있다.

 

 

 

4) 서드 파티 쿠키 (Third-Party)

 

현재 방문한 도메인이 아닌 다른 도메인 에서 설정한 쿠키를 서드 파티 쿠키 라고 한다.

주로, 광고 추적 및 분석 등에 사용 된다.

 

이 서드 파티 쿠키는 광고 배너를 생각 하면 좋다.

유입 경로를 추적 하기 때문에,

어떤 광고 배너를 확인 하면, 방금 전에 검색 했던, 또는 최근에 검색 했던 제품의 광고가 뜨게 된다.

이것은 해당 도메인 (웹사이트) 운영자가 아니라 제 3의 업체 (도메인) 에서 사용자 행동을 추적 및 활용 하기 위해서

심어 놓은 쿠키 라고 생각 할 수 있다.

 

이 서드 파티 쿠키는 내 인터넷 사용 정보가 나도 모르는 사이에 광고에 활용 될 수 있기 때문에 주의 해야 한다.  

 

그 외에도 다양한 쿠키가 존재 한다.

반응형