http 프로토콜
- client 가 server에 요청
- server는 요청에 대한 처리를 한 후 client에 응답
- 응답 후 연결 해제
Stateless
- 지속적인 연결로 인한 자원낭비를 해결하기 위해 연결 해제
- client와 server가 연결상태를 유지해야 하는 경우 문제 발생 ⇒ cookie, session 사용
Cookie 특징
- 서버에서 사용자의 컴퓨터에 저장하는 정보파일
- 사용자가 별도 요청 하지 않아도 브라우저는 request시 Request Header를 넣어 자동으로 서버에 전송
- key - value, String 형태
- Browser마다 저장되는 쿠키는 다름
- 이름(unique), 값, 만료일, 경로 정보로 구성
- 클라이언트에 총 300개의 크키, 하나의 도메인 당 20개의 쿠키
- 하나의 쿠키는 4KB까지 저장 가능
Cookie 사용 목적
- 세션 관리
- 개인화 : 사용자마다 다르게 그 사람에 적절한 페이지를 보여줌
- 트래킹 : 사용자의 행동과 패턴을 분석하고 기록
Cookie 구성 요소
- 이름 : 고유한 이름, 각 쿠키 구별
- 값 : 쿠키의 이름과 매핑 ⇒ 공백 사용할 경우, UrlEncoder 사용
- 유효기간
- 양수 : 해당 기간 까지
- 음수 : session cookie, browser 닫으면 삭제
- 0 : 삭제 효과 (유효기간=0 이므로)
- 도메인 : 쿠키를 전송할 도메인
- 경로 : 쿠키를 전송할 요청 경로 (저장되는 경로)
Cookie 동작 순서
- client가 페이지 요청
- WAS는 쿠키 생성
- HTTP header에 쿠키 넣어 응답
- Browser는 넘겨받은 쿠키를 PC에 저장하고, 다시 WAS가 요청할 때, 요청과 함께 쿠키 전송
- Browser가 종료되어도 쿠키 만료기간이 남아있다면, 클라는 계속 보관
- 동일 사이트 재 방문시, 클라 PC에 해당 쿠키가 있을 경우, 요청페이지와 함께 쿠키 전송
Session 개념
- 방문자가 웹 서버에 접속해 있는 상태
- WAS 메모리에 Object 형태로 저장
- 메모리가 허용하는 용량까지 제한없이 저장 가능
Session 동작 순서
- 클라이언트가 페이지 요청
- 서버는 접근한 클라이언트의 cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인
- session-id가 존재하지 않는다면(처음 온 사용자), 서버는 session-id 생성해 클라에게 전달
- 서버에서 클라한테 준 session-id를 쿠키를 사용해 서버에 저장 (쿠키 이름 : JSESSIONID)
- 클라는 재접속시, JSESSIONID를 이용해 session-id 값을 서버에 전달
Session 특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보 저장
- 웹 서버에 저장되는 쿠키 (=세션 쿠키)
- 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제 되므로 쿠키보다 보안이 좋음
- 저장 데이터에 제한 x
- 각 클라이언트에 고유 Session id 부여
- Session id 로 클라이언트 구분하여 요구에 맞는 서비스 제공
- 마지막 접근 시간 + 세션 시간 (계속 업데이트)
Session vs Cookie
- interface
- Server memory에 Object로 저장
- Object로 저장
- 용량 제한 x
- 만료 시점 : 알 수 없음
- class
- client 컴퓨터에 file로 저장
- file에 저장되므로 String 형태
- 도메인당 20개, 1쿠키 당 4kb
- 만료 시점 : 쿠키 저장 시 설정 (없을 경우 browser 종료 시 만료)
💡 공통점
- 전역에 저장하기 때문에, projcet 내의 모든 JSP에서 사용 가능
- Map 형식을 관리하기 때문에, key 값 중복 허용 x
웹 공간 영역 소멸 시기
page(다른 page로 가면 끝) > request(response 받으면 끝), 남발해도 괜찮, 받으면 바로 사라지기 때문 > session(browser 종료시, session invalidate), 개별 사용자라 생각, 남발 x > application(context 사라지면 종료 → tomcat restart할 경우임), 모든 사용자
⇒ 데이터 저장은 request, session에 주로 함!
'프로그래밍' 카테고리의 다른 글
[Node] NVM을 이용한 Node.js 버전 관리 (Windows | Mac) (2) | 2023.06.28 |
---|---|
[Postman] Naver, Kakao 지도 API 테스트 (0) | 2023.06.27 |