[Web]쿠키와 세션

쿠키와 세션은 HTTP를 가지고 통신할때 발생할 수 있는 단점들을 보안할때 자주 사용되곤 한다.

HTTP의 두 가지 특성은 아래와 같다.

  • 비연결성(connectionless)

HTTP 통신은 소켓 통신과 다르게 클라이언트와 서버가 한 번 연결을 맺은 후 연결을 종료한다. 즉, 계속해서 연결을 유지하지 않으며 리소스의 낭비를 줄일 수 있어 장점이 될 수 있다.

  • 비상태성(stateless)

통신이 끝나면 상태를 유지하지 않음. 한 번의 통신이 끝난 이후 상태를 저장하지 않음. 예를 들면 쇼핑몰에서 페이지를 전환할때마다 새로운 커넥션이 생성되기 때문에 계속 로그인을 해야할 수도 있다.

HTTP는 비연결성과 비상태성이라는 특징 때문에 불특정 다수와의 통신을 가볍게 할 수 있다는 장점이 있다. 하지만 통신할때마다 새로운 커넥션을 생성하고 이전의 상태를 저장하기 않기 때문에 클라이언트가 계속해서 인증해야 한다는 단점이 발생한다. 이러한 단점을 해결하기 위해 쿠키와 세션이 사용될 수 있다.

1. 쿠키(Cookies)

클라이언트에 저장되는 key: value 형식의 작은 데이터 파일이다. 예를 들면 이름, 값, 만료 날짜, 경로 정보 등이 저장된다. 브라우저 사용자가 웹 사이트를 방문할 때 서버에서 쿠키를 생성하여 사용자의 컴퓨터에 기록한다. 클라이언트가 저장하고 관리하기 때문에 보안에 취약할 수 있다.

1-1. 제약 조건

  • 클라이언트에 총 300개의 쿠키만 저장 가능
  • 하나의 도메인당 20개의 값만 가질 수 있음
  • 하나의 쿠키 값은 최대 4096Byte까지 가능

1-2. 쿠키의 작동방식

https://valuefactory.tistory.com/707

  1. 브라우저를 통해 웹 페이지 접속
  2. 서버에서 쿠키 생성 및 Set-Cookie를 통해 HTTP 헤더에 쿠키를 포함하여 클라이언트로 전송
  3. 이후의 클라이언트의 모든 요청은 Cookie를 HTTP 헤더에 포함하여 전송

1-3. 쿠키의 사용 예

  • 쇼핑몰 장바구니
  • “7일간 보지않기”와 같은 팝업 해제
  • 아이디 / 비밀번호 저장

2. 세션(Session)

클라이언트와 서버간의 네트워크 연결이 지속적으로 유지되는 상태. 브라우저가 웹 페이지에 접속하면 서버는 요청한 클라이언트를 유일하게 식별할 수 있는 세션ID를 만들어 부여함. 이 세션 ID를 쿠키로 클라이언트에게 전송하며 클라이언트는 세션 ID만을 쿠키로 가지고 있어 보안상 더 나은 수단이라고 볼 수 있다.

2-1. 세션의 작동방식

https://valuefactory.tistory.com/707

  1. 브라우저를 통해 웹 페이지 접속
  2. 서버는 세션 ID(JSESSIONID)를 만들고 DB또는 RAM에서 저장하여 관리함. 그리고 세션 ID를 쿠키로 클라이언트에게 전송.
  3. 이후의 클라이언트의 모든 요청은 세션 ID를 가진 쿠키와 함께 전송되고 서버는 이 세션 ID를 통해 클라이언트를 구분할 수 있음.

2-2. 세션 사용의 예

  • 로그인

정리

쿠키와 세션은 저장위치 / 보안 / 생명주기 / 속도의 방면에서 차이점이 존재한다.

  • 저장위치

    • 쿠키: 클라이언트
    • 세션: 서버
  • 보안

    • 쿠키: 클라이언트에 저장되기 때문에 보안에 취약
    • 세션: 쿠키를 이용해 세션 ID만 저장하고 세션 ID를 통해 서버에서 구분하므로 비교적 안전
  • 생명주기

    • 쿠키: 만료시간이 있지만 파일로 저장되기 때문에 계속해서 남아있을 수 있다.
    • 세션: 세션도 만료시간이 있지만 브라우저를 종료하면 같이 삭제
  • 속도

    • 쿠키: 실제 정보가 클라이언트에 있어서 빠름
    • 세션: 실제 정보를 얻기 위해 서버를 거쳐야 함으로 비교적 느림

[참고]
https://valuefactory.tistory.com/707
https://soul0.tistory.com/353
https://hees-dev.tistory.com/43
https://jcon.tistory.com/62

Share