Http?
특징
Connectionless
비 연결 지향
- 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답 한 후 접속종료
- 커넥션 관리에 대한 비용을 줄이는 것으로 명확한 장점
- (HTTP 1.1에서 Connection 헤더에 keep-alive 라는 설정 줄 시 유지 가능)
Stateless
상태 정보 유지 X
- 요청을 응답하고 접속을 종료시키기에 상태 정보를 알 수 없음
만약 로그인을 하고 그 상태를 유지시킨채 웹 서비스를 계속 제공하려면?
세션
- 일정시간동안 같은 사용자로부터 들어오는 요청을 하나의 상태로 보고 그 상태를 유지
- 세션은 브라우저가 종료되기 전까지 클라이언트의 요청을 유지해주는 기술
- 방문자가 웹 서버에 접속해있는 상태를 하나의 단위로 봄 (=세션)
특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장
- 웹 서버에 저장되는 쿠키 (=세션 쿠키)
- 브라우저를 닫거나, 서버에서 세션을 삭제했을때만 삭제가 됨
- 저장 데이터 제한 X (서버 용량 허용 선)
- 각 클라이언트에 고유 세션ID 부여
동작 방식

1. 클라이언트가 서버에 로그인 요청
2. 서버는 클라이언트의 로그인 요청 유효성 확인 후 unique_id를 sessionid 라는 이름으로 저장
3. 서버가 응답할때 응답 헤더에 set-cookie: sessionid:{unique_id} 를 추가하여 응답
4. 클라이언트는 이후 서버에 요청할 때 전달받은 쿠키를 요청헤더에 추가하여 요청
5. 서버에서 요청헤더의 값을 저장된 세션 저장소에서 찾아 유효성 검증 후 응답
쿠키
- 사용자가 웹 방문 시, 그 사이트가 사용하고 있는 서버의 기록 정보 파일
- 필요시 정보를 참조하거나 재사용 가능
- 쿠키는 클라이언트 로컬에 저장되는 Key-Value 형식으로 이루어진 데이터이다.
특징
- 클라이언트에 총 300개의 쿠키를 저장 가능
- 하나의 도메인 당 20개의 쿠키를 가질 수 있음
- 하나의 쿠키는 4KB(=4096byte) 까지 저장 가능
구성요소
- key: 쿠키의 이름
- value: 쿠키의 값
- expiry_time: 쿠키 만료시간
- route: 경로 정보
동작 방식

1. 클라이언트가 서버에 로그인 요청
2. 서버는 클라이언트 로그인 요청 유효성 확인 후 응답헤더에 set-cookie: user={Name} 을 추가하여 응답
3. 클라이언트는 이후 서버에 요청 시 전달받은 쿠키를 요청헤더에 추가해 요청
- 이 과정에서 헤더에 자동으로 쿠키값이 추가되는데 이는 브라우저에서 작업
쿠키와 세션의 차이점
- 저장위치
- 쿠키: 로컬에 저장
- 세션: 로컬과 서버에 저장됨
- 보안
- 쿠키: 탈취/변조 가능
- 세션: ID값만 가지고 있고 서버에도 저장되어 있어 상대적으로 쿠키보다는 안전
- LifeCycle
- 쿠키: 브라우저를 종료해도 파일로 남아있음
- 세션: 브라우저 종료시 세션 삭제
- 속도
- 쿠키는 파일에서 읽기에 세션보다 빠름
- 세션은 요청마다 서버에서 처리를 해야하게 비교적 느림
최근 추세
- 세션은 사용자의 수만큼 서버 메모리를 차지하기 때문에 속도적인 측면에서 굉장히 취약해짐
- 이를 보완하기 위해 최근에는 토큰 기반의 인증방식을 사용하는 추세
- ex) JWT(JSON Web Token) 토큰
