쿠키와 세션

mer1·2021년 3월 9일
0

WEB

목록 보기
2/3

본 게시글은 인프런 크리핵티브 무료 강의 "반드시 알고 넘어가야 할 웹 기술 기초편"을 참고하여 작성하였습니다.


등장 배경

HTTP 프로토콜은 비연결지향(Connectionless), 상태정보 유지안함(Stateless) 특성 때문에 서버는 통신할 때마다 클라이언트가 누구인지 인증을 해야 한다.

  • 비연결지향(Connectionless)
    클라이언트가 요청한 후 응답을 받으면 그 연결을 끊는다.

  • 상태정보 유지 안함(Stateless)
    통신이 끝나면 상태를 유지하지 않는다.

쿠팡에서 물건을 사려고 최초 로그인을 해도 서버는 클라이언트가 누군지 기억하지 않기 때문에 페이지를 이동할 때마다 로그인을 해야 하는데, 이를 해결하기 위해 쿠키와 세션을 사용하게 된다.

쿠키(Cookie)

  • 웹 서버에서 발급 시 클라이언트 하드 디스크에 텍스트 형태로 저장되는 작은 기록 정보 파일이다.
  • 클라이언트 PC 사용자들은 해당 쿠키 정보를 열람할 수 있다.
  • 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.
  • 일정 시간 동안 데이터를 저장할 수 있다.

쿠키 헤더 구조

서버에서 클라이언트로 쿠키 발급 시 Set-Cookie 헤더에 의해 클라이언트 쿠키값이 세팅이 되고 해당 사이트 접근 시마다 클라이언트는 Set-Cookie에 의해 세팅된 값을 Cookie 헤더에 세팅하여 요청 메시지를 전달한다. 서버는 이를 통해 상태 관리를 한다.

* Set-Cookie 헤더 구조
Set-Cookie: name=value [; expires=date] [; path=path] [; domain=domain] [; secure]

* Cookie 헤더 구조
Cookie: name1=value1 [; name2=value2] [; name3=value3]

쿠키 발급 과정 (로그인 예시)

  1. 아이디 패스워드 입력 후 로그인 요청을 한다.

  2. 로그인이 정상적으로 이루어지면 Set-Cookie 헤더에 의해 쿠키 값이 세팅이 된다. (id=hong123 등)

  3. 홍길동이 B 사이트에 다시 접근하게 되면 웹 브라우저에서는 해당 사이트에 대한 쿠키값을 Cookie 헤더에 세팅한다. 웹 어플리케이션 서버는 이를 통해 사용자 식별을 한다.

  4. 로그아웃 요청이 오면 웹 어플리케이션 서버에서는 Set-Cookie 헤더에 삭제할 값을 입력한다. 그 결과 사이트 B에 대한 쿠키 정보는 사라지게 된다.


쿠키 사용의 예시

  • 쇼핑몰의 장바구니 기능
  • 방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까"

세션(Session)

  • 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
  • 서버에서 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때가지 인증상태를 유지한다.
  • 세션은 문자가 암호화, 난독화 되어있는 형태가 아닌 임의의 문자들이 무작위로 나열된 것으로 공격자 측에서는 특정 사용자의 세션을 추측하기 어렵다.
  • 사용자에 대한 정보를 서버에 저장하기 때문에 보안 면에서 쿠키보다 우수하다.
  • 사용자가 많아질수록 서버에 과부하를 주게 되므로 성능 저하의 요인이 된다.

세션 발급 과정 (로그인 예시)

  1. 아이디 패스워드 입력 후 로그인 요청을 한다.
  2. 로그인이 정상적으로 이루어지면 웹 어플리케이션 서버에 클라이언트의 세션 정보가 세팅된다.
  3. Set-Cookie 헤더를 통해 클라이언트 웹 브라우저에 세션 값을 세팅한다.
  4. 홍길동이 B 사이트에 접근할 때마다 Cookie 헤더를 통해 본인의 세션 값을 세팅하고 이를 통해, 다른 페이지로 이동해도 사용자 인증을 거칠 필요가 없게 된다.
  5. 세션 폐기는 서버 안에 홍길동의 세션 값 삭제를 통해 이루어진다.


세션 사용의 예시

  • 로그인 정보 유지

정리

세션이 보안 측면에서 좋은데 왜 쿠키를 사용할까?
-> 대규모 웹 서비스의 경우 수많은 사용자들의 세션을 관리하기에는 서버에 엄청난 부하를 가져오기 때문에 서버에 부담이 낮은 쿠키 사용을 선호한다.


참고 문헌

profile
정보보안을 공부하는 학생 (github 블로그로 이사갔습니다!)

0개의 댓글