🎈 Q1. Http는 비연결성인가요 연결성인가요?
HTTP는 비연결성입니다.
비연결성 (Connectionless)
클라이언트가 서버와 한 번 연결을 맺은 후 클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어버리는 성질
비연결성의 장점
HTTP는 불특정 다수와의 통신 환경 기반으로 설계됨
- 다수의 클라이언트와 연결을 지속해야한다면 많은 리소스가 발생
- 연결을 유지하기 위한 리소스를 줄이면 더 많은 연결 가능
비연결성의 단점
서버는 클라이언트를 기억하지 못 해 식별 불가 (무상태 Stateless)
- 동일한 클라이언트의 모든 요청에 매번 새로운 연결을 하고 해제해야하는 오버헤드 발생
- 오버헤드를 줄이기 위해 KeepAlive 속성 사용 가능
- 지정된 시간 동안 서버와 클라이언트 사이에 패킷 교환이 없는 경우 안부를 묻기 위한 패킷을 주기적으로 보내 커넥션 유지
- Connection 헤더에 keep-alive 라고 설정
무상태 (Stateless)
서버가 클라이언트의 상태를 식별할 수 없어 그 전에 처리된 통신에 대해 알 수 없다는 특징
- 로그인 상태를 유지한 채 웹 서비스 사용 불가
- 이를 보완하기 위해 정보를 유지하는 cookie와 같은 기술 등장
🎈 Q2. 쿠키와 세션에 대해서 설명해주시고 이 둘의 차이점을 설명해주세요.
쿠키 (Cookie)
브라우저에 사용자 정보를 저장하는 구조
- 공격자에 의해 탈취, 변조 가능성이 높아 보안에 취약
- 파일 형태로 저장되어 브라우저가 종료되어도 정보 유지
세션 (Session)
서버에 사용자 정보를 저장하는 구조
- 중간에 탈취가 가능해 보완에 완벽한 것은 아니지만 비교적 안전
- 클라이언트를 구분할 수 있는 ID를 부여하는데 이를 이용해 인증받고 정보를 이용한다
- 서버에 저장하는 것이라 서버의 메모리를 차지
- 동시 접속자 수가 많은 서버는 서버 과부화의 원인이 됨
- 브라우저 종료시 정보가 사라짐
차이점
- 저장위치 - 쿠키는 로컬에, 세션은 로컬과 서버에 저장
- 보안 - 쿠키는 탈취와 변조 가능, 세션은 ID로 인증하기 때문에 상대적으로 안전
- Lifecycle - 쿠키는 브라우저를 종료해도 파일로 남아있지만 세션은 브라우저 종료시 세션 삭제
- 속도 - 쿠키는 파일에서 읽기 때문에 상대적으로 빠르고 세션은 요청마다 서버에서 처리를 해 비교적 느림