[F-Lab 모각코 챌린지] 14일차 - Cookie 와 Session

F-Lab 모각코 챌린지 14일차 공부를 진행 하며 정리 한 내용입니다 최범균의 JSP 책 9, 10장의 Cookie 와 session 에서 키워드를 얻어 검색하며 정리 한 내용입니다.

[F-Lab 모각코 챌린지] 14일차 - Cookie 와 Session

JSP 필수 이해 요소 2

폴더 구성과 URL 매핑

  • WEB-INF: 웹 애플리케이션 설정 정보를 담고있는 web.xml 위치
  • WEB-INF/classes: 웹 애플리케이션에서 사용하는 클래스 파일이 위치
  • WEB-INF/lib: 웹 애플리케이션에서 사용하는 jar 파일이 위치
💡
JSP 2.0 에서는 web.xml 파일을 반드시 포함하도록 제한.
서블릿 2.5/JSP 2.1 부터는 이 제약이 없어짐

쿠키란?

서버에서 받은 데이터를 웹 브라우저에 저장하는 기능

쿠키의 라이프타임
  • 세션
    현재 세션이 끝날 때 삭제
    어떤 브라우저는 재시작 할 때 세션을 복원하여 세션 쿠키가 무기한 존재할 수 있도록 함
  • 영속적
    - Expires 속성에 명시 된 날짜에 삭제
    - Max-Age 속성에 명시된 기간 이후에 삭제
Secure 와 HttpOnly 쿠키
  • Secure 쿠키
    - HTTPS 프로토콜 상에서 암호화된(encrypted) 요청 일 경우에만 전송
    - 데이터의 안전을 보장하지는 않음
  • HttpOnly 쿠키
    - 서버에서 전송되기만 하는 쿠키
    - XSS 공격을 방지하기 위해 JavaScript 의 Document.cookie API 에 접근 할 수 없는 특징이 있다
쿠키의 스코프

쿠키가 가지고 있는 정보들 중 Domain, Path 정보에서 스코프를 정의

  • Domain
    - 쿠키가 전송되게 될 호스트들을 명시한다
    - 현재 문서 위치의 호스트 일부를 기본 값으로 설정
  • Path
    - 쿠키가 전송되게 될 경로를 나타낸다
    - / 문자는 디렉티브 구분자로 해석되며 다음의 경로들에 모두 매치된다. [ /docs , /docs/web , /docs/web/http ]

왜 사용?

HTTP 프로토콜은 상태 없음(stateless) 을 지향하는 프로토콜

사용자의 브라우저에 상태를 저장하여 HTTP 의 단점을 보완

  • 세션 관리
    로그인, 장바구니, 게임 스코어 등의 정보를 관리
  • 개인화
    사용자 선호, 테마 등의 세팅
  • 트래킹
    사용자의 행동을 기록하고 분석

주의할 점

쿠키를 무분별하게 사용하면 성능 이슈가 발생하는 원인이 될 수 있다
(특히 Mobile data connections 에서)

보안
  • 세션 하이재킹과 XSS
    일부 웹 애플리케이션에서 쿠키는 사용자와 그들의 인증된 세션을 식별하기 위해 사용한다. 그래서 쿠키를 가로채는 것은 인증 된 사용자의 세션 하이재킹으로 이어질 수 있다.
  • Cross-site 요청 위조(CSRF)
    사용자가 자신의 의지와는 무관하게 악의적인 요청을 실행 시키는 공격
    사용자의 권한을 이용하여 공격자가 의도한 동작을 수행하게 만듬
    해결 방법: CSRF 토큰 사용, SameSite 쿠키 속성(일부 브라우저에서 지원 안할 가능성 있음), 요청의 중요 동작에 대한 추가 인증

Session

세션은 웹 브라우저가 아니라 서버에 값을 저장
(HTTP 가 stateless 를 지향하지만 과거 stateful 웹 앱에서 사용 되었는데, 현재도 개발의 편의성을 목적으로 사용되는 요소)

  • 웹 컨테이너는 기본적으로 한 웹 브라우저마다 한 세션을 생성
  • 세션이 생성되면 세션마다 고유 ID 를 생성. 이외에도 최근 접근 정보, 세션 생성 시간 정보를 제공하는 메서드 지원

Spring MVC 에서의 세션

HttpSession 인터페이스를 사용하여 세션을 다룰 수 있다

Spring MVC 에서 세션은 서블릿 컨테이너의 내부에서 자료구조로 구현되며, 이는 서블릿 컨테이너에 따라 다를 수 있음

Apache Tomcat 에서는 세션 데이터를 관리하기 위해 Session Store 를 사용한다. 세션을 직렬화 하고 디스크에 저장 하며 파일 시스템에 저장되어 관리된다.