본문 바로가기

교육 및 자격증/스터디

GH(NOB); 세션(Session) vs 쿠키(Cookie)

728x90

쿠키와 세션을 사용하는 이유

 : HTTP의 connectionlessstateless 특징 때문이다.

 

 - HTTP 프로토콜은 브라우저와 웹 서버 간 통신을 위한 프로토콜로 요청과 응답으로 통신을 한다.

요청 : 클라이언트 -> 서버(HTTP Request)

요청에 의한 응답 : 서버 -> 클라이언트(HTTP Response)

 

비연결성 (connectionless)

 : 클라이언트가 요청한 서비스를 서버가 요청, 응답받은 후에 연결 종료한다.

 - 동시의 다수 연결이 들어오면 부하가 발생 -> 통신후 연결이 종료하게 된다.(Syn Flooding공격 위험)

 

비상태성(stateless)

 : 서버는 클라이언트에게 요청 메시지를 받고 응답하지만 이후에 클라이언트에 대한 어떤 상태 정보도 저장하지 않는 특징이다.

 - 서버 확장성이 높은 반면 클라이언트가 추가로 데이터를 전송할 때 번거롭다.(페이지를 이동할 때마다 인증 요청)

 

-> http의 이전 버전에서는 단순히 문서를 보내고 받는 역할만 했기 때문에 비연결성과 비상태성이 필요했지만  실생활에서는 한번의 통신이 아니라 지속적인 연결을 필요로 한다.

그렇기 때문에 로그인 상태나 정보를 유지할 쿠키와 세션 같은 기능이 필요하다.

 

쿠키란?

 : 사용자의 웹 브라우저에 저장되는 작은 기록 정보파일이다.

 예) 웹 페이지에 로그인할 때

 - 저장된 정보를 다른 사람이 확인 가능하며 유효시간이 지나면 사라진다.

 - 클라이언트에 300개까지 저장이 가능하며 하나의 쿠키값당 4KB까지 저장한다.

 

쿠키의 목적

  • 세션관리 : 서버에 저장해야 할 로그인, 장바구니, 접속 정보 등의 정보 관리
  • 개인화 : 사용자마다 다른 개인 설정 등 세팅 가능
  • 트래킹 : 사용자의 행동을 기록하고 분석한다.

쿠키의 종류

  • Session 쿠키 : 만료 시간을 설정하고 메모리에만 저장되며 브라우저 종료 시 쿠키를 삭제
  • Persistent 쿠키 : 장시간 유지되는 쿠키
  • Secure 쿠키 : HTTPS에서 사용하는 쿠키
  • Third-Party 쿠키 : 광고 배너를 관리할 때 추적하기 위한 쿠키

쿠키 동작 원리

1. 클라이언트에서 HTTP Request로 페이지를 요청

2. 서버는 HTTP Response에 Set-Cookie를 포함시켜 응답

3. 통신

4. 클라이언트에서 추가로 요청을 할 경우 HTTP Request와 Cookie를 서버에 보낸다.

5. 서버는 쿠키의 이전 상태 정보를 읽어 쿠키를 업데이트 후 변경된 쿠키를 HTTP Response로 응답

 

쿠키 속성 - HTTP Only

 - 클라이언트에서 document.cookie를 활용해 쿠키를 조작할 수 있다.

<script>alert(document.cookie);</script> //xss공격으로 보안이 되어 있지 않은 웹에서 입력 시 쿠키 정보가 출력된다.

 

-> 이를 위해 웹 브라우저에서 쿠키에 접근할 수 없도록 HTTPOnly 속성을 제한할 수 있다.

[Set-Cookie: 쿠키명 = 쿠키값; path=/; HTTPOnly]

예)

 const cookieConfig = {

   httpOnly : true, // 설정

   maxAge : 100000,

}

 

쿠키 속성 - Secure

 - 안전하지 않은 사이트로 접속 시 non-secure Cookie가 발행되어 쿠키 탈취 가능하다

 - SSL 암호화가 적용된 HTTPS 프로토콜을 사용하여 암호화한 데이터를 서버에 넘겨서 공격자가 쿠키를 탈취해도 암호화가 되어 쿠키 정보를 확인할 수 없다.

[Set-Cookie: 쿠키명 = 쿠키값; path=/;secure]

세션이란?

 : 일정 시간동안 같은 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다.
여기서 일정 시간은 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 웹 브라우저를 종료하고 연결을 끝내는 시점을 말한다.
즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.

 

세션 특징

  • 사용자 정보 파일을 서버에서 관리
  • 서버에서 클라이언트 구분을 위해 세션 ID를 부여
  • 접속 시간에 제한(일정 시간 응답이 없다면 정보가 유지되지 않게 설정)
  • 사용자가 많아질수록 서버 메모리를 많이 차지한다.

 

세션 동작 방식

1. 클라이언트가 페이지를 요청(사용자 로그인)
2. 서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인해 클라이언트가 해당 session-id를 보냈는지 확인
3. session-id가 없다면 서버는 session-id를 생성해서 클라이언트에게 준다.
4. 클라이언트는 session-id를 쿠키(JESESSIONID)를 사용해 서버에 저장
5. 클라이언트가 다시 요청할 때 세션ID와 같이 서버로 전달한다.

6. 서버는 Session ID와 로그인 정보를 매핑 후 있으면 웹 서비스로 응답한다.

종료 : [클라이언트 종료 시 Session 파기/서버 Session Time 초과 시 Session 파기]

 

 

 - 세션 vs 쿠키

세션과 쿠키는 둘 다 웹 애플리케이션에서 사용자를 식별하고 상태를 유지하는 데 사용되는 기술이다. 

쿠키는 로컬 컴퓨터에 저장하지만 세션은 서버에 저장한다.

  쿠키 세션
저장 위치 로컬(클라이언트) 서버
속도 세션보다 빠름 느림
보안 상태 세션보다 안좋음 좋음
만료 만료 날짜 지나면 자동 삭제 Session Time 초과 시 삭제
용량 제한 300개, 도메인 20개, 4KB크기 서버가 허용가능한 용량까지

 

장단점 비교

쿠키의 장점:

  • 간단하게 구현할 수 있으며, 서버 측에 저장하지 않고 클라이언트 측에 데이터를 저장한다.
  • 쿠키는 만료일이 지나기 전까지 계속 유효하며, 클라이언트 측에서도 쉽게 삭제할 수 있다.
  • 다른 도메인에서 사용할 수 있는 경우 쿠키를 공유할 수 있다.

쿠키의 단점:

  • 보안에 취약하다(쿠키에 저장된 데이터는 누군가에 의해 노출될 수 있고 조작될 수 있다)
  • 사용자의 브라우저에 의존하므로 사용자가 쿠키를 거부할 수 있다.
  • 쿠키는 작은 용량으로 제한되어 있기 때문에, 많은 양의 데이터를 저장할 수 없다.

세션의 장점:

  • 세션 데이터는 서버에 저장되므로 보안성이 높다.
  • 세션은 클라이언트 측에서 관리되지 않기 때문에 쿠키보다 안전하다.
  • 데이터 용량이 제한되어 있지 않으므로 많은 양의 데이터를 저장할 수 있다.

세션의 단점:

  • 서버 측에 저장되므로, 서버의 자원을 사용한다.
  • 사용자가 많아질수록 서버의 부하가 증가할 수 있다.
  • 세션은 일정 시간이 지나면 자동으로 만료되지만, 만료 시간을 지정해주지 않으면 계속해서 사용될 수 있습니다. 이 경우 보안상의 위험이 있다.

 

 - 요약

추가로 #HTTP Version 1.1에서는 'Keep-Alive Connection'을 지원해서 지속적 연결을 지향한다.

세션과 쿠키는 둘다 애플리케이션에서 사용자를 식별하고 상태를 유지하는데 사용되는 기술이다.

쿠키와 세션 모두 장단점이 있으므로 네트워크나 이용자 수 등을 고려하여 적재적소에 알맞게 사용해야 한다.

 

 - 참고

ChatGPT

https://interconnection.tistory.com/74

https://dev-coco.tistory.com/61

https://devuna.tistory.com/23

 

 

 

 

추가할 것 : 쿠키 httponly, secure 속성 실습한것 올리기