HTTP (HyperText Transfer Protocol)
HTTP 는 응용 계층의 대표적인 프로토콜이다.
HyperText Transfer Protocol 의 약자로 웹 상에서 데이터를 주고 받기위해 만들어졌다.
특히 웹 브라우저와 서버 사이의 HTML 문서 및 관련 자료를 주로 전송에 사용되며 HTML 문서 만이 아닌 IMAGE, 음성, 영상, 파일, JSON 등 거의 모든 형태의 데이터 전송이 가능히다.
HTTP의 특징
- Client - Server 구조
- 클라이언트는 서버에 요청을 보내고 서버는 요청에 대한 응답을 만들어 클라이언트에게 보내는 구조이다.
- 무상태 프로토콜 (Stateless)
- 서버가 클라이언트의 상태를 유지하지 않는다.
- 그렇기 때문에 서버를 자유롭게 확장 가능하다. (스케일 아웃)
- 비연결성 (Connectionless)
- 서버의 응답 후 연결을 유지하지 않는다.
- 서버 자원을 효율적으로 사용할 수 있지만 요청 마다 새롭게 연결 과정을 진행하기 때문에 효율적이지 않다.
HTTP 의 성능 향상
- Persistent Connection
- 서버 응답 후 연결을 바로 끊어버리면 다음 요청에 다시 새로운 연결을 진행하기 때문에 성능이 떨어진다.
- 이를 해결하기 위해 서버 응답 후 바로 연결을 끊어버리지 않고 일정 시간 동안은 재사용할 수 있도록 연결을 유지하는 것을 말한다.
- Pipelining
- 요청을 하고 응답을 받고 또 다음 요청을 하고 응답을 하는 식으로 (동기식) 통신을 하게되면 속도가 느리기 때문에 응답을 받기 전에 다음 요청을 하여 여러 요청이 함께 처리되도록 하는 것을 말한다.
Cookie
HTTP 는 Stateless 하기 때문에 사용자 정보를 서버에서 알 수 없다.
그럼 로그인 후 사용자 구분을 어떻게 할 수 있을까? 쿠키를 활용할 수 있다.
쿠키란 서버가 클라이언트의 정보를 파악하기 위해 브라우저에 있는 저장 공간이다.
기억해야 할 정보를 쿠키에 담아 클라이언트가 기억하고 요청마다 쿠키 정보를 담아 서버에 보낸다.
하지만 클라이언트에 너무 많은 권한과 정보를 준다는 문제가 있고 이를 Session 을 사용해 해결할 수 있다.
Session
세션은 서버에서 관리하는 저장 공간이다. 따라서 민감한 정보는 서버의 세션에 저장하고 해당 정보에 접근하기 위한 세션 ID 만 클라이언트의 쿠키에 전달하여 정보를 좀 더 안전하게 보관할 수 있다.
Web Cache (Proxy Server)
우리가 인터넷으로 구글에 방문할 때 항상 이 페이지는 저 멀리있는 구글 서버에서 제공하나? 아니다
중간에 KT 같은 ISP (Internet Service Provider) 가 웹 캐시 역할을 하며 제공해준다.
ISP 는 비용 절감을 위해서 이전에 가져온 적 있는 문서는 DB에 임시 저장해두고 동일한 문서가 다시 요청되면 재사용한다.
이를 통해 아래와 같은 이득을 얻을 수 있다.
- 요청에 대한 응답시간 단축
- 더 적은 서버 용량으로 더 많은 사용자 지원
- 네트워크의 혼잡도를 낮춤
하지만 실제 서버의 데이터와 웹 캐시가 제공하는 데이터가 일치하는가에 대한 문제가 발생한다.
그래서 웹 캐시에서는 데이터를 제공하기 전에 해당 데이터의 업데이트 여부를 실제 서버에 물어보고 제공한다.
이를 Conditional Get - 조건부 요청이라 한다.
헤더에 If-modified-since 필드를 이용해서 해당 시간 이후에 수정이 있었는지 묻는다.
'CS > 네트워크' 카테고리의 다른 글
Socket 간단 정리 (1) | 2024.06.01 |
---|---|
[응용 계층] DNS 정리 (0) | 2024.05.31 |
OSI 7계층과 TCP/IP 4계층 간단 요약 (0) | 2024.05.30 |