HTTP 특징
HTTP를 통해 하는 통신의 가장 큰 특징은 두가지 입니다.
'비연결성', '상태정보를 유지하지 않는 무상태(stateless)'
1. 비연결성
비연결성은 클라이언트와 서버가 한 번 연결을 맺은 후,
클라이언트 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어 버리는 성질을 말합니다.
- 장점
- HTTP는 인터넷 상에서 불특정 다수의 통신 환경을 기반으로 설계되었습니다.
- 이때 다수의 클라이언트와 연결을 계속 유지한다면, 서버에 부담이 죄겠죠?
- 웹의 비연결성이 많은 클라이언트가 접속하기 쉽도록 하여 초기 웹서비스를 빠르게 성장시킨 계기가 되었습니다.
- 단점
- 서버는 클라이언트를 기억하고 있지 않으므로 동일한 클라이언트의 모든 요청에 대해, 매번 새로운 연결을 시도/해제의 과정을 거쳐야하므로 연결/해제에 대한 오버헤드가 발생합니다.
- 해결방법
- HTTP의 Keepalive 속성 이용
2. 무상태(Stateless)
Connectionless로 인해 서버는 클라이언트를 식별할 수가 없는데, 이를 Stateless라고 합니다.
서로 완벽하게 독립적인데요.
우리가 로그인할 때 적는 아이디 및 비밀번호도 상태가 저장되지 않습니다.
이렇게 클라이언트의 상태를 모른다는 것은 예를 들면 다음과 같습니다.
- 웹 서비스 접속 -> 로그인 -> 상품 클릭(이미 로그인 정보 없음) -> 로그인 ---
즉, 애번 새로운 인증을 해야하는 번거로움이 있습니다.
이를 해결하기 위해 등장한 개념이 쿠키와 세션이라는 개념입니다.
쿠키
- 쿠키란?
- 클라이언트인 웹 브라우저 로컬에 저장하는 키(key)와 값(value)이 들어있는 작은 데이터 파일입니다.
- 만료시점
- 사용자 인증이 유효한 시간을 명시 가능, 브라우저가 종료되도 유효시간이 남아있으면 인증이 유지 됨
- 쿠키 구성 요소
- 이름 : 각각의 쿠키에 대한 식별자
- 값 : 쿠키의 이름과 관련된 값
- 유효시간(만료시점) : 쿠키의 유지시간
- 도메인 : 쿠키를 전송할 도메인
- 경로 : 쿠키를 전송할 도메인
- 쿠키 동작 방식
- 클라이언트가 브라우저에서 웹 페이지 접속
- 웹페이지를 받으면서 쿠키를 로컬에 저장
- HTTP 헤더에 쿠키를 포함시켜 응답
- 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라언트에서 보관하고 있음
- 재요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
- 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트 하여
변경된 쿠키를 HTTP 헤더에 포함시켜 응답
- 예시
- 자동로그인 - 방문 사이트에서 로그인 시, 아이디와 비밀번호를 저장하시겠습니까?
- 팝업에서 '오늘 더 이상 이 창을 보지 않음'을 체크
- 쇼핑몰의 장바구니 (비 로그인시 장바구니에 담았던 품목을 로그인 시 그대로 유지하기 위해서 사용)
- 용량제한
- 한 도메인 당 20개, 모든 도메인에 대해 300개 제한, 하나의 쿠키는 4KB
- 클라이언트도 모르게 접속되는 사이트에 의해서 설정 될 수 있기 때문에 쿠키로 인한 문제가 발생하는 것을 막고자 제한을 걸어놓았다.
- 하나의 도메인에서 쿠키가 20개를 초과하면 가장 적게 사용된 쿠키부터 삭제
- 쿠키의 단점
- 클라이언트 로컬에 저장되기 때문에 request에서 스나이핑 당할 우려가 있습니다.
세션
- 세션이란?
- 일정 시간 동안 같은 사용자, 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술
- 즉, 웹 브라우저를 통해 웹 서버에 접속한 이후로 브라우저를 종료할 때까지 유지되는 상태
- 쿠키를 기반, 차이점은 사용자 정보를 브라우저에 저장하지 않고 서버에서 관리
- 만료시점
- 서버에서는 클라이언트를 구분하기 위해서 유일한 세션ID 를 부여하여 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태 유지
- 세션의 장점
- 쿠키를 이용하여 세션ID만 저장하고 구분해서 서번에서 저장하기 때문에 쿠키보다 보안에 우수
- 세션의 단점
- 쿠키보다 보안 면에서 우수하지만 사용자가 많아질경우 서버 메모리를 많이 차지하게 됨 -> 성능 저하의 요인
- 세션의 동작 방식
- 클라이언트가 서버에 접속시 세션 ID 를 발급
- 클라이언트는 세션 ID 에 대해 쿠키를 사용하여 저장
- 클라이언트가 서버에 다시 접속 시 이 쿠키를 이용해서 세션 ID 값을 서버에 전달
-> 즉, 세션을 구별하기 위해 ID가 필요하고 그 ID만 쿠키를 이용해서 저장해놓습니다.
- 예시
- 로그인과 같이 보안 상 중요한 작업
캐시?
캐시는 이미지나 css, js파일 등의 값을 복사하여 임시로 사용자의 브라우저에 저장이 되는 것입니다.
이를 이용해 자원이 아껴지는 데, 한번 캐시에 저장되면 브라우저를 참고하기 때문에 서버에서 변경이 되어도 사용자는 변경되지 않게 보일 수 있는데 이런 부분을 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료시간을 명시하는 방법등을 이용할 수 있습니다.
<참고>
'개발' 카테고리의 다른 글
자동투자봇 준비 - open API, KOA Atudio 설치 방법open API, KOA Atudio 설치 방법 (0) | 2021.03.22 |
---|---|
윈도우 아나콘다 설치 및 삭제 명령어 (0) | 2020.07.14 |
댓글