HTTP and Web structure

a1.png

-그림 1. 모던 웹 구조-

웹은 HTTP를 이용해서 통신하는 클라이언트와 서버로 구성됨

  • 서버: 대ㅔ이터를 관리하고 클라이언트의 요청을 받아 처리하고 그 결과를 배포하는 시스템
    • 웹 서버: 정적인 페이지를 서비스함
    • 웹 어플리케이션 서버: 클라이언트 요청에 데이터를 동적으로 처리하여 서비스를 지원함
  • 클라이언트: 네트워크를 통해 필요한 서비스를 요청하는 시스템

웹 프레임워크 구조

a2.png

-그림 2. 자바 WAS-

  • 정적 요청: 로컬 저장소에서 파일을 찾아서 응답
  • 동적 요청: 동적 요청 처리를 위한 웹 애플리케이션 호출
  • 서블릿(servlet): 웹 서비스를 위한 인터페이스, HTTP 요청을 처리할 수 있는 규격

쿠키와 세션

HTTP 프로토콜의 두 가지 특징

  1. 비연결지향(Connectionless)
  • HTTP는 한 번의 TCP 연결에서 하나의 요청과 응답을 처리하고 연결을 종료함
  • 클라이언트의 정보가 지속적으로 서버에서 관리되지 않음
  1. 무상태 프로토콜(Stateless)
  • 연결을 종료하는 순간 클라이언트와 서버의 통신이 끝남, 상태 정보 유지하지 않음

쿠키

  • 쿠키는 HTTP 통신시 사용자 정보를 유지하기 위해 서버에서 생성하여 응답 헤더에 붙여 클라이언트에 전송하는 정보이다.
  • 쿠키 정보는 해당 사이트에 요청을 전송할 때 이름 = 값 형식으로 요청 헤더에 포함되어 서버에 전달된다.
  • 쿠키의 제약 사항은 브라우저당 최대 300개, 각 호스트마다 최대 20개 까지 사용가능하며, 크기는 최대 4KB이다.
세션 쿠키 영속 쿠키
브라우저가 열려있는 동안 유효한 쿠키, 서버를 이용하는 동안 사용자 정보를 유지하기 위해 사용 하드디스크에 유효기간 동안 저장되는 쿠키, 사이트 재 방문 시 사용자 정보를 기억하기 위해 주로 사용

대표적인 쿠키 옵션

  • Domain: 브라우저가 쿠키값을 전송할 서버의 도메인 지정
  • Path: 브라우저가 쿠키값을 전송할 URL 지정
  • Expires: 쿠키의 유효 기간 설정
  • Secure: SSL 통신채널 연결시만 쿠키를 전송하도록 설정
  • HttpOnly: 자바 스크립트에서 쿠키값을 읽어가지 못하도록 설정

세션

a3.png

  • 클라이언트와 서버의 논리적인 연결, 무상태 프로토콜인 HTTP를 사용하는 경우, 서버는 사용자 정보를 유지하기 위해 서버의 메모리에 각 브라우저별로 세션 영역을 할당하고 각각의 영역은 세션 ID로 구분, 이것을 세션 토큰이라 부른다.
  • 일정 시간 동안 같은 클라이언트(브라우저)로부터 송신되는 일련의 request를 하나의 상태로 인식하고 그 상태를 유지하는 기술, 클라이언트가 웹 브라우저를 통해 웹 서버에 접속한 이후로 브라우저를 종료할 때 까지 연결이 유지되는 상태

세션 ID를 클라이언트에게 전달하는 방법

  1. HTML 히튼 필드를 이용하는 방법
    • HTML의 히든 필드로 클라이언트에 전달
    • 웹 페이지에서 보여지지 않음
    • 소스 보기를 통해 쉽게 ID값 추출 가능
  2. URL rewriting을 이용하는 방법
    • 클라이언트 웹 브라우저가 쿠키 사용을 제한한 경우에 사용하는 방법, URL rewriting을 사용하여 ID를 전달한다.
    • 웹 서버에서 서비스되는 페이지의 모든 URL에 세션 ID를 request parameter로 붙여서 사용
    • localhost:8080/…/jsessionid=1284AH8AJDAJD78123UASD28D7

  3. 쿠키를 이용하는 방법
    • 클라이언트 웹 브라우저가 쿠키 사용을 허용하는 경우 편리하게 사용됨
세션의 장점 세션의 단점
정보를 서버에서 관리하기 때문에 쿠키보다 보안에 우수 서버 부하 증가