쿠키와 세션

까만호랭·2023년 8월 17일
1

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

쿠키와 세션은 HTTP 프로토콜의 특징(Connectionless, Stateless)이자
약점을 보완하기 사용한다.

그러면 HTTP프로토콜, 쿠키, 세션에 대해 알아보도록 하자.

🖥️ HTTP프로토콜 특징

  • Connectionless 프로토콜 (비연결지향)
    클라이언트가 서버에 `요청(Request)`을 했을 때, 그 요청에 맞는 `응답(Response)`을 보낸 후 연결을 끊는 처리방식이다

  • Stateless 프로토콜 (상태정보 유지 안함)
    통신이 끝나면 상태를 유지하지 않는 특징 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성
  • 즉, 한번 만에 통신이 끊어지거나, 클라이언트 인증을 매번 해주는 등의 번거로운 일들을 해결하고자 하는 방법이 쿠키와 세션이다.

    클라이언트와 웹 서버 간 정보 유지를 하기 위해 사용하는 것이 쿠키와 세션


    🍪 쿠키??

  • 쿠키
  • >서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일
    클라이언트의 PC에 저장된 쿠키를 필요시 재사용할 수 있다. ex) 쇼핑몰 장바구니, 로그인 시 저장
  • 쿠키 특징
  • 1. 이름, 값, 만료일(저장 기간 설정), 경로 정보로 구성되어 있다.
    2. 클라이언트에 총 300개의 쿠키를 저장할 수 있으며 RAM에 저장되어 있다.
    3. 하나의 쿠키는 4KB까지 저장이 가능하다.

  • 쿠키의 동작 순서
  • 1. 클라이언트가 페이지를 요청한다. (사용자가 웹사이트 접근)
    2. 웹 서버는 쿠키를 생성한다.
    3. 생성한 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때, 같이 클라이언트에게 돌려준다.
    4. 넘겨 받은 쿠키는 클라이언트가 가지고 있다가(로컬 PC에 저장) 다시 서버에 요청할 때 요청과 함께 쿠키를 전송한다.
    5. 동일 사이트 재방문시 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송한다.

    🍪 쿠키 확인


    로그인 값인 i d : aa,   pwd : 11 을 입력하면

    위와 같은 쿠키가 생기는 것을 볼 수 있다 ==> 클라이언트 PC에 저장된 상태


    🖥️ 세션??

    일정 시간동안 같은 사용자로부터 들어오는 요청을 하나의 상태로 보고, 그 상태를 일정하게 유지하는 기술

    방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라 한다.ex)로그인 후 접속된 화면(보안상 중요한 작업 시 사용)


  • 세션 특징
  • 1. 사용자 정보 파일을 웹에 저장하는 쿠키와 달리 세션은 서버에서 관리한다.
    2. 각 클라이언트 고유 Session ID를 부여하여 각 클라이언트에 맞춰 서비스를 제공한다. 3. 쿠키보다 보안이 좋지만 사용자가 많아질수록 서버 메모리를 많이 차지해 속도가 느려진다는 단점이 존재한다. 4. Session ID : 클라이언트가 request를 보내면 해당 서버의 엔진이 클라이언트에게 부여하는 ID명

    쿠키와 세션의 차이

  • 사용자의 정보가 저장되는 위치가 다르다.
  • 보안은 세션, 속도는 쿠키가 빠르다.
  • 쿠키는 클라이언트, 세션은 웹 서버를 사용한다.
  • 쿠키는 text, 세션은 object가 저장 타입이다.

  • 서블릿을 통해 세션 이해해보기

    김밥이라는 것을 만들고 냉장고에 넣어두는 것을 생각해보자
    김밥 : 데이터
    냉장고들이 있는 곳 : 웹 서버
    냉장고 : 세션
    냉장고 칸(야채칸,김치칸...) : key (key는 여러개가 있어도 된다.)-sanglist
    반찬통 : key 안에 들어갈 value(값)-glist


    glist 라는 반찬통 만들기

    if(glist==null) glist = new ArrayList<Goods>();

    냉장고 안에 들어있는 반찬통 glist 꺼내기

    ArrayList<Goods> glist = (ArrayList<Goods>)session.getAttribute("sanglist");

    glist 반찬통에 김밥 넣기

    glist.add(new Goods(name, price));

    glist 반찬통을 다시 냉장고 칸에 넣는 행위

    session.setAttribute("sanglist", glist);
    profile
    남들과 함께 발자국을 남기는 까만호랭

    0개의 댓글