Request
- 프론트엔드에서 백엔드에 일을 시작하게 하기 위해 보내는 메세지
- 클라이언트(브라우저)가 서버에 특정 리소스를 요청할 때 발생
- Http 프로토콜을 통해 이루어짐(웹 브라우저에서 웹 페이지를 요청하면 그것이 하나의 요청이 되는 것)
- 하나의 요청을 공유함
- 요청은 클라이언트가 원하는 동작과 함께 필요한 데이터를 서버에게 전달

출처
구조
1)Start Line : HTTP Method(GET,POST...) + Request target(해당 request가 전송되는 url 목적지) + HTTP Version(주로 1.1버전) -> Get/login HTTP/1.1
2)Headers : 추가 정보(메타 데이터)를 담고 있는 부분. key-value구조
3)Body : 해당 요청의 실제 내용
Session
- 객체
- 클라이언트와 서버 간의 상태를 유지하기 위한 메커니즘
- 브라우저를 닫거나 서버에서 세션을 삭제하면 세션이 삭제됨
- 세션은 각 클라이언트의 고유 세션 ID를 부여하고, 이 ID로 클라이언트를 구분하여 각 클라이언트의 요구에 맞는 응답 반환
- 같은 브라우저를 공유함

출처
동작 순서
1) 클라이언트 요청
2) Request-Header 필드의 Cookie에서 세션 ID를 보냈는지 확인
3) 세션 ID가 없을 경우 서버에서 생성한 후 클라이언트에게 전송
4) 쿠키를 사용해 세션 ID를 서버에 저장
5) 클라이언트 재접속 시, 쿠키를 이용하여 세션 ID값을 서버에 전달
Cookie
- key-value 형식의 문자열 형태
- 서버가 클라이언트에 정보를 전달할 때 저장하고자 하는 정보를 응답 헤더에 저장하여 전달
- 브라우저에 저장되어 접속자 장치를 인식하거나 일부 데이터를 저장하는 역할을 함
- 웹사이트가 인터넷 사용자에 대한 정보를 기억하고, 인터넷 사용자가 웹사이트를 더욱 효율적으로 이용할 수 있도록 함
- 브라우저를 껐다 켜도 로그인이 되는 경우는 쿠키를 사용한 것
- 노출 시 민감한 정보까지 노출되기 때문에 보안성이 약하고, 웹 브라우저마다 쿠키의 지원 형태가 달라 브라우저 간 공유가 불가하며 용량이 4KB로 제한되어 있어 충분한 데이터를 담을 수 없음
- 사용 여부를 브라우저에서 선택할 수 있음
- 쿠키를 프로그램 상 직접 삭제할 수는 없음. 쿠키 삭제는 사용자가 쿠키 삭제를 누르는 기능을 의미함
![업로드중..]()
출처
역할
1)세션 관리 : 서버에 저장해야 할 데이터 관리
2)개인 맞춤 데이터 : 테마 등의 세팅값
3)트래킹 : 사용자의 행동을 기록 및 분석
종류
| 속성 | Persistence 쿠키(흔히 말하는 쿠키) | Session 쿠키 |
|---|
| 생성 위치 | 파일로 생성 | 브라우저 메모리에 생성 |
| 종료 시기 | 쿠키를 삭제하거나 쿠키 설정 값이 종료된 경우 | 브라우저를 종료한 경우 |
| 최초 접속 시 전송 여부 | 최초 접속 시 서버로 전송 | 최초 접속 시 서버로 전송되지 않음 |
| 용도 | 로그인 유무 또는 팝업창을 제한할 때 | 사이트 접속 시 Session 인증 정보를 유지할 때 |
- 쿠키 삭제 : 사용자가 쿠키 삭제를 누르는 경우
- 설정 값 종료 : 만기 시간이 지나면 소멸되는 경우
쿠키 API
- 쿠키는 Cookie 클래스 객체를 생성하여 정보를 저장한 후 서버에서 클라이언트로 전송해 파일로 전송됨
- javax.servlet.http.Cookie 이용
- 브라우저에 쿠키 전송&저장 : addCookie()
- 쿠키를 서버로 가져옴 : getCookie()
- setMaxAge()를 사용해 쿠키 저장 방식을 나눔(인자값 없으면 session, 있으면 그 시간만큼 persistence)
쿠키와 세션 차이
| 구분 | Cookie | Session |
|---|
| 저장 위치 | 클라이언트 | 서버 |
| 만료 시점 | 쿠키 저장시 설정함 | 브라우저 종료 시 |
| 보안 | 취약 | 비교적 안전 |
| 속도 | 빠름 | 비교적 느림 |
trade-off
- 서비스 측면에서 볼 때 로그인을 매번 하는 것은 좋지 않기 때문에 쿠키를 사용
- 쿠키를 암호화해서 저장하면 보안성을 높을 수 있음